- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint x;
- sbit P34=P3^4; //T0的控制管脚
- uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表
- void delay1ms(uchar n) //1ms基准延时
- {
- uchar i;
- while(n--)
- for(i=0;i<125;i++);
- }
- void display(uint x) //显示函数
- {
- P2=0xdf; //DS5点亮
- P0=tab[x/100]; //显示百位
- delay1ms(5);
- P2=0xbf; //DS6点亮
- P0=tab[x%100/10]; //显示十位
- delay1ms(5);
- P2=0x7f; //DS7点亮
- P0=tab[x%10]; //显示个位
- delay1ms(5);
- }
- void main()
- {
- TMOD=0x06; //0000 0110 使用计数器T0的工作方式2 自动重装
- EA=1; //开总中断
- ET0=1; //允许计时器T0的中断
- EX0=1; //允许外中断INT0
- IT0=1; //INT0为负跳变触发
- TR0=1; //启动T0
- TH0=TL0=255; //计数器T0高8位赋值255
- //按键一下就溢出中断,转中断服务程序
- while(1){ //无限循环,不停的将TL0计数结果送向P1口
- //x=TL0
- display(x);
- }
- }
- void clear0() interrupt 0 //INT0中断函数
- {
- x=0;
- }
- void key_counter() interrupt 1 //定时器中断
- {
- if(P34==0){
- delay1ms(20); //消陡
- if(P34==0){
- x=(x+1)%1000;
- }
- }
- }
复制代码
|