回 帖 发 新 帖 刷新版面

主题:60岁的我学编程--别笑我,我用笨办法入门!

      我学软件编程到今天是第九天(我想用一个月时间拿下)以前工作时,总是听同事们谈有关编程的事如何如何 ,我一听他们谈此事,马上离开,因为我一点也不懂。后来在接受新任务时,同事们都认为只有用单片机才能很好的完成,可我一片空白,在老板的要求下,我只有硬前头皮往里闯,以下是我通过一周多的时间学习(完全自学)一点点体会,说出来可别笑我,我真的很笨的。。。。。,
        当我从网上找到一些有关初学者入门的资料后,不知道从哪开始,看了半天还不知道是怎么一回事,我又没有学过英语(其实我汉语拼音都不会)只认识二十六个字母,所以看资料特别吃力(好在我的硬件知识比较强,相关的硬件知识不用从头开始),我一打开学习资料,开始有些预备知识,这是在学C语言编程时,必须要搞清楚明白的(由于我对数字电路平时用的比较多,这些预备知识就没有花多少时间)就直接从最简单的编程开始;
    1.1;      #include<reg52.h> 
        sbit d1=P1^0;     
        void main()
        {
            d1=0;
        }
     
    这是一个入门的小程序,点亮仿真器上的第一只发光管;
    开始碰到的:“#include(reg52.h)”这个头文件(我把他定为开始文件)第一个要解决的是;
        “#”提示你,后面的内容必须要,也不能错,否则,一切都没用。接着来就是“include”;
    这个单词怎么读(我用金山软件翻译并发音)我的笨办法发音“英格路的”加后面的字母读间“reg”念成“儿热哥”全句读下来为;"英格路的,<>儿热哥+52.h"所以,我很快就记住了。
     接下来是理解这是什么意思?通过资料上的注释,我把这句理解为“单片机内部的大仓库的招牌名”就象一个大超市,挂在外面的名称;(请别笑我)由于我把单片机比着一个大超市,里面的东西是很多的,你想到超市里找到你要的东西,你得先找到东西放的位置,为了一下找到,你就可能通过指示目录,看看东西放在几楼,哪个区类,知道了你就可以直接找到他(也可认为是一本书的目录,你要看什么内容,可以通过目录一下找到的,这就是这样理解的)。
      sbit;理解为是超市里的位置名,超市共有四层,地上三层,地下一层,分别为P1,P2,P3,为地面123层,P0为地下层。在每一层里都有八个房间,“P1^o”就表示是第一层第一个房间,“D1”就是为这个房间自己为此起的名,在单片机里,;P1^0;就是单片机P1口的第一位(0),D1是为此起的名,共八个,这是第一个,可以随便起,自已知道就行。
      void main(); 看了目录,你就可以直接去取了,“void main()”我理解为超市里只有唯一一条入口,进去了就不能出来,(void),无返回,后面的; "main()"我念为‘没函数’括号内没有内容,每一超市只有且仅有此一个。
      “D1=0”就是我们前面说的,去了一层第一号房间,里面的东西只有二种,要么有,要么无,用0和1表示,0表示无,1表示有,在单片机里,0--表示低电平,1--表示高电平。
      这样,我很快就理解了上面的小程序,我用这样的笨办法,也让我很容易理解调用子程序的实例;
    
        流水灯小程序;
     #include<reg52.h>            *超市名
    #include<intrins.h>           *超市中的仓库
    #define uint unsigned int     *超市中的管理办公室
    #define uchar unsigned char   *同上
    void delay(uint );            *超市调度
    uint a;                       *超市调度为提取物取名
    void main()                   *超市中唯一的通道 
    {
        a=0x7f;                   *超市提取物放的位置
        while(1)                  *告诉你找到后不要出门,就在里面打转;
        {
            delay(10);            * 超市调度下的指令,      
            P1=a;                 * 把提取物放在 超市一层第一间房里, 
                  a=_crol_(a,1)      *要求你拿到东西后看一下跑进下一间               
              }                       顺序是从第一间到第七间来回跑
    }
    
    void delay(uint z )       超市调度对物品的管理 调度仓库
    {
        uint x,y;            调度仓库起名
        for(x=z;x>0;x--)     要求一直把X仓库的东西拿完,第一次只能拿一件
         for(y=100;y>0;y--); 取完X仓库后再进Y仓库,方法同上
    
    }
     
    
    (待续)看后可别笑我,我很笨,只能把我理解的东西用我的方法记住
    
    
    

回复列表 (共8个回复)

沙发

#define uint unsigned int     *超市中的管理办公室
这个理解感觉很有疑问
另外
我觉得比较正规的写法应该是用
typedef 
当然你的写法也不能说是错的

板凳


