11月14日学习总结
时隔两周了吧,整理了一下课上记得笔记,发现没有当即上过课就整理笔记的后果就是老师说的很多细节都想不起来了,不过凭着我这鱼的记忆还是能想起来多少就写多少吧。
首先来回顾一下基础知识,各类数据基本类型的变量范围,这些一定要记住,我在写程序时有时就是因为定义的变量超出了范围达不到想表达的效果,然后回来检查程序找死都找不到,这个平时一定要注意:
unsigned char 0~255 signed char -128~127
unsigned int 0~65535 signed int -32768~32767
unsigned long 0~4294967295
float -3.4*10^(-38)~3.4*10^(38)
double和float相同
延时有四种方式:非精确延时:1.for(i=0; i<100; i++)
2.i=100;while(i--);
精确延时:1.定时器定时
2.用库函数_nop_();
下面是中断:
中断有内部中断和外部中断,中断也有优先级之分,在51单片机中,外部中断0比内部中断0优先级高,且51不支持中断嵌套;
在数码管显示上就用到了中断和定时器,把定时器定的时间够短,然后间隔定时器定的时间就会发生中断,利用人眼的视觉暂留,人眼看到的就是数码管一直亮着,定时器的初始化格式如下:
void timr_init()
{
EA=1;//打开总中断
TMOD=0x01;//设置定时器的工作方式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//填初值,定多长时间就用65536减去多少,这里的时间单位是us,若要定1s,可以定20个就是1s了
ET0=1;//打开定时器中断
TR0=1;//打开定时器
}
下面要有个中断服务函数来实现你要实现的功能,注意这个中断服务函数是到时间后系统自己调用的;
最后有一个做码表的自己的对整个程序的理解,可能不够详细:
要求是:单片机上电时数码管显示数字从0开始计时,10S后停止计时且蜂鸣器响一声;
这个主要是利用中断和定时器,需要用到两个定时器,一个16位的定时器用来刷新屏幕,定足够短的时间后开始中断,利用人眼的视觉暂留,让人们看到数码管一直是亮着的状态;第二个8位自动重装定时器用来自动改变填充数字,设置的时间一到数字就会改变,比如在第二个定时器设定的1S到后,秒位会自动加1,当10S到时,关闭定时器,数码管的数字就停止不动了,再调用一个蜂鸣器函数,蜂鸣器就会滴一声,这是对整个程序的大自概括。
再插一个蜂鸣器的原理,蜂鸣器分为无源蜂鸣器和有源蜂鸣器,无源蜂鸣器只要给它上电就会响,而无源蜂鸣器必须给它提供一定频率的方波才会响,方波的频率越高蜂鸣器的音调越高,我们可以利用这个原理做一个非常简单的电子琴哈哈。