spe061a单片机入门

首先先说明一下我才刚刚接触单片机,都是说这个入门慢,其实说的一点错误没有。我觉得我入门这个很慢,学这个也才刚刚的半个月,现在只是刚刚的通过按键,能够点亮或者熄灭一盏灯。

1.四月三十号,刚刚把流水灯搞定完了就开始搞,通过按键点亮熄灭一盏灯,刚开始看的资料觉得跟不知道从哪里下手,就先问了几个学的比较快的同学,他们把说说的也是那样似懂非懂,上午上完了第一节课就没有课了我就一直坐在实验室研究这个任务,先看了几个视频,觉得讲的根本不是一个地方,然后去看一些电子书,基本上的远离通顺了,但是写出代码又是一件大事情,还好在每个电子书后面有成品的代码,我就把那个代码copyIDE中,想先运行一下,先看看效果,但是这种实验要通过按键的,不能在电脑上的,虚拟上看出来,没那么问题来了,怎么连线又是一回事,我又仔细看了一遍LED灯的模组资料(看了最好三四遍了),把线连好了之后发现是错的,根本不亮(最让我苦恼的事情这种事情是百度不到的),然后又自己乱搞了几次发现只有一盏灯亮,我有事再没有办法了,只好请旁边这个卓越班的同学帮我搞一下,结果原来是程序的错误,没有~符号,他给我家里两行代码就这么搞好了,哎,总是太过相信权威了呀。这个哥们又给我一些建议说我是I/O口,没有学好,但是我还是觉得只有亲身实践了才能学得到更多了东西,当然我不能和这个卓越班的比。

下面就是让我熬战五六个小时的简短代码

//  功能描述:    按下某按键,点亮对应的发光二极管。

//

//               参考外围接线:IOA0IOA71×8键盘相连,

//                             1×8键盘的公共端接到高电平(VCC

#define P_IOA_Data     (volatile unsigned int *)0x7000      

#define P_IOA_Buffer   (volatile unsigned int *)0x7001       

#define P_IOA_Dir      (volatile unsigned int *)0x7002       

#define P_IOA_Attrib   (volatile unsigned int *)0x7003       

#define P_IOB_Data     (volatile unsigned int *)0x7005       

#define P_IOB_Buffer   (volatile unsigned int *)0x7006       

#define P_IOB_Dir      (volatile unsigned int *)0x7007      

#define P_IOB_Attrib   (volatile unsigned int *)0x7008       

#define ClearWatchdog  (volatile unsigned int *)0x7012      

 

int main()

{

int i,key_data;

*P_IOA_Data = 0x00ff;      //设置IOA0IOA15为带上拉的低电平输入

    *P_IOA_Dir = 0x0000;

    *P_IOA_Attrib = 0x0000;

 

*P_IOB_Data  = 0x0000;     //设置IOB0~IOB15为带数据缓存的低电平输出

    *P_IOB_Dir = 0xffff;

    *P_IOB_Attrib = 0xffff;

 

while(1)

   {

      if(*P_IOA_Data!=0x0000)    //有键按下

        {

           key_data = *P_IOA_Data;

          key_data=~key_data;

           key_data&=0x00ff;

           switch(key_data)

             { case 0x01: *P_IOB_Data  = 0x0001; break;   //按键S1按下,点亮发光二极管D1

               case 0x02: *P_IOB_Data  = 0x0002; break;   //按键S2按下,点亮发光二极管D2

               case 0x04: *P_IOB_Data  = 0x0004; break;   //按键S3按下,点亮发光二极管D3

               case 0x08: *P_IOB_Data  = 0x0008; break;   //按键S4按下,点亮发光二极管D4

               case 0x10: *P_IOB_Data  = 0x0010; break;  //按键S5按下,点亮发光二极管D5

               case 0x20: *P_IOB_Data  = 0x0020; break;  //按键S6按下,点亮发光二极管D6

               case 0x40: *P_IOB_Data  = 0x0040; break;  //按键S7按下,点亮发光二极管D7

               case 0x80: *P_IOB_Data  = 0x0080; break;  //按键S8按下,点亮发光二极管D8

              }                    

        }

     for(i=0;i<0x0f00;i++)            //延长发光二极管点亮一段时间

       {*ClearWatchdog = 0x0001; }

     *ClearWatchdog = 0x0001;         //清看门狗

     *P_IOB_Data  = 0x0000;           //熄灭所有发光二极管

   }

}

你可能感兴趣的:(spe061a单片机入门)