题目要求:
用四个数码管完成时钟形式显示。
如显示1 2. 0 0
然后一个按键控制暂停并闪烁,另一个按键控制分钟加1
要求:当第一个按键不按下时,第二个按键无法完成加1动作。
仿真图,如下:
按键K1控制暂停闪烁,开始,K2加1
这里需要说明一下,因为没有教到时钟,时钟部分,将在下一个微博实现,其实很简单,用时钟中断即可完成,那样的时钟比较准确。
写代码之前,要仔细看仿真的接口问题,这样才能写好代码,代码如下:
#include /* 按下key1 暂停并闪烁,再按一下 继续, key2按下加1,但是key2必须在key1按下后操作*/ unsigned char c[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; // 0-9 sbit key1=P1^0; sbit key2=P1^1; int hour; // 小时 int min; // 分钟 void delay() { int i,j; for(i=1;i<10;i++) { for(j=1;j<100;j++); } } void display() { P2=0X7F; P0=c[hour/10]; delay(); P2=0XBF; P0=c[hour%10]&0X7F; // 第二个数码管显示时,需要有点,要注意 delay(); P2=0XDF; P0=c[min/10]; delay(); P2=0XEF; P0=c[min%10]; delay(); P2=0XFF; } void delay_2() { int i,j; for(i=1;i<2;i++) { for(j=1;j<10;j++) { display(); } } } void delay_3() { int i,j; for(i=1;i<20;i++) { for(j=1;j<200;j++); } } void delay_4() { int i,j; for(i=1;i<100;i++) { for(j=1;j<100;j++); } } void display_2() { for(hour=0;hour<24;hour++) { for(min=0;min<60;min++) { display(); if(0 == key1) { delay_3(); // 消抖 if(0 == key1) { while(1) { display(); delay_4(); if(0 == key1) { delay_3();//消抖 if(0 == key1) { break; // 再按key1退出闪烁 } } if(0 == key2) { delay_3();//消抖 if(0 == key2) { min++;// 分钟加1 if(60 == min) { min=0; } } } } } } delay_2(); } } } void main() { while(1) { display_2(); } } 结果如下:
上一篇:LCD1602芯片的使用——简单易懂
下一篇:基于单片机的简易数字电压表设计
推荐阅读最新更新时间:2024-11-12 12:28
设计资源 培训 开发板 精华推荐
- 适用于工业应用的 C8051F506 MCU 的 C8051F500DK、8051 开发系统
- MC78M15CDTRKG 15V 电流调节器的典型应用
- Mapper74-192
- ADA4637-1ACPZ-RL带保护反相放大器的典型应用电路
- LIS331HH适配器板,标准DIL24插座
- 用于便携式的 3.3V DC 至 DC 单路输出电源
- ADR440B 2.048 Vout 超低噪声、LDO XFET 电压基准的典型应用,具有电流吸收器和电流源
- XRP6658EVB,XRP6658 同步电流模式 PWM 降压转换器评估板
- MC34071ADR2G 高阻抗差分放大器的典型应用
- 三模RGB罗技G613移植板