仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极LED字模
- sbit P3_0=P3^0; //定义位变量
- sbit P3_1=P3^1;
- unsigned char x,y,num=70,n=0; //宏定义 num为秒表时间设置函数
- void delay(unsigned int time)
- { //延时1ms函数
- unsigned int j=0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void key() interrupt 1
- { //中断函数
- TL0 = 0xB0; //初值重装
- TH0 = 0x3C;
- n++; //计时
- if(n==20) //1s到了
- {
- n=0; //每秒重置一次
- if(num==0) num=70; //每70s循环
- x=num/10; //LED显示十位
- y=num%10; //LED显示个位
- num--; //每定时1s,倒计时减一秒
- }
- }
- void main()
- {
- TMOD = 0x01; //T0工作在方式1
- TL0 = 0xB0; //50ms
- TH0 = 0x3C;
- ET0 = 1; //开定时器0中断允许位
- EA = 1; //开总中断
- TR0 = 1; //开定时器0
- while(1)
- { //数码管的动态显示
- P3_1 = 1; //数码管的个位显示
- P2 = led_mod[x];
- P3_0 = 0;
- delay(5);
- P3_0 = 1; //数码管的十位显示
- P2 = led_mod[y];
- P3_1 = 0;
- delay(5);
- }
- }
复制代码
所有资料51hei提供下载:
基于C51中断系统做两位电子秒表例子.rar
(32.25 KB, 下载次数: 34)
|