好文档 - 专业文书写作范文服务资料分享网站

(1小时学会C语言51单片机)C语言入门教程

天下 分享 时间: 加入收藏 我要投稿 点赞

在这里我想对上面一点,作个简单的说明,如果你是刚学单片机,那么你写的代码是VERY GOOD的,但是如果把上面的代码应用于产品的话,那么我可以告诉你,上面所写的按键识别代码全部是垃圾代码,^_^,这下傻了吧,呵呵。为什么?我的按键不是可以正常工作吗?

请看这里: if(P1_0 == 0)

{

Delay(10);//问题就在这里,你让CPU在这里空转? if(P1_0 == 0) {

//...add your code here. }

}

进入第1个if判断语句后,就进入了Delay(10);再看Delay函数,完全让CPU执行(;空语句),所以在做大的产品或者代码时,这个是非常耗费单片机内部资源的。有什么办法吗?呵呵,那是肯定的。

解决方法大致有如下2种:

1.将延时函数放在中断中,在中断里查询延时的标志位。/*不仅仅用于键盘识别,亦可以用于其他的延时代码,见EX1*/

2.直接在中断中查询按键的标志位.//见EX2。

EX1:

unsigned char Delaytime;

void Delay(unsigned char Delaytime)//

{

while(Delaytime !=0 );//等在这里,直到Delaytime为0。 }

void Timer0_interrupt(void) interrupt 1 using 2 {

if(Delaytime != ) Delaytime--;

//...add your other code here }

Delay函数具体延时多长时间,就要看你设定的T0定时器中断和Delaytime的乘积,比如你的定时器中断为50MS,Delaytime为20的话,那么50MS*20=1S。

EX2:

#define Press_key = P2 ^ 7;//定义按键的I/O

void P_key(void)

{

char new_value,old_value;

new_value = Press_key;

if(new_value && !old_value)//识别按键。 {

Turn_On_LEd( );

//...add your other code here. }

old_value = new_value; }

void Timer0_interrupt(void) interrupt 1 using 2 {

P_key();

// ...add your other code }

当然在实际过程当中,并不是如此简单简洁的,还希望大家能够举一反三哦... ^_^。

(九)

写了这么多了,大家也看了这么多了,感觉怎么样?大家也觉得不难吧。其实51也就那么简单,真的很希望大家看完这篇文字以后,很自信的说,51单片机也已经入门。这是对我写怎么多文字最好的回答。时隔13个月之久再来继续写这些东西,没有以前的激_情和热情,所以就草草了事结尾,希望大家不要在背地里骂我哦,^_^。当然以上讲的只是最简单的一些东西,单片机的功能非常之强大,只要你能想得到,就一定可以用单片机来实现的。 当然单片机和外部其他的芯片还有很多,比如数字温度传感器DS18B20,实时时钟芯片DS1302,还有比如访问AT24CXX的EEPROM存储器等,更多的电路,还要靠大家在平时的学习过程当中,慢慢掌握。

(1小时学会C语言51单片机)C语言入门教程

在这里我想对上面一点,作个简单的说明,如果你是刚学单片机,那么你写的代码是VERYGOOD的,但是如果把上面的代码应用于产品的话,那么我可以告诉你,上面所写的按键识别代码全部是垃圾代码,^_^,这下傻了吧,呵呵。为什么?我的按键不是可以正常工作吗?请看这里:if(P1_0==0){Delay(10);//问题就在
推荐度:
点击下载文档文档为doc格式
6l76w7hdvh6c4rp7pony
领取福利

微信扫码领取福利

微信扫码分享