基于单片机的电子闹钟设计(4)

2018-12-17 16:56

西安文理学院课程设计报告

参考文献

[1]李全利、 迟荣强,单片机原理及接口技术[M],北京:高等教育出版社,2004

[2]凌玉华,单片机原理及应用系统设计[M],长沙:中南大学出版社,2006 [3]张毅刚,MCS-51单片机应用设计[M],哈尔宾:哈尔宾工业大学出版社,1997

[4]胡汉才,单片机原理及应用[M],北京:清华大学出版社,2004

[5]何立明,单片机应用系统设计[M],北京:北京航空航天大学出版社,1990

[6]王荣良,计算机接口技术[M],北京:电子工业出版社,2003

[7]陈光东,单片机微型计算机原理与接口技术[M],武汉:华中理工大学出版社,1998

[8]王幸之、钟爱琴、王雷、王闪,AT89系列单片机原理与接口技术[M],北京:北京航空航天大学出版社,2004

[9]张道德,单片机接口技术(C51版)[M],北京:中国水利水电出版社,2007

[10]王为青、程国钢,单片机KEIL CX51应用开发技术[M],北京:人民邮电出版社,2007

[11]张靖武、周灵彬,单片机系统的PROTEUS设计与仿真[M],北京:电子工业出版社,2007

第 16 页

西安文理学院课程设计报告

附 录

相关的程序代码:

//****************************头文件******************************** #INCLUDE #INCLUDE

//****************************宏定义******************************** #DEFINE UCHAR UNSIGNED CHAR #DEFINE UINT UNSIGNED INT

//****************************位声明******************************** SBIT KEY1=P1^0; SBIT KEY2=P1^1; SBIT KEY3=P1^2; SBIT KEY4=P1^3;

SBIT KEY5=P1^4;//***开始计时 SBIT KEY6=P1^5;//***暂停 SBIT KEY7=P1^6;//***重置 SBIT FMQ=P2^1;

//************************数码管显示的数值************************** UCHAR CODE TABLE[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92, // 0 1 2 3 4 5

0X82,0XF8,0X80,0X90,0XBF,0X0FF};

// 6 7 8 9 - 灭

//****************************函数声明****************************** VOID JIA(); VOID JIAN();

//********************数组定义,数组内含有8个数值****************** UCHAR TABLE1[8],TABLE2[8],TABLE3[8],TABLE4[8];

//**************************时间显示初始值************************** UCHAR SHI=3,FEN=0,MIAO=0; UCHAR SHI2,FEN2,MIAO2;

//**************************定义全局变量**************************** UCHAR SHI1,FEN1,MIAO1; UCHAR SHI4,FEN4,MIAO4; UCHAR HMFLAG=0;

UCHAR FLAG, FLAG1, WSS, CNT, CNT1, ALM1; // 1秒 等时 位闪 次数 校时 闹1 UINT FLAG2; // 蜂鸣

//*********************延时函数,用于动态扫描数码管***************** VOID DELAY(UCHAR I) { UCHAR X,Y;

FOR(X=I;X>0;X--)

第 17 页

西安文理学院课程设计报告

FOR(Y=120;Y>0;Y--); }

//*******************************初始化函数************************* VOID INIT()

