1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
| #define uchar unsigned char #define uint unsigned int sbit dula = P2 ^ 6;//定义位选IO口 sbit wela = P2 ^ 7;//定义段选IO口 sbit s2 = P3 ^ 4;//按键IO口 sbit s3 = P3 ^ 5; sbit s4 = P3 ^ 6; sbit s5 = P3 ^ 7; uchar num, num1, num2, num3, a, b, flag; uint aa; uchar code table[] = { //0 1 2 3 0x3f, 0x06, 0x5b, 0x4f, //4 5 6 7 0x66, 0x6d, 0x7d, 0x07, //8 9 A B 0x7f, 0x6f, 0x77, 0x7c, //C D E F 0x39, 0x5e, 0x79, 0x71, };//数码管编码 void display(uchar number); void delay(uchar z); void chushihua(); void main() { while(1)//程序一直运行 { display(aa);//数码管先运行 if(s2 == 0)//判断是否S2是否按下 delay(10);//延时10ms消抖 if(s2 == 0)//再判断 {
TR0 = 0; aa++; if(aa == 60) //到了设定时间就重置 aa = 0; while(!s2);//抬手检测 }
if(s3 == 0)//判断是否S3是否按下 delay(10);//延时10ms消抖 if(s3 == 0)//再判断 { while(!s3);//抬手检测 TR0 = 0; if(aa == 0) //到了设定时间就重置 aa = 60; aa--; }
if(s4 == 0)//判断是否S4是否按下 delay(10);//延时10ms消抖 if(s4 == 0)//再判断 { while(!s4);//抬手检测 aa = 0; TR0 = 0; }
if(s5 == 0)//判断是否S4是否按下 delay(10);//延时10ms消抖 if(s5 == 0)//再判断 { while(!s5);//抬手检测 chushihua();//初始化函数 TR0 = ~TR0; //启动或者暂停
}
} } void t0t() interrupt 1//中断函数 { TH0 = (65536 - 50000) / 256;//重新装初值的高八位 TL0 = (65536 - 50000) % 256;//重新装初值的低八位 num++;//计数器加一 if(num == 20)//二十个中断 { num = 0;//将中断周期清零 aa++;//数码管数字加一 if(aa == 60)//数码管数字溢出判定 aa = 0;//数码管数字清零 }
} void display(uchar number)//显示函数 { uchar a, b; a = number / 10;//十位 b = number % 10;//个位
dula = 1; P0 = table[a]; dula = 0; P0 = 0Xff; wela = 1; P0 = 0xfe; wela = 0; P0 = 0XFF; delay(5);//十位的显示
dula = 1; P0 = table[b]; dula = 0; P0 = 0XFF; wela = 1; P0 = 0xfd; wela = 0; P0 = 0XFF; delay(5);//个位的显示 } void delay(uchar z)//延时函数 { uchar x, y; for(x = z; x > 0; x--) for(y = 110; y > 0; y--); } void chushihua()//初始化函数 { TMOD = 0x01;//设定定时器工作模式 TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256;//定时器赋初值 EA = 1;//打开总中断 ET0 = 1;//打开定时器中断0 // TR0 = 1;//打开定时器0 }
|