基于51单片机电子闹钟的设计 下载本文

参考文献

[1]李全利、 迟荣强,单片机原理及接口技术[M],北京:高等教育出版社,2004 [2]凌玉华,单片机原理及应用系统设计[M],长沙:中南大学出版社,2006 [3]张毅刚,MCS-51单片机应用设计[M],哈尔宾:哈尔宾工业大学出版社,1997 [4]胡汉才,单片机原理及应用[M],北京:清华大学出版社,2004

[5]何立明,单片机应用系统设计[M],北京:北京航空航天大学出版社,1990 [6]王荣良,计算机接口技术[M],北京:电子工业出版社,2003

[7]陈光东,单片机微型计算机原理与接口技术[M],武汉:华中理工大学出版社,1998 [8]张靖武、周灵彬,单片机系统的Proteus设计与仿真[M],北京:电子工业出版社,2007

13

附 录

相关的程序代码:

#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 fmq=P2^1;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0xbf,0x0ff}; //数码管显示的数值 void jia(); //函数声明 void jian();

uchar table1[8],table2[8],table3[8],table4[8]; //数组定义,数组内含有8个数值

uchar shi=12,fen=0,miao=0; //时间显示初始值

uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3; //定义全局变量 uchar shi4,fen4,miao4;

uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3; // 1秒 等时 位闪 次数 校时 闹1 闹2 闹3 uint flag2; // 蜂鸣

void delay(uchar i) // 延时函数,用于动态扫描数码管 { uchar x,y; for(x=i;x>0;x--) for(y=120;y>0;y--); }

void init() // 初始化函数

14

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

TH0=0x3c; //定时时间为:50ms (65536-50000)/256 TL0=0x0b0; //(65536-50000)%6 ET0=1; //打开定时器 EA=1; //开总中断 TR0=1; //启动定时器 }

void display() // 显示子函数,用于显示时间数值 { uchar i,j;

if(cnt!=10||wss==0)

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

} else

{ table1[0]=table1[1]=11;} if(cnt!=11||wss==0)

{ table1[3]=fen; //分离分的个位与十位

table1[4]=fen/10;

} else

{ table1[3]=table1[4]=11;} if(cnt!=12||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]]; //显示数值

15

delay(10);

j=_cror_(j,1); //循环右移 } }

void display1() // 显示子函数,用于显示定时1时间 { uchar i,j; 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;

16