加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

单片机笔记3  单片机C语言编程过程常用的一些语句

(2013-08-01 13:13:23)
标签:

校园

分类: 单片机笔记

单片机笔记3

单片机C语言编程过程常用的一些语句


1、对AT89S52的四个8位并行I/O口的某一位单独使用时,位定义语句:

sbit LED0=P1^0;

其中LED0为给该位定义的新名字,调用该名就相当于调用单片机的该位的引脚。

 

2、循环左移函数、循环右移函数

P0=_crol_(P0,1); // _crol_(P0,1)为循环左移函数,付给P0的值每次左移一位,通过改变括号

//内的参数来确定每次左移的位数

                     P1=_cror_(P1,1);  // _cror_(P1,1)为循环右移函数

//下面是一段AT89S52单片机的流水灯程序:

#include

#include

void delay1ms(unsigned int i)

{

unsigned char j;  //j为基准函数所用变量

 while(i--)

 {

 for(j=0;j<115;j++)        //1ms基准延时程序

    }

 }

 }

 

void main()

{

 P0=0xfe;

 P1=0x7f;  // 0111 1111

  while(1){        

                P0=_crol_(P0,1);       // _crol_(P0,1)为循环左移函数,付给P0的值每次左移一位,通过改变括号

//内的参数来确定每次左移的位数

                     P1=_cror_(P1,1);  // _cror_(P1,1)为循环右移函数

               delay1ms(100);

 

                            }

 

}

3、无缘蜂鸣器音频函数

有时候在单片机开发时会用到一些无源的蜂鸣器,这个时候我们就需要自己编写程序为其提供合适的发音频率:我们以可以在1KHz音频下发生的无缘蜂鸣器为例,编写一个产生1KHz频率声音的函数,供以后编程时修改调用:

//程序代码如下:

void beep()        //产生1KHZ频率声音的函数

{

        fmq=0;       //fmq为主函数之前用位定义的蜂鸣器在单片机上所连接的引脚

         delay500us();  //500us延时函数

         fmq=1;

         delay500us();     

 

}

 

4、一位数组的定义

//下面是用一位数组存储共阳数码管的代码:

unsigned char code s8[16]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

//unsigned char 确定数组元素的类型;code 前面加关键字code ,可以大大节约单片机的存储空间; s8 为数组名;  [16]中的16表示数组长度;   }里面的内容为共阳数码管1~F的段码;

 

5、键盘消抖

http://s13/bmiddle/9af50358gx6BvJQjBUSa2&690 单片机C语言编程过程常用的一些语句" />

http://s8/bmiddle/9af50358gx6BvJIE5jX09&690 单片机C语言编程过程常用的一些语句" />

http://s10/bmiddle/9af50358gx6BvJSWUn9ab&690 单片机C语言编程过程常用的一些语句" />

按键消抖我们在程序中一般用软件消抖,我们一般会采取前沿消抖,而对后沿抖动我们用一个等待按键释放语句进行消抖,因为不同的按键在不同的环境下后沿抖动的时间相差甚大,一般比较长,所以我们很难确定后沿消抖时需要一个多长时间的延时。

下面以一个独立按键使数码管显示的数字增加的程序进行说明:

//程序代码如下:

#include

sbit k5=P1^4;      //定义我们要操作的按键

sbit smg=P2^7;   //定义我们在开发板上要点亮的数码管

unsigned int code s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

 

void delay1ms(unsigned int ms)  //1ms的延时函数

{

 

    unsigned int j;

         while(ms--)

         {

             for(j=0;j<115;j++)

                     }

         }

 

}

 

void main()

{

 

    unsigned int num=0;

         smg=0;

         while(1)

         {

             if(k5==0)                   //首次判断按键是否按下

                                                             

                       delay1ms(20);      //适当延时,避开前沿抖动区域,达到消抖目的

                            if(k5==0)       //再次判断按键是否真的被按下,如果此时检测到按键是真的被按下,则

//产生按键响应

                            {

                                num=num+1;

                                     if(num==10)

                                     num=0;

                                //delay1ms(30);//可以通过适当延时来避开后沿抖动区域,达到消抖的效果

                            }

                            while(!k5)            //等待按键释放

                              }

                   }

                  

                   P0=s8[num];

         }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有