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

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

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

的单片机共有5个中断源,分别为:外中断0 、定时器T0中断、外中断1、定时器T1中断、串口中断。

或许,有些朋友已经大概领会了其中的意思,有些朋友还迷迷糊糊。不过不要紧,我们继续往下看,下面我们来讲讲单片机的定时器是什 么?如何工作的?定时器,大家从字面上就可以看出其大概的意思吧?简单的说:就是起定时作用!也就是让单片机计数。定时器分为:方式

0方式1、方式2和方式3等4种工作方式。有些朋友一定会问:定时器如何启动?风扇的定时器,相信大家一定都用过吧!但是单片机的定时器,

该如何启动呢?总不该也用手一拧定时器吧! ^_^ 当然不是,我们只要给单片机一些指令,就可以启动定时器了!下面我们就定时器0,来说

说怎么启动定时器0。

TMOD = 0X01;字

/*********************************************************************************************/

void Delay(unsigned char a)扫描法相同,把列线置低电平,行置高,读行状态 2.与1相反,把行置低,列置高,读列状态

3.若有键按下,则为2次所读状态的结果即为键所在的位置,这样2次输出和2次读入可以完成键的识别!!!

子函数如下:

unsigned char key_vscan(void) {

unsigned char row, col; P1 = 0xF0;

row = P1&0xF0; row = row&0xF0;

P1 = 0x0F; col = P1&0x0F; col = col&0x0F;

return(key_val(row|col)); }

下面我们再来介绍介绍一键多能的程序,即按下一个键,可以执行不同的命令!

void main (void) {

unsigned char b = 0;

while( 1 ) {

if(P1_0 == 0) {

Delay(10);

if(P1_0 == 0) {

b++;

if( b == N )............add your code here! } } }

(八).add your code here. } }

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

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

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

2.直接在中断中查询按键的标志位..add your other code here }

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

EX2:

#define Press_key = P2 ^ 7;.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存储器等,更多的电路,还要靠大家在平时的学习过程当中,慢慢掌握。

8ndyw5gaoz2teb88j4i568ub00wtn2005xy
领取福利

微信扫码领取福利

微信扫码分享