基于8051单片机和DS12C8878位数码管显示的时钟(2)
更新时间:2024-03-30 17:17:01 阅读量: 综合文库 文档下载
- 8051单片机介绍推荐度:
- 相关推荐
#include
#define sec XBYTE[0xed00]//秒寄存器地址 #define min XBYTE[0xed02]//分寄存器地址 #define hour XBYTE[0xed04]//小时寄存器地址
#define DS12887a XBYTE[0xed0a]//12887A寄存器地址 #define DS12887b XBYTE[0xed0b]//12887B寄存器地址
unsigned char code b[8]={0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff}; //数码管地址 unsigned char code
数码管字符码c[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};//
sbit beep=P1^4; sbit K2=P1^0; sbit K1=P1^1; sbit K3=P1^2;
//sbit DS12887CS=P2^1; sbit DISP=P2^4; sbit S1=P2^2;
unsigned char SS_1,SS_2,SS_3,SS_0;
单位延时2ms函数 //***************** ************************
void delay1ms(unsigned char t) { unsigned char i,j; for(;t>0;t--) for(i=2;i>0;i--) for(j=248;j>0;j--); }
//******** //12887初始化,所有中断禁止,24h制,二进制格式 ******** void clock_initial(void) { //DS12887CS=0; DS12887b=0x86;//禁止时钟更新 hour=0x00; min=0x00; sec=0x00; DS12887a=0x20;//启动内部锂电池 DS12887b=0x06;//启动时钟更新 //DS12887CS=1; }
//****************** 时间修改函数修改小时 **************** void clock_adj_h(char adj) { char temp; temp=hour; if((temp+adj)==0x18) { DS12887b=0x86; hour=0x00; DS12887b=0x06; } else if((temp+adj)==-1) { DS12887b=0x86; hour=0x17; DS12887b=0x06; } else { DS12887b=0x86; hour=temp+adj; DS12887b=0x06; } }
//****************** 时间修改函数修改分钟 ************************ void clock_adj_m(char adj) { char temp; temp=min; if((temp+adj)==0x3c) { DS12887b=0x86; min=0x00; DS12887b=0x06; } else if((temp+adj)==-1) {
DS12887b=0x86; min=0x3b; DS12887b=0x06; } else { DS12887b=0x86; min=temp+adj; DS12887b=0x06; } }
//****************** 读取时间及显示函数 ************************ void disp (void) { unsigned char i,h,m,s,j; unsigned char a[8]; //DS12887CS=0; h=hour; m=min; s=sec;//读取时间 //DS12887CS=1; a[0]=c[h/10]&SS_1;//小时十位 a[1]=c[h]&SS_1;//小时个位 a[2]=c[10]&SS_0;//显示“- ”“ a[3]=c[m/10]&SS_2;//分钟十位 a[4]=c[m]&SS_2;//分钟个位 a[5]=c[10]&SS_0;//显示“- ”“ a[6]=c[s/10]&SS_3;//秒十位 a[7]=c[s]&SS_3;//秒个位 for(j=0;j<2;j++) for(i=0;i<8;i++) { DISP=0; P0=a[i]; DISP=1; P2=b[i]; delay1ms(1); S1=0; } }
//***************** 按键扫描及求键码 ********************* void key_scan(void) { unsigned char a; char b; b=0; P1=P1|0x07; if(!(K1&&K2&&K3))//是否有按键按下 {
延时消抖 delay1ms(10);//
if(!(K1&&K2&&K3))// 确认是否有键按下 { if(K1==0) {a++;while(K1==0) disp();if(a==4)a=0;} if(K2==0){b= 1;while(K2==0) disp();} if(K3==0){b=-1;while(K3==0) disp();} } } switch(a) { case 0:{SS_3=0xff;b=0;}break; case 1:{SS_1=SS_0;if(b!=0){clock_adj_h(b);b=0;}}break; case 2:{SS_1=0xff;SS_2=SS_0;if(b!=0){clock_adj_m(b);b=0;}}break;
case 3:{SS_2=0xff;SS_3=SS_0;if(b!=0)
{DS12887b=0x86;sec=0x00;DS12887b=0x06;b=0;}}break;
default:{a=0;b=0;}break; } }
//*********************** 主函数 **************************** void main (void) { unsigned char i=1; S1=0;
}
TMOD=0x01; TR0=1; TH0=0x5f; TL0=0x00;
SS_0=0xff;SS_1=0xff;SS_2=0xff;SS_3=0xff; clock_initial();//初始化 while(1) { key_scan();//按键扫描 if(TF0) { if(i==7) { TF0=0; SS_0=~SS_0;//\闪烁显示 i=0; } else { TF0=0; i++; } }
}
disp();
正在阅读:
基于8051单片机和DS12C8878位数码管显示的时钟(2)03-30
专用车销售知识入门08-29
小学汇报材料:如何提高语文课堂的有效性03-08
医疗器械基础知识06-03
内部人才推荐方案06-12
Eviews之变系数回归模型10-13
工作情况汇报02-17
小学生一年级写及时雨作文的作文06-13
2010年9月计算机四级网络工程师笔试试题:Word 文字无错版06-25
生态文明知识竞赛试题及答案10-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数码管
- 单片机
- 时钟
- DS12C8878
- 基于
- 显示
- 8051
- 物理选修3-1 问题与练习-附答案
- 防爆和火灾危险环境电气工程作业指导书
- 张家口市春雷老年公寓简介
- C++类的练习
- 2018医学检验技术中级考试历年真题汇总合集
- 新课程五年级体育课教案下(新课标) - ABC教育
- 常见翻译技巧
- 河北工业大学数值分析Romo
- 121部部分内容含重点
- 通信原理复习重点
- 设计任务书
- 2018-2019年贵州省贵阳市质检一:贵阳市2018届高三第一次质量检
- 2015年矿井灾害预防与处理计划(2)
- 江苏华电湿除支架上部结构模板支撑专项施工方案报审版本(高支模
- 石棉县纪委“六个围绕一加强”做好反腐倡廉法规制度工作
- 刑法因果关系的认定
- 民间文学考研名词解释
- 社会工作概论期末复习
- 安全素质评价的展开及应用
- 小学低年级奥数第六讲年龄问题