谢谢专家的指点,#define uint unsigned int     *超市中的管理办公室
    #define uchar unsigned char   *同上
   其实,我对为什么要这样规定还没有搞清楚,为什么叫"宏定义",怎样才能理解宏定义的内涵?用我的笨办法应该怎么理解才对,需进一步思考,并请专家作一下具体形象的,我一看就能记住的比如,谢谢您的指点!!!!

3 楼

您客气了
我也不是什么专家
业余爱好而已
而且你那些单片机的东西我也不是很清楚
瞎说几句
供你参考

我想“宏”在某种程度上可以理解为“简称”
比如我们一般不说“中国共产党中央委员会”
而说“中共中央”
在计算机的语境中
“宏”的含义一般是用一个简单的名词代表一系列复杂的名词(或形容词)或者一系列复杂的动作

也可以理解为“一套班子”“两块牌子”
在不同的场合
用另一块牌子说话可能更名正言顺
所以有的时候为一个东西再取一个名字(不一定比前者更简单)
typedef 的意义大抵如此

和#define uint unsigned int等效的一个写法是
typedef unsigned int unit;
这意思是说以后在代码中把unsigned int这种类型叫做uint

4 楼

谢谢你,看了你这样一解释,我就有比较清楚的概念了,也就是在这二条语句中,为了编写方便,特意将此作了规定(也就是宏定义)把#define uint unsigned int和 #define uchar unsigned char ;可以分别用uint uchar来替换全称,这样编写起来就更加的简洁,方便。
   
 对于 #define uint unsigned int和typedef unsigned int unit;的不同只是格式,用法效果一样,可在不同的情况下选用。
      是这样理解 吗?谢谢你的赐教;

5 楼

我认为你理解的很对
你的代码好象不全
能否全贴出来
我看看我能否看懂

6 楼

流水灯

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint a;
void delay(uint z);
void main()
{
    a=0xfe;
    
    while(1)
    {
        delay(1000);
        P1=a;
        a=_crol_(a,1);//改变a值可以变多个花样,也可改变流动方向//
        
    }
 
}
void  delay (uint z )
     
     
{
    uint x,y;
     
    for(x=z;x>0;x--)
       for(z=100;y>0;y--);
}

  2. LED闪光电路

      #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
void delay ();//无返回子程序调用声明//
void main()
{
    while(1)
    {
        d1=0;
        delay();
        d1=1;
        delay();
    }
}
void delay()
    {
        uint x,y;
        for(x=100;x>0;x--)
            for(y=100;y>0;y--);
    }
    

    //不带参数的子程序调用(延时电路)//

3.另一种闪光电路

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^0;
/*void delay();*/  //调用了程序声明。无返回值//
void delay(uint);//调用子程序声明,带参数,//
void main()
{
    while(1)
    {
    D1=0;
    delay(10);
    D1=1;
    delay(15);
    }
}
void delay(uint z)
    {
        uint x,y;
        for(x=100;x>0;x--)
          for(y=z;y>0;y--);
    }

     //"这是带参数的子程序//
   下一步在学习码管字段显示,先搞清楚静态,后学动态,接下来就是‘中断’和定时器,准备用五天时间把基本概念搞清楚,并希望能得到你的帮助,到了最后我想用我设计的一款《智能充电器》作为第一阶段学习总结(这款产品是我在一家外企为英国客人设计的,以出口数万台,目前采用这种设计方案的产品,国内还没有一家,我进行过专利检索)。



7 楼

数码管静态扫描程序,不知道哪出了错,朋友请帮忙指点一下吧,我是初学者,今天
是学C语言第九天



#include<reg52.h>            //1
#define uint unsigned int    //2    
#define uchar unsigned char    //3    
sbit du=P2^6;                //4    
sbit we=P2^7;                //5    
uchar a;
                    //6    
uchar code bable[]={        //7    
0x3f,0x06, 0x5b, 0x4f,         
0x66, 0x6d, 0x7d, 0x07,      
0x7f,0x6f,0x77,  0x7c,        
0x39, 0x5e,0x79,0x71,};  
 
void delay (uint z);        //8    
void main()                    //9    
{
    we=1;                    //10
    P0=0xc0;
    we=0;                    //11
    while(1)
    {
        for(a=0;a>16;a++);//12
        {
            du=1;               //13
            P0=bable[a];      //14
            du=0;                //15
            delar(100);          //16
        }
    }

}
void delay (uint z)              //17
    {
        uint x,y;                //18
        for(x=z;x>0;x--)         //19
         for(y=100;y>0;y--);     //20
    }
    
    这是数码管静态扫描显示程序,不知道哪出了错,程序总是执行到第十六步就停了,我查了半天没有找到原因,请朋友指点一下吧,谢谢

8 楼


  怎么没有人帮我啊,我找到了错误之处,我把第16句“delay”,  错写成“delar”,就这点小错误也不放过啊,看来以后在写程序时小心加小心,严格按要求来才是。

我来回复

您尚未登录,请登录后再回复。点此登录或注册