[5] 楼然苗.李光飞.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.4 [6] 单片机学习网www.mcustudy.com
附录
附录1. 整体电路图
附录2. 详细程序
#include \
#include
#define PA XBYTE[0xD1FF] /*PA口地址*/ #define PB XBYTE[0xD2FF] /*PB口地址*/ #define PC XBYTE[0xD5FF] /*PC口地址*/ #define CON XBYTE[0xD7FF] /*控制字地址*/ #define uchar unsigned char Code Char dis_7[14]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28,0xff,0x7f,0x30,0x70};
/* 共阳LED段码表 \ \ \ \ \ \ \ \ \ \\不亮\
code char scan_con[8]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xBF,0x7f}; // 列扫描控制字
data char disdata[8]={0x08,0x05,0x09,0x02,0x0b,0x00,0x01,0x0d};//计时单元数据初值,共6个
data char dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据,共6个数据
data char con1s=0x00,con04s=0x00,con=0x00,con05s=0x00,d=0x00;//1秒定时用 sbit key0=P3^2; //移位键 sbit key1=P3^3; // 加一
sbit BEEP=P2^0; //蜂鸣器接口 /****************/ //1毫秒延时程序// /***************/ delay1ms(int t) { int i,j;
for(i=0;i for(j=0;j<120;j++); } /***********/ //扫描程序// /**********/ scan() { char k; for(k=0;k<6;k++) { CON=0X89; PB=dis_7[dis[k]];PA=scan_con[k];delay1ms(1);PA=0xff; } } /*****************/ //键盘调时程序// /******************/ keyscan() { EA=0; if(key0==0) { delay1ms(10); while(key0==0); if(dis[con]==10) {dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];} con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con>=6) {con=0;TR1=0;ET1=0;TR0=1;ET0=1;} } if(con>=0) { if(key1==0) { delay1ms(10); while(key1==0); d=con+2; disdata[d]++; if(disdata[d]>=14) {disdata[d]=0;} dis[con]=disdata[d];dis[6]=0x0a; } } EA=1; } /************/ // 打铃程序 / /*************/ Play1() { uchar i,t; for(i=0;i<100;i++) { BEEP=~BEEP; delay1ms(t); } BEEP=1; } Play2() { BEEP=1; } bell() {if((disdata[0]==0x00||disdata[0]==0x01||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||(disdata[0]==0x00||disdata[0]==0x01||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) { Play1();} if((disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||(disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play2();} if(((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play1();} } /************/ //初始化程序// /*************/ clearmen() { int i; for(i=0;i<6;i++) { dis[i]=disdata[i]; } TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用) TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用) TMOD=0X01;ET0=1;ET1=1;TR1=0;TR0=1;EA=1; } /**********/ //主程序// /*********/ main()