本文共 2157 字,大约阅读时间需要 7 分钟。
还是那个原理图
题目详情:
#include#include #define uint unsigned long #define uchar unsigned char sbit N5 = P1^0;sbit N6 = P1^1;sbit N7 = P1^2;sbit N8 = P1^3;sbit S1 = P3^7;//K1按钮继续计数sbit S2 = P3^6;//K3清零sbit S3 = P3^5;//K2停止计数按钮uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~916进制共阳极编码 uchar shi=0;uint num;uint mes;void delayms(uint xms) //延时函数{ uint i,j; for(i=xms;i>0;i--) for(j=10;j>0;j--);}void timer0() interrupt 1{ if(shi==1) { shi=0; num--; } TH0=(65536-10000)/256; //重新赋值 TL0=(65536-10000)%256; shi++; } void display(unsigned long num) { N5=0; P0=table[(num%10000)/1000]; delayms(1); P0=0XFF; N5=1; N6=0; P0=table[(num%1000)/100]+0x80; delayms(1); P0=0XFF; N6=1; N7=0; P0=table[(num%100)/10]; delayms(1); P0=0XFF; N7=1; N8=0; P0=table[num%10]; delayms(1); P0=0XFF; N8=1; }void main(){ TMOD=0X01; /*中断初始化*/ TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; //中断总开关 //ET0=1; //请求中断 //TR0=1; //允许中断 num=1234; mes=0; while(1) { ET0=1; display(num); if(S1==0)//判断是否按下 开始计数 { delayms(0); if(S1==0) //再次确定 { if(mes==0){ num = 1234;//初始值 TR0=1; mes++; } else if(mes==1){ //num = 2222;//初始值 TR0=0; //停止 mes++; } else if(mes==2){ //num = 3333;//初始值 num=0;//清零 mes = 0; }else{ num = 1234;//初始值 } } while(!S1); //消抖 delayms(50); while(!S1); //跳出所在的第一个while循环 break; } else if(S2==0)//判断是否按下 清零 { delayms(50); if(S2==0) //再次确定 { TR0=0; num=num+100; } while(!S2); //消抖 delayms(50); while(!S2); //跳出所在的第一个while循环 break; } else if(S3==0)//判断是否按下 { delayms(50); if(S3==0) //再次确定 { while(!S3); if(num==0){ num=0; } else if(num>0){ TR0=0; num=num-100;//减一 } } while(!S3); //消抖 delayms(50); while(!S3); //跳出所在的第一个while循环 break; } } }
转载地址:http://hbhmi.baihongyu.com/