|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
谢谢大家的指导,在昨天的基础上增加了按键,但实践中发现按一下KEY4 本意是要时钟加1,实际加了好几个1
以下为代码
- /*程序说明:4位数码管显示小时分钟,4个LED灯亮一秒停一秒,按KEY1加5分,按KEY4加1小时*/
- #include <reg52.h>
- typedef unsigned char uchar; //类型定义
- typedef unsigned int uint;
- sbit led_a=P1^0; //数码管个位
- sbit led_b=P1^1; //十位
- sbit led_c=P1^2; //百位
- sbit led_d=P1^3; //千位
- sbit led5=P1^4; //4个LED灯
- sbit led6=P1^5;
- sbit led7=P1^6;
- sbit led8=P1^7;
- sbit key4=P3^7; //用于调时
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
- uint time=0; // 秒钟
- uint fen=0; // 分钟
- uint shi=0; // 时钟
- uint xms; //延时ms
- uchar dingshi=0; //定时次数
- void display(time); //声明显示子函数
- void delay(xms); //声明延时子函数
- void key_scan(); //声明按键子函数
- void main ()
- {
- EA=1; //开总中断
- ET0=1; //开定时器0
- TR0=1; //定时器0开始
- TMOD=0X01; // 定时器模式1
- TH0=(65536-50000)/256; //50ms初值高8位
- TL0=(65536-50000)%256; //50ms初值低8位
- EX1=1; //开外部中断1
- IT1=0; //低电平有效
- while(1)
- {
- key_scan(); //检测是否有按键
- display(time); //显示
- }
- }
- void display(time)
- {
- P0=table[fen%10]; //送出段选信号
- led_a=0; //打开个位位选
- delay(5);
- led_a=1;
- P0=table[fen/10%10]; //送出段选信号
- led_b=0; //打开十位位选
- delay(5);
- led_b=1;
- P0=table[shi%10];
- led_c=0;
- delay(5);
- led_c=1;
- P0=table[shi/10%10];
- led_d=0;
- delay(5);
- led_d=1;
-
- P0=table[10]; //显示中间的点
- led_c=0;
- delay(5);
- led_c=1;
- }
- void delay(xms) //延时函数
- {
- uchar i;
- while(xms--)
- {
- for(i=0;i<113;i++);
- }
- }
- void key_scan()
- {
- if(key4==0)
- {
- delay(5);
- if(key4==0)
- {
- shi+=1; //实际情况是按一下key4时钟加了好几个1
- if(shi>=24)
- {
- shi=shi-24;
- }
- }
- }
- }
- void jishu ()interrupt 1 //定时器中断函数
- {
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
-
- if(dingshi==20) //如果定时满了20次
- {
- dingshi=0; //次数清零,循环
- time++; //秒加一次
- if(time==60)
- {
- time=0;
- fen++; //到了60秒,分加一次
- if(fen==60)
- {
- fen=0;
- shi++; ////到了60分,时加一次
- if(shi==24)
- {
- shi=0;
- }
- }
- }
- led5=~led5; //亮一秒灭一秒
- led6=~led6;
- led7=~led7;
- led8=~led8;
- }
- dingshi++; //如果定时没满20次,就加一次
- }
- void key_int()interrupt 2 //外部中断1
- {
- delay(300); //如果不延时,按一下按钮可能加了好几个5
- fen+=5; //加5分,可以理解为fen=fen+5
- if(fen>=60)
- {
- fen=fen-60;
- }
- }
复制代码
|
打赏
-
查看全部打赏
|