的单片机共有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存储器等,更多的电路,还要靠大家在平时的学习过程当中,慢慢掌握。