{ TMOD=0X11; //工作方式1

TH0=0X3C; //定时时间为:50MS (65536-50000)/256 TL0=0X0B0; //(65536-50000)%6 TH1=0XFE; TL1=0X0C; ET0=1;

ET1=1; //打开定时器 EA=1; //开总中断 TR0=1; //启动定时器 }

//********************显示子函数,用于显示时间数值***************** VOID DISPLAY() { UCHAR I,J;

IF(CNT!=4||WSS==0)

{ TABLE1[0]=MIAO; //分离秒的个位与十位 TABLE1[1]=MIAO/10; } ELSE

{ TABLE1[0]=TABLE1[1]=11;} IF(CNT!=5||WSS==0)

{ TABLE1[3]=FEN; //分离分的个位与十位 TABLE1[4]=FEN/10; } ELSE

{ TABLE1[3]=TABLE1[4]=11;} IF(CNT!=6||WSS==0)

{ TABLE1[6]=SHI; //分离时的个位与十位 TABLE1[7]=SHI/10; } ELSE

{ TABLE1[6]=TABLE1[7]=11;} TABLE1[2]=TABLE1[5]=10; J=0X7F;

FOR(I=0;I<=7;I++) //从秒到时的扫描 { P3=J;

P0=TABLE[TABLE1[I]]; //显示数值 DELAY(10);

J=_CROR_(J,1); //循环右移 } }

//*******************显示子函数,用于显示定时1时间***************** VOID DISPLAY1() { UCHAR I,J;

第 18 页

西安文理学院课程设计报告

IF(ALM1==0)

{ IF(CNT!=1||WSS==0)

{ TABLE2[0]=MIAO1; //以下含义同上 TABLE2[1]=MIAO1/10; } ELSE

{ TABLE2[0]=TABLE2[1]=11;} IF(CNT!=2||WSS==0)

{ TABLE2[3]=FEN1; TABLE2[4]=FEN1/10; } ELSE

{ TABLE2[3]=TABLE2[4]=11;} IF(CNT!=3||WSS==0)

{ TABLE2[6]=SHI1; TABLE2[7]=SHI1/10; } ELSE

{ TABLE2[6]=TABLE2[7]=11;} } ELSE

TABLE2[0]=TABLE2[1]=TABLE2[3]=TABLE2[4]=TABLE2[6]=TABLE2[7]=10; TABLE2[2]= TABLE2[5]=10; J=0X7F;

FOR(I=0;I<=7;I++) { P3=J;

P0=TABLE[TABLE2[I]]; DELAY(10);

J=_CROR_(J,1); } }

//********************显示秒表子函数,用于显示时间数值***************** VOID DISPLAY2() { UCHAR I,J;

{ TABLE2[0]=MIAO2; //分离秒的个位与十位 TABLE2[1]=MIAO2/10;

TABLE2[3]=FEN2; //分离分的个位与十位 TABLE2[4]=FEN2/10;

TABLE2[6]=SHI2; //分离时的个位与十位 TABLE2[7]=SHI2/10;}

TABLE2[2]=TABLE2[5]=10; J=0X7F;

FOR(I=0;I<=7;I++) //从秒到时的扫描 { P3=J;

P0=TABLE[TABLE2[I]]; //显示数值 DELAY(2);

J=_CROR_(J,1); //循环右移

第 19 页

西安文理学院课程设计报告

} }

//***********************时间子函数 *****************************// VOID SHIJIAN()

{ IF(FLAG>=20) //判断是否到一秒 { WSS=~WSS; FLAG=0; //到了,则标志位清零 IF(CNT1!=0)

{ MIAO4++; //秒加1

IF( MIAO4>59) //判断秒是否到60S { MIAO4=0; //到了,则清零 FEN4++; //分加1

IF(FEN4>59) //以下含义同上 { FEN4=0; SHI4++; IF(SHI4>23) SHI4=0;

} } } ELSE

{ MIAO++; //秒加1

IF( MIAO>59) //判断秒是否到60S { MIAO=0; //到了,则清零 FEN++; //分加1

IF(FEN>59) //以下含义同上 { FEN=0; SHI++; IF(SHI>23) SHI=0;

} } } } }

//**************************键盘扫描子函数************************// VOID KEY_SCAN() { IF(KEY1==0)

{ WHILE(!KEY1) //防止掉显 { IF(CNT==1||CNT==2||CNT==3) { DISPLAY1(); } IF(CNT==0||CNT==4||CNT==5||CNT==6||CNT==8) { DISPLAY(); } IF(CNT==7) {DISPLAY2();}

第 20 页


基于单片机的电子闹钟设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:求极限的若干方法

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

马上注册会员

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