第七章 参考文献
[1]王迎旭.《单片机原理与应用》.机械工业出版社.2004年7月
[2]胡汉才.《单片机原理及系统设计》.清华大学出版社.2002年1月
[3]潘永雄.《新编单片机原理与应用》.西安电子科技大学出版社.2003年2月
[4]张迎新.《单片微型计算机原理、应用及接口技术》.国防工业出版社
[5]郭天祥.《新概念51单片机C语言教程》.电子工业出版社
附录
附录A 系统电路图
图c 系统电路图
15
附录B 程序清单
#include
#define uchar unsigned char #define uint unsigned int
uchar code shu[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code wei[4]={0x01,0x02,0x04,0x08}; sbit set=P1^0; sbit inc=P1^1; sbit dec=P1^2; sbit chg=P1^3; sbit P37=P3^7;
uchar ahour=12,hour=0,aminite=0,minite=0,set_flag=0,chg_flag=0,mstcnt=0,second=0;
void delay(uchar loop) {
uchar loop1;
for(;loop>0;loop--)
for(loop1=110;loop1>0;loop1--); }
void display(uchar shi,uchar fen) {
uint i=0; while(i<4) {
P2=wei[i]; switch(i) {
case 0:P0=shu[fen];delay(10);break; case 1:P0=shu[fen/10];delay(10);break; case 2:P0=shu[shi];delay(10);break; case 3:P0=shu[shi/10];delay(10);break; }
16
i++;
} }
void kscan(void) {
if(set==0) {
while(set==0) {
if(chg_flag==0)display(hour,minite); if(chg_flag==1)display(ahour,aminite); if(chg_flag==2)display(0,second); }
set_flag++;
if(set_flag>=3)set_flag=0; }
if(inc==0) {
while(inc==0)
{
if(chg_flag==0)display(hour,minite); if(chg_flag==1)display(ahour,aminite); if(chg_flag==2)display(0,second); }
switch(chg_flag) {
case 0:if(set_flag==1)
{hour++;if(hour>=24)hour=0;}; if(set_flag==2)
{minite++;if(minite>=60)minite=0;}; break;
case 1:if(set_flag==1)
{ahour++;if(ahour>=24)ahour=0;}; if(set_flag==2)
{aminite++;if(aminite>=60)aminite=0;}; break;
case 2:TR0=1;break;
17
default:break;
} }
if(dec==0) {
while(dec==0) {
if(chg_flag==0)display(hour,minite); if(chg_flag==1)display(ahour,aminite); if(chg_flag==2)display(0,second); }
switch(chg_flag) {
case 0:if(set_flag==1)
{hour--;if(hour<=0)hour=24;}; if(set_flag==2)
{minite--;if(minite<=0)minite=60;}; break;
case 1:if(set_flag==1)
{ahour--;if(ahour<=0)ahour=24;}; if(set_flag==2)
{aminite--;if(aminite<=0)aminite=60;}; break;
case 2:TR0=0;
second--;
if(second<=0)second=60;break;
default:break;
} }
if(chg==0) {
while(chg==0) {
if(chg_flag==0)display(hour,minite); if(chg_flag==1)display(ahour,aminite); if(chg_flag==2)display(0,second); }
chg_flag++;
18
if(chg_flag>=3)chg_flag=0; } }
void sound(void) { uint j=0; while(j<30) {
P37=1;
delay(500); P37=0;
delay(500); j++; } }
void main() {
P1=0xff; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; while(1) {
if(P1!=0xff)kscan();
if(chg_flag==0)display(hour,minite); if(chg_flag==1)display(ahour,aminite); if(chg_flag==2)display(0,second);
if(ahour==hour&&aminite==minite)sound(); } }
void time(void) interrupt 1 {
TH0=0x3c;
19