基于单片机C语言电子时钟完整版(闹钟,整点报时) - 图文(3)

2019-08-03 14:35

图3-2 时间处理子程序流程框图

图3-3 中断子程序

3.4 设计课题软件系统程序清单

;----------------------------------------------------------------------- ;项目名称:数字电子钟

;项目功能:本电子钟实现24小时制,8位数码管显示时分秒,显示格式:12-59-00 通过4只按键来调整时间,调整选择键KEY1:P1.0;通过选择键选

择调整位,选中位闪烁,增加键KEY2:P1.1;按一次使选中位加1。

减少键KEY3:P1.2;按一次使选中位减1,bear:P3.1;到了整点和闹 钟就会响,

如果长按KEY1第一次切换到正常时钟显示,按第二次切换到时的调整, 按第三次切换到分的调整,同时led:P1.2就会闪烁,

按第四次和第五次分别切换到闹钟的时分的调整 ,可进行调 时、调分快进快减,并停止闪烁。如果选中位是秒,

则按增加键或减少键可实现,但无调时快进和快减功能。P0口输出数 码管段选信号,P2口输出数码管位选信号;晶振12MHz。

编程作者: 林炽逸

完成时间: 2013年06月8日 程序请清单如下:

#include #include #include #define uint unsigned int #define uchar unsigned char sbit KEY1=P1^1; //切换键

sbit KEY2=P1^2; //minute ,hour调整加1定义 sbit KEY3=P1^7; //minute ,hour调整减1定义 sbit bear=P3^1; //闹铃

sbit led=P1^2; //闹钟,整时灯闪烁

code unsigned char tab[]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xc8,0x8e,0xff,0x21}; //段码控制 char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar ms[8]={2,2,10,4,0,0,1,14}; uchar StrTab[8];

uchar minute=59,hour=12,second=0; // 正常 时钟秒,分,时 定义 uchar minute1=00,hour1=00; second1=00; // 闹钟 时钟秒,分,时 定义 uchar flag=0, flag1=0; //切换标志 uchar num=0; uint count=0; //定时器计数,定时50ms,count满20,秒加1 /***********子函数声明*******************************************/

void xianshishuzu(); // 显示数组子程序 void alarm(); //闹钟子程序

/********************** 延时子程序*****************************/ void delay(uint z) { uint x,y; for(x=0;x

/***********************时间处理子程序*************************/ void time_pro(void) {

if(second==60) {second=0;minute++; if(minute==60) {minute=0;hour++; if(hour==24) {hour=0;} } } }

/**********************显示时钟子函数***************************/ void dispaly(uchar w[8]) { unsigned int i,j,aa;

aa=0xfe; //位选初值1111 1110 for(i=0;i<8;i++) //依次将数组w中八个数取出,并显示 { P2=aa; //位选 j=w[i]; //取出要显示的数码 P0=tab[j]; //取出段选编码 aa=_crol_(aa,1); //位选信号循环右移? delay(1); //显示延时 P0=0xff; //消影 } }

/***********************显示时钟数组子程序***********************/ void xianshishuzu() { StrTab[1]=second/10; //秒个位 StrTab[0]=second; //秒十位 StrTab[2]=10; //间隔符 - StrTab[4]=minute/10; //分个位 StrTab[3]=minute; //分十位 StrTab[5]=10; //间隔符 -

StrTab[7]=hour/10; //时个位 StrTab[6]=hour; //时十位 }

/**********************键盘扫描子程序*************************/ void keycan() {

if(KEY1==0) //按一次,正常显示,按第二次,时调整,按第三次,分调这整, { delay(10); //按键1去抖以及动作 if(KEY1==0) //确认按键是否按下 {flag++;} //切换标志 while(!KEY1);} //释放按键 if(flag==1) { if(KEY2==0) { delay(10); if(KEY2==0) { hour++;if(hour==24)hour=0; } //正常时间 小时 加1 while(!KEY2) //释放按键 {dispaly(StrTab); } } if(KEY3==0) {delay(10); if(KEY3==0) { hour--;if(hour==0)hour=23; dispaly(StrTab);} //正常时间小时 减1 while(!KEY3) { dispaly(StrTab);} } }

if(flag==2)

{if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) { minute++;if(minute==60)minute=0;} //分加1 while(!KEY2) { dispaly(StrTab); } } if(flag==3) // 秒表的加1 { if(KEY3==0) { delay(10); if(KEY3==0) { second++;if(second==0)second=59; //秒加1 } while(!KEY3){ dispaly(StrTab);} } } }


基于单片机C语言电子时钟完整版(闹钟,整点报时) - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中级经济师金融复习材料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: