|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (79.76 KB, 下載次數(shù): 58)
下載附件
2022-5-13 20:42 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar ms,miao,fen,shi,shi_n=0,fen_n=1,miao_n;
- uchar mos;
- uchar mm,mm_d;
- uchar shu,g;
- bit aa,zi_d,shijian;
- sbit rs = P2^0;
- sbit rw = P2^1;
- sbit e = P2^2;
- sbit led=P3^7;
- sbit k1=P2^3;
- sbit k2=P2^4;
- sbit k3=P2^5;
- sbit k4=P2^6;
- sbit k5=P2^7;
- sbit T_CLK = P3^6; /*實(shí)時時鐘時鐘線引腳 */
- sbit T_IO = P3^7; /*實(shí)時時鐘數(shù)據(jù)線引腳 */
- sbit T_RST = P3^5; /*實(shí)時時鐘復(fù)位線引腳 */
- sbit ACC0=ACC^0;
- sbit ACC1=ACC^1;
- sbit ACC2=ACC^2;
- sbit ACC3=ACC^3;
- sbit ACC4=ACC^4;
- sbit ACC5=ACC^5;
- sbit ACC6=ACC^6;
- sbit ACC7=ACC^7;
- uchar code FFW[]=
- {
- 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
- };
- uchar code REV[]=
- {
- 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
- };
- void delay(uchar m)
- {
- uchar i;
- while(m--)
- {
- for(i = 0 ; i<250;i++) ;
- }
- }
- void xiezhilin(uchar zhilin)
- {
-
- rs = 0 ;
- rw = 0 ;
- e = 0 ;
- P0 = zhilin ;
- delay(1);
- e = 1 ;
- delay(1);
- e = 0 ;
- }
- void xiesu(uchar suzi)
- {
-
- rs = 1 ;
- rw = 0 ;
- e = 0 ;
- P0 = suzi ;
- delay(1);
- e = 1 ;
- delay(1);
- e = 0 ;
- }
-
- void xianshi(uchar dizhi, uchar suzi)
- {
- xiezhilin(dizhi);
- xiesu(suzi);
- }
- void xian()
- {
- if(zi_d==0)
- {
- xianshi(0x80+0x40+1,'Z');
- }
- else
- {
- xianshi(0x80+0x40+1,'S');
- }
- if((mos==1)&&(aa==1))
- {
- xianshi(0x80+4,' ');
- xianshi(0x80+5,' ');
- }
- else
- {
- xianshi(0x80+4,0x30+shi_n%100/10);
- xianshi(0x80+5,0x30+shi_n%10);
- }
- xianshi(0x80+6,':');
- if((mos==2)&&(aa==1))
- {
- xianshi(0x80+7,' ');
- xianshi(0x80+8,' ');
- }
- else
- {
- xianshi(0x80+7,0x30+fen_n%100/10);
- xianshi(0x80+8,0x30+fen_n%10);
- }
-
- xianshi(0x80+9,':');
- if((mos==3)&&(aa==1))
- {
- xianshi(0x80+10,' ');
- xianshi(0x80+11,' ');
- }
- else
- {
- xianshi(0x80+10,0x30+miao_n%100/10);
- xianshi(0x80+11,0x30+miao_n%10);
- }
- if((mos==4)&&(aa==1))
- {
- xianshi(0x80+0x40+4,' ');
- xianshi(0x80+0x40+5,' ');
- }
- else
- {
- xianshi(0x80+0x40+4,0x30+shi%100/10);
- xianshi(0x80+0x40+5,0x30+shi%10);
- }
-
- xianshi(0x80+0x40+6,':');
- if((mos==5)&&(aa==1))
- {
- xianshi(0x80+0x40+7,' ');
- xianshi(0x80+0x40+8,' ');
- }
- else
- {
- xianshi(0x80+0x40+7,0x30+fen%100/10);
- xianshi(0x80+0x40+8,0x30+fen%10);
- }
-
- xianshi(0x80+0x40+9,':');
- xianshi(0x80+0x40+10,0x30+miao%100/10);
- xianshi(0x80+0x40+11,0x30+miao%10);
- }
- /*------------------------------------------------
- 發(fā)送一個字節(jié)
- ------------------------------------------------*/
- void SendByte(unsigned char dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
- void z_zhuan()
- {
- xianshi(0x80+0x40+15,'Z');
- SendByte('Z');
-
- for(mm_d=0;mm_d<24;mm_d++)
- {
- P1=FFW[mm];
- delay(20);
- mm++;
- if(mm>7) {mm=0;}
- }
- P1=0x09;
- xianshi(0x80+0x40+15,' ');
- }
- void f_zhuan()
- {
-
- xianshi(0x80+0x40+15,'F');
- SendByte('F');
-
- for(mm_d=0;mm_d<24;mm_d++)
- {
- P1=REV[mm];
- delay(20);
- mm++;
- if(mm>7) {mm=0;}
- }
- P1=0x09;
- xianshi(0x80+0x40+15,' ');
- }
- void v_RTInputByte(uchar ucDa)
- {
- uchar i;
- ACC = ucDa;
- for(i=8; i>0; i--)
- {
- T_IO = ACC0;
- T_CLK = 1;
- T_CLK = 0;
- ACC = ACC >> 1;
- }
- }
- uchar uc_RTOutputByte(void)
- {
- uchar i;
- for(i=8; i>0; i--)
- {
- ACC = ACC >>1;
- ACC7 = T_IO;
- T_CLK = 1;
- T_CLK = 0;
- }
- return(ACC);
- }
- void v_W1302(uchar ucAddr, uchar ucDa)
- {
- T_RST = 0;
- T_CLK = 0;
- T_RST = 1;
- v_RTInputByte(ucAddr); /* 地址,命令 */
- v_RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/
- T_CLK = 1;
- T_RST =0;
- }
- uchar uc_R1302(uchar ucAddr)
- {
- uchar ucDa;
- T_RST = 0;
- T_CLK = 0;
- T_RST = 1;
- v_RTInputByte(ucAddr); /* 地址,命令 */
- ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
- T_CLK = 1;
- T_RST =0;
- return(ucDa);
- }
- void dushi(void)
- {
- g=uc_R1302(0x81);
- miao=g&0x70;
- miao=miao>>4;
- miao=(miao*10)+(g&0x0f);
-
- g=uc_R1302(0x83);
- fen=g&0x70;
- fen=fen>>4;
- fen=(fen*10)+(g&0x0f);
-
- g=uc_R1302(0x85);
- shi=g&0x70;
- shi=shi>>4;
- shi=(shi*10)+(g&0x0f);
- }
- void xieshi(void)
- {
- v_W1302(0x8E,0x00);//打開寄存器
- g=miao%100/10;
- g=g<<4;
- shu=g|(miao%10);
- v_W1302(0x80,shu);
-
- g=fen%100/10;
- g=g<<4;
- shu=g|(fen%10);
- v_W1302(0x82,shu);
-
- g=shi%100/10;
- g=g<<4;
- shu=g|(shi%10);
- v_W1302(0x84,shu);
- v_W1302(0x8E,0x80); //guan
- }
- void key()
- {
- if(k1==0)
- {
- delay(5);
- if(k1==0)
- {
- zi_d=0;
- ES = 1;
- while(!k1);
- }
- }
- if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- zi_d=1;
- while(!k2);
- }
- }
- if(zi_d==0)
- {
- if(k3==0)
- {
- delay(5);
- if(k3==0)
- {
- mos++;if(mos==6) mos=0;
- while(!k3);
- }
- }
- if(mos!=0)
- {
- if(k4==0)
- {
- delay(5);
- if(k4==0)
- {
- if(mos==1){shi_n++;if(shi_n==24)shi_n=0;}
- if(mos==2){fen_n++;if(fen_n==60)fen_n=0;}
- if(mos==3){miao_n++;if(miao_n==60)miao_n=0;}
- if(mos==4){shi++;if(shi==24)shi=0;}
- if(mos==5){fen++;if(fen==60)fen=0;}
- xieshi();
- while(!k4);
- }
- }
- if(k5==0)
- {
- delay(5);
- if(k5==0)
- {
- if(mos==1){if(shi_n==0)shi_n=24; shi_n--;}
- if(mos==2){if(fen_n==0)fen_n=60; fen_n--;}
- if(mos==3){if(miao_n==0)miao_n=60; miao_n--;}
- if(mos==4){if(shi==0)shi=24; shi--;}
- if(mos==5){if(fen==0)fen=60; fen--;}
- xieshi();
- while(!k5);
- }
- }
- }
- }
- else
- {
- if(k4==0)
- {
- delay(5);
- if(k4==0)
- {
- z_zhuan();
- while(!k4);
- }
- }
- if(k5==0)
- {
- delay(5);
- if(k5==0)
- {
- f_zhuan();
- while(!k5);
- }
- }
- }
- }
-
- void main()
- {
- xiezhilin(0x01); //顯示清屏
- xiezhilin(0x38); //顯示模式設(shè)置
- xiezhilin(0x0c); //光標(biāo)設(shè)置
- TH1 = 0xFD; //晶振11.0592mhz 波特率設(shè)為9600
- TL1 = 0xFD;
- TMOD = 0x21; //定時器1方式2
- SCON = 0x50; //串口接收使能
- ES = 0; //串口中斷使能 //使用外中斷函數(shù)必須ES為0
- TR1 = 1; //定時器1使能
- TI = 0; //發(fā)送中斷標(biāo)記位,必須設(shè)置
- EA = 1;
- xianshi(0x80+0,'m');
- xianshi(0x80+1,'o');
- xianshi(0x80+2,'s');
- xianshi(0x80+14,'D');
- xianshi(0x80+15,'Y');
- dushi();
- shijian=1;
- while(1)
- {
- ms++;
- if(ms>=5){aa=~aa;ms=0;dushi();}
- if(shu=='Z')z_zhuan();
- if(shu=='F')f_zhuan();
- shu=0;
- key();
- xian();
- if((shi==shi_n)&&(fen==fen_n)&&(miao==miao_n))
- {
- shijian=1;
- }
- if(shijian==1)
- {
- z_zhuan();
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- delay(100);
- dushi();
- xian();
- f_zhuan();
- shijian=0;
- }
- }
- }
- void getch(void) interrupt 4
- {
- if(RI==1)
- {
- RI=0;
- shu=SBUF;
- led=~led;
- }
- }
復(fù)制代碼
Keil5代碼與Proteus8.8仿真下載:
http://www.zg4o1577.cn/bbs/dpj-220178-1.html
|
|