参考文献
[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
#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