资源描述
简易数码秒表设计示例程序,#include51单片机寄存器定义的头文件unsignedcharcodeTab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;数码管显示09的断码表unsignedcharint_time;定义无符号字符变量,中断次数unsignedcharsecond;定义秒voiddelay(void)延时函数unsignedchari;for(i=0;i200;i+)延时时间,for循环语句;,秒显示函数,voidDisplay_Second(unsignedchark)定义入口参数P2=0 xfd;P2=11111101,P2.1引脚低电平,DS2亮P0=Tabk/10;显示十位delay();调用延时函数P2=0 xfe;P2=11111110,P2.0引脚低电平,DS1亮P0=Tabk%10;显示个位delay();P2=0 xff;P2=11111111,关闭所有数码管,主函数,voidmain(void)TMOD=0X01;工作方式控制寄存器TMOD=00000001,使用定时器T0工作方式1TH0=(65536-46083)/256;将定时时间设为50msTL0=(65536-46083)%256;存入寄存器TH0和TL0EA=1;开启总中断ET0=1;定时器T0中断允许TR0=1;启动定时器T0开始运行int_time=0;中断次数初始化second=0;秒初始化while(1)无限循环Display_Second(second);调用秒的显示子程序,实际计数值=46083,voidTime0_serve(void)interrupt1using1定时器T0的中断服务函数,T0的中断编号为1,使用第一组工作寄存器TR0=0;关闭定时器T0int_time+;每来一次中断,中断次数自加1if(int_time=20)20次中断,即1s进行一次时间控制,定时器T0的中断服务程序,CPU通过对PSW中的D4、D3位内容的修改,就能任选一个工作寄存器区,例如:SETBPSW3CLRPSW4;选定第区SETBPSW4CLRPSW3;选定第2区SETBPSW3SETBPSW;选定第区,int_time=0;中断次数清0second+;秒加1if(second=60)if语句second=0;等于60就返回TH0=(65536-46083)/256;重新给计数器T0赋初值TL0=(65536-46083)/256;TR0=1;启动定时器T0,使用定时器T0的中断控制数码管倒计数显示,自主思考:比较P141页倒计数示例程序与P112倒计数示例程序的区别,#includeunsignedintx;unsignedcharcodeTab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;voiddelay(void)unsignedintm;for(m=0;m600;m+);,voiddisplay(unsignedintk)P2=0 xf7;P0=Tabk/1000;delay();P2=0 xfb;P0=Tab(k%1000)/100;delay();P2=0 xfd;P0=Tab(k%100)/10;delay();P2=0 xfe;P0=Tabk%10;delay();P2=0 xff;,voidmain(void)TMOD=0 x01;使用定时器T0方式1TH0=(65536-46083)/256;定时50msTL0=(65536-46083)%256;EA=1;开启总中断ET0=1;定时器T0允许中断TR0=1;启动T0 x=9999;while(1)无限循环display(x);调用显示函数,voidTime0(void)interrupt1using1中断服务程序TR0=0;关闭T0 x-;每来一次中断,x自减1if(x=0)x=9999;TH0=(65536-46083)/256;重新给定时器赋初值TL0=(65536-46083)%256;TR0=1;,
展开阅读全文