单片机定时器与数码管静态显示
很多新手在单片机上走的第一步是点亮第一个LED灯,实际上因为开发板的
不同,所编写的代码也不同,关键是你要去了解你用的开发板的电路布局。对于电路方面的知识我这里也不详讲,我要做的是无论你用哪一种开发板我的文章都能帮助你。 P0 = 0xFE;
这句代码大家不陌生。 void main(){
unsigned char count = 0; while(1){ P0 = ~(0x01 =8){ count = 0; } } }
以上就是实现流水灯的基本代码,这里没有电路供你分析,但是无论什么开发板,核心代码可以用以上代码实现。
我相信你能看到这里也是有点基础的,这里的延时函数Delay,接下来要讲的是定时器,定时器就是可以替代延时函数的。 定时器
标准的51单片机内部有T0和T1两个定时器,实际上就是TCON特殊功能的寄存器来控制这两个定时器的。
除此之外,定时值存储寄存器有TH和TL,给TL赋值后,TL会自动加1,加到255后TH加1,有趣的TH也可以提前赋值,但这只是定时器工作的一种模式,定时器有四种模式,这里我不祥讲,而且我们几乎用的模式就是这种,后面涉及到会详细讲解。这里只需要知道TCON(地址0x88)位分配,以后会经常用到。 还有一个TMOC就是定时器作用的模式,位分配如下图:
代码: void main()
{ TH0 = 0xB8; //给TH0赋值,后面的0代表是给定时器T0的TH赋值 TL0 = 0x00;
TR0 = 1; //启动T0定时器
if(TF0 == 1) //判断T0是否溢出,TF是个标志位 { //重置 TH0 = 0xB8; TL0 = 0x00; } }
以上就是定时器,时间多少呢?
我们以晶振位11.0592为例,时钟周期是1/11059200,机器周期(1ms)12/11059200,如果我们定时20ms,那个要执行20*(12/110592)次,算出来是18432次,换成十六进制是B800,所以对TH0赋值B8,对TL0赋值00; 数码管 #include sbit ADDR0 = P1