#include #define uchar unsigned char #define uint unsigned int uchar sec = 6, min = 6, hou = 6, a = 0, b = 0, c = 0; uchar num = 0, cmd = 0; uint time = 0; uint flag = 0; sbit P30 = P3^0; sbit P35 = P3^5; sbit P32 = P3^2; sbit P33 = P3^3; uchar code tab[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf, 0xff, 0xc6};//数码管显示数字 void delay(uchar i); void time_rec(); void display(); void displaym(); void keyscan(); void led_display(); void init(); void delay(uchar i) { uchar j; while ((i--) != 0) { for(j = 0; j < 125; j--); } } void time_rec() { if(sec == 60) { sec = 0; min ++; if(min == 60) { min = 0; hou ++; if(hou == 24) { hou = 0; } } } } void display() { P1 = 0X01;//位选第一个数码管 P2 = 0x20;//打开段选 P0 = tab[hou / 10];//显示数字 P2 &= 0x1f;//关闭段选 P2 = 0xff; delay(4); P1 = 0x02; P2 = 0x20; P0 = tab[hou % 10]; P2 &= 0x1f; delay(4); P1 = 0x04; P2 = (P2&0x1f)|0x20; P0 = 0xbf; P2 &= 0x1f; delay(4); P1 = 0x08; P2 = (P2&0x1f)|0x20; P0 = tab[min / 10]; P2 &= 0x1f; delay(4); P1 = 0x10; P2 = (P2&0x1f)|0x20; P0 = tab[min % 10]; P2 &= 0x1f; delay(4); P1 = 0x20; P2 = (P2&0x1f)|0x20; P0 = 0xbf; P2 &= 0x1f; delay(4); P1 = 0x40; P2 = (P2&0x1f)|0x20; P0 = tab[sec / 10]; P2 &= 0x1f; delay(4); P1 = 0x80; P2 = (P2&0x1f)|0x20; P0 = tab[sec % 10]; P2 &= 0x1f; delay(4); } void keyscan() { if(P35 == 0) { delay(5); if(P35 == 0) { cmd = cmd + 1; } while(P35 == 0) {display();} } if(P32 == 0) { delay(5); if(P32 == 0) { EX0 = 1; } while(P32 == 0) {display();} } if(P33 == 0) { delay(5); if(P33 == 0) { EX1 = 1; } while(P33 == 0) {display();} } } void init() { ET0 = 1; TMOD = 0x11; //time0为定时器,方式1 TH0 = (65535 - 50000) / 256; //预置计算初值 TL0 = (65535 - 50000) % 256; ET1 = 1; TH1 = 0xff; TL1 = 0xff; IT0 = 1; //低电平有效 IT1 = 1; TR0 = 1; //为1时启动计数 TR1 = 1; EA = 1; } int main() { P3 = 0xff; //初始化P3口,全设为1 init(); while(1) { display(); time_rec(); keyscan(); } return 0; } void timer_0() interrupt 1 { TH0 = (65535 - 50000) / 256; TL0 = (65535 - 50000) % 256; time++; if(time == 20) { if(flag == 0) { sec++; time = 0; } else { time = 0; } } } void T1_int() interrupt 3 using 2 //中断T1 用于 可在时间校准的减 { if(cmd != 0) { cmd = 0; TH1=0xff; TL1=0xff; switch(num) { case 1:hou = hou - 1;if(hou <= 0) hou = 23;break; case 2:min = min - 1;if(min <= 0) min = 59;break; case 3:sec = sec - 1;if(sec <= 0) sec = 59;break; default:break; } } } void I0_int() interrupt 0 //外部中断0 用于校准时间在时、分、秒之间进行切换 { num = num + 1; if(num == 3) { flag = 1; } if(num == 4) { flag = 0; num = 0; //退出调时功能 } } void I1_int() interrupt 2 //外部中断1 用于调时的加 { EX1 =0; switch(num) { case 1:hou = hou + 1;if(hou >= 24) hou = 0;break; Case 2:min = min + 1;if(min >= 60) min = 0;break; case 3:sec = sec + 1;if(sec >= 60) sec = 0;break; default:break; } }
上一篇:基于单片机的简易电子琴系统设计(程序)
下一篇:基于单片机的CO浓度检测及报警系统设计
推荐阅读最新更新时间:2024-11-10 10:21
推荐帖子
- 固件下载 | 飞凌OK3568-C开发板深度评测结论大公开
- 开发环境:主机:Ubuntu18.04开发板:OK3568-C开发板飞凌嵌入式OK3568-C开发板可以使用USBOTG烧写和TF卡烧写,其中USBOTG是最常用的烧写方式,一般在系统变转后使用该方式。笔者在本文中将讲解单个统一固件烧写的方式。1依烧写(更新)固件前准备工作1.安装RKUSB驱动在更新固件前,需要安装RKUSB驱动。下载Release_DriverAssistant.zip,解压,然后运行
- 小螃蟹呀 ARM技术
- 大家觉得哪款电容触摸芯片防水误触发效果好?
- 大家用过的或者在用的电容触摸芯片,防水误触发,稳定性和可靠性效果好的有那些?欢迎评论区讨论交流!大家觉得哪款电容触摸芯片防水误触发效果好?AZOTEQ触摸芯片比如他的iqs133感觉还不错。新人路过,没用过这么高级的芯片,特来学习一二。新定义好像有,可以去了解了解。ICMAN电容式触摸芯片,淋水环境下,按键不会误触发。满足复杂应用中对稳定性、灵敏度、功耗、响应速度、防水、带水操作、抗电磁干扰等要求,芯片不会因环境条件的改变或长期使用而发生变化,可以适应复杂多
- ICMAN 分立器件
- 中国汽零部件商的素质都这样????
- 是否因为我们中国汽车零部件的技术水平相比先进技术有些差距,导致这些中国汽车零部件场馆的参展商态度、素质的差劲?走进场馆,非常热情的有人迎来,温柔的询问:“您好,您是做外贸的吗?”答曰:“不是,我是传媒”掉头就不理你了。咦,心里有个疑问:“为什么呢?”终于有个女孩眼睛都不待看的、懒懒的、
- babbage 汽车电子
- FPGA应该从哪起步?希望各位大侠不吝赐教,谢谢
- 刚刚开始学习电子设计,明年将参加电子设计大赛,想学一下FPGA,不知从何起步,希望能得到各位大侠的指教,不胜感激!FPGA应该从哪起步?希望各位大侠不吝赐教,谢谢你先学学基础类的东西,比如说编程语言,买个小板子琢磨,多看看基本的设计,领悟其中的思路和算法等等!语言1.你觉的FPGA是什么样的东西啊?2.你觉的FPGA可以做点什么啊?3.你想用FPGA来实现什么功能啊?4.实现这些功能需要什么支持?软件编写和硬件平台5.你觉得如果你一定要用FPGA,你觉得你还欠
- 450678797 FPGA/CPLD
- 最后3天报名 | ST 邀你赴一场 NFC 盛会!参会赢京东卡
- 在这个日益变化的数字化时代,NFC技术正以前所未有的速度融入我们的生活。它不仅简化了我们的日常交互,还为智能设备提供了更加安全、高效的通信方式。意法半导体(ST)一直走在技术革新的前沿,致力于将这项技术的潜力最大化。今年,ST将带来更多创新与洞见诚挚邀请您参加即将在北京举办的NFC研讨会!本次活动将深入探讨如何在新能源、物联网、智能家居和医疗健康等领域,通过我们的ST25NFC/STSAFE-A/ST4SIM产品系列,实现更安全、更流畅的连接。会议时间
- EEWORLD社区 嵌入式系统
- 【2024 DigiKey 创意大赛】LED立方体
- LED桌面立方体一、作品简介本作品为led桌面立方体,类似的作品其实之前在中文互联网上出现过很多,但大多没有框架或需要外接电源。如图左,骰子为6片pcb焊接而成,优点是集成了电池,但单面led密度仅为3*3,同时焊接的连接方式较为麻烦,若量产需要专门定制治具,外漏的金属焊接点也易与桌面的物品碰撞导致短路。图右使用了6片RGBLED点阵屏,屏幕本身有塑料框架,屏幕间使用角码固定,使用树莓派驱动,优点为led密度高,但因为功耗大(全套设备最大功耗近60w),使用外部供电,
- Lucheni DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- STC8A8K64S4A12单片机最小系统板(最简洁版)
- LTC3615MPUF-1 单路低纹波 6A 输出同步降压型 DC/DC 转换器的典型应用
- 【航顺训练营】基于HK32F030M的智能门禁系统
- MIKROE-3448,用于 TPA3138D2 18.5 W/ch 立体声 D 类音频放大器的音频放大器 6 节拍板
- 使用 Diodes Incorporated 的 ZR78L10 的参考设计
- LT1021BMH-10 负串联电压基准的典型应用
- LTM8067IY 15V 浮动 1GBT 栅极驱动器的典型应用电路
- 使用 ON Semiconductor 的 CS8271 的参考设计
- 2812 10cm
- ESP12f下载器