51单片机完成时钟形式显示
来源:互联网 发布:北京阿里云公司在哪 编辑:程序博客网 时间:2024/05/16 05:40
题目要求:
用四个数码管完成时钟形式显示。
如显示1 2. 0 0
然后一个按键控制暂停并闪烁,另一个按键控制分钟加1
要求:当第一个按键不按下时,第二个按键无法完成加1动作。
仿真图,如下:
按键K1控制暂停闪烁,开始,K2加1
这里需要说明一下,因为没有教到时钟,时钟部分,将在下一个微博实现,其实很简单,用时钟中断即可完成,那样的时钟比较准确。
写代码之前,要仔细看仿真的接口问题,这样才能写好代码,代码如下:
#include <reg51.h>/* 按下key1 暂停并闪烁,再按一下 继续, key2按下加1,但是key2必须在key1按下后操作*/unsigned char c[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; // 0-9sbit 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(); }}
结果如下:
实验结果,不要截图,希望大家下载运行实现
0 0
- 51单片机完成时钟形式显示
- 51单片机—定时器显示时钟
- 单片机数码管时钟显示
- 单片机显示时钟
- MSP430F413单片机实现时钟显示
- 51单片机 时钟程序设计 数码管可闪烁显示数值
- 51单片机时钟程序
- 51单片机时钟输出
- 51单片机可调时钟
- 51单片机时钟
- 51单片机实现时钟
- 时钟一:51单片机用替换的方法在数码管上显示时钟
- 【单片机】时钟及温度的显示
- STC单片机之1602显示时钟
- 51单片机—串口时钟
- 51单片机—实时时钟
- 基于DS1302芯片---使用51单片机C语言编制的电子时钟(液晶1602显示)
- 用手机修改单片机时钟(1602显示)
- Visual Studio 2017/2015远程调试Linux程序(opencv)
- es通过JDBC导数测试
- JavaScript中获取当月的所有天数
- Java常量、变量、数据类型
- 练习题 No.13 最小堆
- 51单片机完成时钟形式显示
- javaNIO使用
- FFMPEG学习【libavcodec】:编解码器:硬件加速器桥:XvMC
- 二维数组中的查找
- 软件二次开发-解密开发板
- UEStudio编辑lua语法高亮方法
- 【Oracle】ORA 01810 格式代码出现两次
- SpringMVC中使用Interceptor拦截器
- genymotion 模拟器联网问题