一位数码时钟 程序
更新时间:2024-04-10 12:56:01 阅读量: 综合文库 文档下载
- 数码日历时钟推荐度:
- 相关推荐
/************************************************************************** * 标题: 一位数码时钟 * 软件: Keil C51 * 芯片: STC12C2052
* 说明: 用一位数码LED管显示时钟
**************************************************************************/
#include
#define uchar unsigned char
sbit leda1 = P1 ^ 4;// sbit leda2 = P1 ^ 3;// sbit ledb1 = P1 ^ 1;// sbit ledb2 = P1 ^ 0;// sbit ledc1 = P3 ^ 5;// sbit ledc2 = P3 ^ 4;// sbit ledd1 = P3 ^ 2;// sbit ledd2 = P3 ^ 3;// sbit lede1 = P3 ^ 0;// sbit lede2 = P3 ^ 1;// sbit ledf1 = P1 ^ 6;// sbit ledf2 = P1 ^ 7;// sbit ledg1 = P1 ^ 5;// sbit ledg2 = P1 ^ 2;//
sbit key1 = P1 ^ 4;// sbit key2 = P1 ^ 3;//
uchar data sec = 0; // 秒计数器(00s-59s) uchar data min = 1; // 分计数器(00m-59m) uchar data hou = 2; // 时计数器)00h-23h)
uchar data cou = 0; // 软计数器,对10ms时基信号累加到1s
uchar data key_v = 0; // 存储键值
uchar data key_t = 0; // 按键扫描中临时存储键值
uchar data MENU = 0; // uchar data SP_DIS = 100; //
#define SP2 1300 //数字之间的停留时间
#define SP3 10000 //一个循环显示结束后的间隔时间
#define SP4 2000 //分隔点的显示时间
/**********************************************************************************************/
void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号) {
cou++; // 软计数器加1 if(cou > 99) // 计数值到100(1s) {
cou = 0; // 软计数器清零
sec++; // 秒计数器加1(进位10ms*100=1s) if(sec > 59) // 秒计数值到60 {
sec = 0; // 秒计数器清零
min++; // 分计数器加1(进位60s=1m) if(min > 59) // 分计数到60 {
min = 0; // 分计数器清零
hou++; // 时计数器加1(进位60m=1h) if(hou > 23) // 时计数到23 hou = 0; // 时计数器清零 } } }
TH0 = 0xd8; // 重置定时常数 TL0 = 0xf0; }
/**********************************************************************************************/
void delay_ms(unsigned int a){//-延时函数 1MS/次 unsigned char i; while( --a != 0){ for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。 } //i 从0加到125,CPU大概就耗时1毫秒 }
void delay_P1(void){ // delay_ms(SP_DIS); }
void delay_P2(void){ // delay_ms(SP2); }
/******************************************************************************
****************/
void displayN(void){ // ledc2=1;delay_P1();ledd2=1;delay_P1(); ledc1=1;delay_P1();ledd1=1;delay_P1(); lede2=1;delay_P1();ledg2=1;delay_P1(); lede1=1;delay_P1();ledg1=1;delay_P1(); ledb2=1;delay_P1(); ledb1=1;delay_P1();ledf2=1;delay_P1(); leda2=1;delay_P1();ledf1=1;delay_P1(); leda1=1; }
void displayN2(void){ // ledc2=1;ledd2=1; ledc1=1;ledd1=1; lede2=1;ledg2=1; lede1=1;ledg1=1; ledb2=1;ledb1=1;ledf2=1; leda2=1;ledf1=1;leda1=1; }
void display1(void){ //笔画1 ledb1=0;delay_P1();ledb2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); leda1=1;leda2=1; ledd1=1;ledd2=1; lede1=1;lede2=1; ledf1=1;ledf2=1; ledg1=1;ledg2=1; }
void display2(void){ // leda1=0;delay_P1();leda2=0;delay_P1(); ledb1=0;delay_P1();ledb2=0;delay_P1(); ledg2=0;delay_P1();ledg1=0;delay_P1(); lede1=0;delay_P1();lede2=0;delay_P1(); ledd1=0;delay_P1();ledd2=0;delay_P1(); ledc1=1;ledc2=1; ledf1=1;ledf2=1; }
void display3(void){ // leda1=0;delay_P1();leda2=0;delay_P1(); ledb1=0;delay_P1();ledb2=0;delay_P1(); ledg1=0;delay_P1();ledg2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1();
ledd2=0;delay_P1();ledd1=0;delay_P1(); lede1=1;lede2=1; ledf1=1;ledf2=1; }
void display4(void){ // ledf1=0;delay_P1();ledf2=0;delay_P1(); ledg1=0;delay_P1();ledg2=0;delay_P1(); ledb1=0;delay_P1();ledb2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); leda1=1;leda2=1; ledd1=1;ledd2=1; lede1=1;lede2=1; }
void display5(void){ // leda2=0;delay_P1();leda1=0;delay_P1(); ledf1=0;delay_P1();ledf2=0;delay_P1(); ledg1=0;delay_P1();ledg2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); ledd2=0;delay_P1();ledd1=0;delay_P1(); ledb1=1;ledb2=1; lede1=1;lede2=1; }
void display6(void){ // leda2=0;delay_P1();leda1=0;delay_P1(); ledf1=0;delay_P1();ledf2=0;delay_P1(); lede1=0;delay_P1();lede2=0;delay_P1(); ledd1=0;delay_P1();ledd2=0;delay_P1(); ledc2=0;delay_P1();ledc1=0;delay_P1(); ledg2=0;delay_P1();ledg1=0;delay_P1(); ledb1=1;ledb2=1; }
void display7(void){ // leda1=0;delay_P1();leda2=0;delay_P1(); ledb1=0;delay_P1();ledb2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); ledd1=1;ledd2=1; lede1=1;lede2=1; ledf1=1;ledf2=1; ledg1=1;ledg2=1; }
void display8(void){ // ledb2=0;delay_P1();ledb1=0;delay_P1(); leda2=0;delay_P1();leda1=0;delay_P1(); ledf1=0;delay_P1();ledf2=0;delay_P1();
ledg1=0;delay_P1();ledg2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); ledd2=0;delay_P1();ledd1=0;delay_P1(); lede2=0;delay_P1();lede1=0;delay_P1(); }
void display9(void){ // ledb2=0;delay_P1();ledb1=0;delay_P1(); leda2=0;delay_P1();leda1=0;delay_P1(); ledf1=0;delay_P1();ledf2=0;delay_P1(); ledg1=0;delay_P1();ledg2=0;delay_P1(); ledc1=0;delay_P1();ledc2=0;delay_P1(); ledd2=0;delay_P1();ledd1=0;delay_P1(); lede1=1;lede2=1; }
void display0(void){ // ledf1=0;delay_P1();ledf2=0;delay_P1(); lede1=0;delay_P1();lede2=0;delay_P1(); ledd1=0;delay_P1();ledd2=0;delay_P1(); ledc2=0;delay_P1();ledc1=0;delay_P1(); ledb2=0;delay_P1();ledb1=0;delay_P1(); leda2=0;delay_P1();leda1=0;delay_P1(); ledg1=1;ledg2=1; }
/**********************************************************************************************/
void turn(uchar i){ switch (i){// case 1:// display1(); break;// case 2:// display2(); break;// case 3:// display3(); break;// case 4:// display4(); break;// case 5:// display5(); break;// case 6://
display6(); break;// case 7:// display7(); break;// case 8:// display8(); break;// case 9:// display9(); break;// case 0:// display0(); break;// } }
/**********************************************************************************************/
void main(void){
TMOD = 0x11; // 定时/计数器0,1工作于方式1
TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号 TL0 = 0xf0;
EA = 1; // 开总中断
ET0 = 1; // 定时/计数器0允许中断 TR0 = 1; // 开闭定时/计数器0 while(1){
unsigned char a,b;
if(MENU == 0){ SP_DIS = 150; turn(hou/10); delay_P2(); displayN(); delay_P2(); turn(hou); delay_P2(); displayN(); delay_P2(); ledb2 = 0; ledc2 = 0; delay_ms(SP4); ledb2 = 1; ledc2 = 1; delay_P2();
turn(min/10); delay_P2(); displayN(); delay_P2(); turn(min); delay_P2(); displayN(); if(key1 == 0 && key2 == 1){ delay_ms(200);//去抖 if(key1 == 0 && key2 == 1){ MENU = 1; while(key1 == 0 || key2 == 0){ ledg1 = 0;ledg2 = 0; } } }else{ delay_ms(SP3); } }
/**********************************************************************************************/
if(MENU == 1){ SP_DIS = 1; turn(hou/10); displayN2(); if(key1 == 0 && key2 == 1){ delay_ms(200);//去抖 if(key1 == 0 && key2 == 1){ MENU = 2; } } if(key2 == 0 && key1 == 1){ delay_ms(200);//去抖 if(key2 == 0 && key1 == 1){ a = hou/10; b = hou; a++; if(a > 2){ a = 0; } hou = a*10 + b; } } while(key1 == 0 || key2 == 0){ }
}
/**********************************************************************************************/
if(MENU == 2){ turn(hou); displayN2(); if(key1 == 0 && key2 == 1){ delay_ms(200);//去抖 if(key1 == 0 && key2 == 1){ MENU = 3; } } if(key2 == 0 && key1 == 1){ delay_ms(200);//去抖 if(key2 == 0 && key1 == 1){ a = hou/10; b = hou; b++; if(b > 9){ b = 0; } if(a > 1){ if(b > 3){ b = 0; } } hou = a*10 + b; } } while(key1 == 0 || key2 == 0){ } }
/**********************************************************************************************/
if(MENU == 3){ turn(min/10); displayN2(); if(key1 == 0 && key2 == 1){ delay_ms(200);//去抖 if(key1 == 0 && key2 == 1){ MENU = 4; } }
if(key2 == 0 && key1 == 1){ delay_ms(200);//去抖 if(key2 == 0 && key1 == 1){ a = min/10; b = min; a++; if(a > 5){ a = 0; } min = a*10 + b; } } while(key1 == 0 || key2 == 0){ } }
/**********************************************************************************************/
if(MENU == 4){ turn(min); displayN2(); if(key1 == 0 && key2 == 1){ delay_ms(200);//去抖 if(key1 == 0 && key2 == 1){ MENU = 0; } } if(key2 == 0 && key1 == 1){ delay_ms(200);//去抖 if(key2 == 0 && key1 == 1){ a = min/10; b = min; b++; if(b > 9){ b = 0; } min = a*10 + b; sec = 0;//调时完成后把秒清0 } } while(key1 == 0 || key2 == 0){ } }
} }
/******************************************************************************
****************
/**********************************************************************************************/
正在阅读:
一位数码时钟 程序04-10
国家税务总局,国家外汇管理局关于远期收汇出口货物出口退税有关问题的通知12-10
《管理学原理》重点知识提纲01-18
进出境商品检验检疫的一般程序06-05
民间网络借贷平台的法律思考07-22
人教版科学九年级作业本答案08-30
第2章 - 动力学基本定律02-02
幼儿案例分析03-31
大学物理11-25
2019年7月学前教育史-含答案05-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 时钟
- 程序
- 数码
- 解密中国照明商帮(浙商)
- 中国石拱桥 - 案例2
- 中考试题研究中考语文每日必练(含答案)
- 弦龙分离式立交桥墩身开工报告
- PlasmaCut1.0-MPC03用户手册
- 贾希利亚时期悬诗及其社会价值之初探
- 《辨证论治》试题及答案
- ISTQB模拟试题
- 万科发行可转债案例
- 主机评估考题
- 在青年教师拜师仪式上的讲话:新老教师传帮带 薪火相传共成长
- 太阳能保温材料市场行情现状研究及投资调查行业报告2019年目录
- 基础护理试题(7—18章)
- 核心力量训练的作用
- 水利工程质量检测员继续教育考试-基础题库
- 营造良好投资环境发言稿
- 财务管理作业3答案
- 唯晶员工手册(1)(经典)
- 样卷及答案复变A卷12-13(1)
- 马克思主义理论在高校教育管理工作中的指导作用