您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 中断控制数码管显示程序解释
简易数码秒表设计示例程序#includereg51.h51单片机寄存器定义的头文件unsignedcharcodeTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};数码管显示0~9的断码表unsignedcharint_time;定义无符号字符变量,中断次数unsignedcharsecond;定义秒voiddelay(void)延时函数{unsignedchari;for(i=0;i200;i++)延时时间,for循环语句;}秒显示函数voidDisplay_Second(unsignedchark)定义入口参数{P2=0xfd;P2=11111101,P2.1引脚低电平,DS2亮P0=Tab[k/10];显示十位delay();调用延时函数P2=0xfe;P2=11111110,P2.0引脚低电平,DS1亮P0=Tab[k%10];显示个位delay();P2=0xff;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机器周期定时时间usms085.150voidTime0_serve(void)interrupt1using1定时器T0的中断服务函数,T0的中断编号为1,使用第一组工作寄存器{TR0=0;关闭定时器T0int_time++;每来一次中断,中断次数自加1if(int_time==20)20次中断,即1s进行一次时间控制定时器T0的中断服务程序PSW.4(RS1)PSW.3(RS0)当前使用的工作寄存器区R0-R7000区(00-07H)011区(08-0FH)102区(10-17H)113区(18-1FH)CPU通过对PSW中的D4、D3位内容的修改,就能任选一个工作寄存器区,例如:SETBPSW.3CLRPSW.4;选定第1区SETBPSW.4CLRPSW.3;选定第2区SETBPSW.3SETBPSW.4;选定第3区{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倒计数示例程序的区别#includereg51.hunsignedintx;unsignedcharcodeTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay(void){unsignedintm;for(m=0;m600;m++);}voiddisplay(unsignedintk){P2=0xf7;P0=Tab[k/1000];delay();P2=0xfb;P0=Tab[(k%1000)/100];delay();P2=0xfd;P0=Tab[(k%100)/10];delay();P2=0xfe;P0=Tab[k%10];delay();P2=0xff;}voidmain(void){TMOD=0x01;使用定时器T0方式1TH0=(65536-46083)/256;定时50msTL0=(65536-46083)%256;EA=1;开启总中断ET0=1;定时器T0允许中断TR0=1;启动T0x=9999;while(1)无限循环{display(x);调用显示函数}}voidTime0(void)interrupt1using1中断服务程序{TR0=0;关闭T0x--;每来一次中断,x自减1if(x==0){x=9999;}TH0=(65536-46083)/256;重新给定时器赋初值TL0=(65536-46083)%256;TR0=1;}
本文标题:中断控制数码管显示程序解释
链接地址:https://www.777doc.com/doc-3656452 .html