7U$EPZDK~[EKBC5355@PM]J.png (69.53 KB, 下載次數(shù): 61)
下載附件
2019-11-20 20:35 上傳
單片機源程序如下:
- #include <at89x51.h> //頭文件
- #include "18b20.h"
- #include "1302.h"
- #include "12864.h"
- #include "zifu.h"
- #include "Time.h"
- #include "Delay.h"
- sbit People_KEY_ADD = P1^0; //人數(shù)加按鍵
- sbit People_KEY_DEC = P1^1; //人數(shù)減按鍵
- int People = 0; //人數(shù)值,默認為0
- uchar k,direction;
- bit flag;
- bit flag5=0; //flag5是外部中斷1的標志位 flag1是步進標志
- uchar p,dengji; //定時次數(shù)
- bit flag1=0;
- systemtime realtime;
- bit first=1; //中斷次數(shù)控制
- void Display_People(void);
- void KEY_People(void);
- /*=========================================
- //定時器中斷,
- =========================================*/
- void dingshi() interrupt 1 using 1 //定時程序.產(chǎn)生步進時間
- {
- if(p--)
- {
- TL0=0;
- TH0=0xa0;
- flag1=0;
- }
- else
- {
- flag1=1;
- TL0=0;
- TH0=0x00;
- p=20-(dengji>>1);
- }
- }
- /*=========================================
- //中斷函數(shù) ,用于檢測時間調(diào)節(jié)按鍵
- =========================================*/
- void zhongduan() interrupt 0 using 0
- {
- uchar i=0;
- if(first) //FIRST=1;打開方向按鍵判斷標志
- {
- first=0;
- k=(P2>>6);
- k=k&0x03;
- if(flag)
- {
- if(k==1) direction=3;//左
- if(k==2) direction=1;//右
- }
- else
- {
- if(k==0) direction=4;//上
- if(k==3) direction=2;//下
- }
- }
- }
-
- /*萬年歷子程序*/
- void wannianli(void)
- {
- uchar i;
- uchar count1=0;
- k=0;
- choose12864(2);
- init12864();
- clear12864();
- play8(0,0,0,shu2); //屏,列,頁,地址
- play8(0,1,0,shu0);
- play16(0,4,0,nian);
- play16(1,0,0,yue);
- play16(1,4,0,ri);
- play16(0,2,1,shi);
- play16(0,6,1,fen);
- play16(1,2,1,miao);
- play16(1,0,2,xing);
- play16(1,2,2,qi);
- vertical(3,63,127);
- vertical(3,63,126);
- vertical(3,63,122);
- vertical(3,63,121);
- for(i=0;i<7;i++)
- {
- dot(121+i,3);
- dot(121+i,63);
- }
- for(i=0;i<12;i++)
- {
- dot(123,8+5*i);
- }
- play16(0,0,3,che);
- play16(0,2,3,xiang);
- play16(0,4,3,ren);
- play16(0,6,3,shu);
- // for(i=0;i<7;i++)
- // {
- // if(i<4)
- // {
- // play16(0,i<<1,3,yanyu+(i<<5));
- // }
- // if(i>=4)
- // {
- // play16(1,(i-4)<<1,3,yanyu+(i<<5));
- // }
- // }
- init_ds1302();
- init_time();
- flag5=0;
- do
- {
- KEY_People();
- Display_People();
- if(P3&0x04)
- first=1;
- init_ds1302();
- gettime(&realtime);
- play8(0,2,0,(shu0+(datastring[0]<<4)));
- play8(0,3,0,(shu0+(datastring[1]<<4)));
- play8(0,6,0,(shu0+(datastring[2]<<4)));
- play8(0,7,0,(shu0+(datastring[3]<<4)));
- play8(1,2,0,(shu0+(datastring[4]<<4)));
- play8(1,3,0,(shu0+(datastring[5]<<4)));
- play8(0,0,1,(shu0+(datastring[6]<<4)));
- play8(0,1,1,(shu0+(datastring[7]<<4)));
- play8(0,4,1,(shu0+(datastring[8]<<4)));
- play8(0,5,1,(shu0+(datastring[9]<<4)));
- play8(1,0,1,(shu0+(datastring[10]<<4)));
- play8(1,1,1,(shu0+(datastring[11]<<4)));
- play16(1,4,2,(yi+((datastring[12]-2)<<5)));
- gettemperature();
- if(flagg)
- {
- play8(0,0,2,fu);
- play8(1,6,3,fu);
- }
- else
- {
- clear8(6,4,0);
- play8(1,6,3,zheng);
- }
- play8(0,4+flagg,2,dian);
- play8(0,5+flagg,2,C);
- play8(0,0+flagg,2,(shu0+(temp[0]<<4)));
- play8(0,1+flagg,2,(shu0+(temp[1]<<4)));
- play8(0,2+flagg,2,xiao);
- play8(0,3+flagg,2,(shu0+(temp[2]<<4)));
- play();
- dot(124,3);
- if((k==0x02)&&((P3&0x04)==0x04))
- {
- count1++;
- if(count1==7)
- count1=0;
- switch (count1)
- {
- case 0:
- {
- play16(1,0,2,xing);
- play16(1,2,2,qi);
- k=0;break;
- }
-
- case 1:
- {
- play16_fb(0,4,0);
- k=0; break;
- }
- case 2:
- {
- play16(0,4,0,nian);
- play16_fb(1,0,0);
- k=0;break;
- }
- case 3:
- {
- play16(1,0,0,yue);
- play16_fb(1,4,0);
- k=0;break;
- }
- case 4:
- {
- play16(1,4,0,ri);
- play16_fb(0,2,1);
- k=0;break;
- }
- case 5:
- {
- play16(0,2,1,shi);
- play16_fb(0,6,1);
- k=0;break;
- }
- case 6:
- {
- play16(0,6,1,fen);
- play16_fb(1,0,2);
- play16_fb(1,2,2);
- k=0;break;
- }
- default:k=0;break;
- }
- }
- if((k==0x03)&&((P3&0x04)==0x04))
- {
- switch(count1)
- {
- case 1:
- {
- setjia(ds1302_year);k=0;break;
- }
- case 2:
- {
- setjia(ds1302_month);k=0;break;
- }
- case 3:
- {
- setjia(ds1302_day);k=0;break;
- }
- case 4:
- {
- setjia(ds1302_hour);k=0;break;
- }
- case 5:
- {
- setjia(ds1302_minute);k=0;break;
- }
- case 6:
- {
- setjia(ds1302_week);k=0;break;
- }
- }
- }
- if((k==0x01)&&((P3&0x04)==0x04))
- {
- switch(count1)
- {
- case 1:
- {
- setjian(ds1302_year);k=0;break;
- }
- case 2:
- {
- setjian(ds1302_month);k=0;break;
- }
- case 3:
- {
- setjian(ds1302_day);k=0;break;
- }
- case 4:
- {
- setjian(ds1302_hour);k=0;break;
- }
- case 5:
- {
- setjian(ds1302_minute);k=0;break;
- }
- case 6:
- {
- setjian(ds1302_week);k=0;break;
- }
- }
- }
- } while(!flag5);
- }
- /*=========================================
- //人數(shù)調(diào)節(jié)按鍵函數(shù)
- =========================================*/
- void KEY_People( void )
- {
- //人數(shù)加
- if( People_KEY_ADD == 0 ) //按鍵按下
- {
- Delay_ms( 2 ); //延時消抖
- if( People_KEY_ADD == 0 ) //再次檢測
- {
- Delay_ms( 2 ); //延時消抖
- while( !People_KEY_ADD ); //松手檢測
- People++;
- if( People >= 9999 )
- {
- People = 9999;
- }
- }
- }
- //人數(shù)減
- if( People_KEY_DEC == 0 ) //按鍵按下
- {
- Delay_ms( 2 ); //延時消抖
- if( People_KEY_DEC == 0 ) //再次檢測
- {
- Delay_ms( 2 ); //延時消抖
- while( !People_KEY_DEC ); //松手檢測
- People--;
- if( People <= 0 )
- {
- People = 0;
- }
- }
- }
- }
- /*=========================================
- //人數(shù)調(diào)節(jié)按鍵函數(shù)
- =========================================*/
- void Display_People( void )
- {
- //顯示千位
- play8(1,0,3,maohao);
- if( People/1000 == 0 )
- {
- play8(1,1,3,shu0);
- }
- if( People/1000 == 1 )
- {
- play8(1,1,3,shu1);
- }
- if( People/1000 == 2 )
- {
- play8(1,1,3,shu2);
- }
- if( People/1000 == 3 )
- {
- play8(1,1,3,shu3);
- }
- if( People/1000 == 4 )
- {
- play8(1,1,3,shu4);
- }
- if( People/1000 == 5 )
- {
- play8(1,1,3,shu5);
- }
- if( People/1000 == 6 )
- {
- play8(1,1,3,shu6);
- }
- if( People/1000 == 7 )
- {
- play8(1,1,3,shu7);
- }
- if( People/1000 == 8 )
- {
- play8(1,1,3,shu8);
- }
- if( People/1000 == 9 )
- {
- play8(1,1,3,shu9);
- }
- //顯示擺位
- if( People%1000/100 == 0 )
- {
- play8(1,2,3,shu0);
- }
- if( People%1000/100 == 1 )
- {
- play8(1,2,3,shu1);
- }
- if( People%1000/100 == 2 )
- {
- play8(1,2,3,shu2);
- }
- if( People%1000/100 == 3 )
- {
- play8(1,2,3,shu3);
- }
- if( People%1000/100 == 4 )
- {
- play8(1,2,3,shu4);
- }
- if( People%1000/100 == 5 )
- {
- play8(1,2,3,shu5);
- }
- if( People%1000/100 == 6 )
- {
- play8(1,2,3,shu6);
- }
- if( People%1000/100 == 7 )
- {
- play8(1,2,3,shu7);
- }
- if( People%1000/100 == 8 )
- {
- play8(1,2,3,shu8);
- }
- if( People%1000/100 == 9 )
- {
- play8(1,2,3,shu9);
- }
- //顯示十位
- if( People%100/10 == 0 )
- {
- play8(1,3,3,shu0);
- }
- if( People%100/10 == 1 )
- {
- play8(1,3,3,shu1);
- }
- if( People%100/10 == 2 )
- {
- play8(1,3,3,shu2);
- }
- if( People%100/10 == 3 )
- {
- play8(1,3,3,shu3);
- }
- if( People%100/10 == 4 )
- {
- play8(1,3,3,shu4);
- }
- if( People%100/10 == 5 )
- {
- play8(1,3,3,shu5);
- }
- if( People%100/10 == 6 )
- {
- play8(1,3,3,shu6);
- }
- if( People%100/10 == 7 )
- {
- play8(1,3,3,shu7);
- }
- if( People%100/10 == 8 )
- {
- play8(1,3,3,shu8);
- }
- if( People%100/10 == 9 )
- {
- play8(1,3,3,shu9);
- }
- //顯示個位
- if( People%10 == 0 )
- {
- play8(1,4,3,shu0);
- }
- if( People%10 == 1 )
- {
- play8(1,4,3,shu1);
- }
- if( People%10 == 2 )
- {
- play8(1,4,3,shu2);
- }
- if( People%10 == 3 )
- {
- play8(1,4,3,shu3);
- }
- if( People%100 == 4 )
- {
- play8(1,4,3,shu4);
- }
- if( People%10 == 5 )
- {
- play8(1,4,3,shu5);
- }
- if( People%10 == 6 )
- {
- play8(1,4,3,shu6);
- }
- if( People%10 == 7 )
- {
- play8(1,4,3,shu7);
- }
- if( People%10 == 8 )
- {
- play8(1,4,3,shu8);
- }
- if( People%10 == 9 )
- {
- play8(1,4,3,shu9);
- }
- }
- /*=========================================
- //主函數(shù)
- =========================================*/
- void main(void)
- {
- P2=0xff;
- TIME_Init();
- choose12864(2);
- init12864();
- clear12864();
-
-
- play16(0,4,2,wnl);
- play16(0,6,2,wnl+32);
- play16(1,0,2,wnl+64);
- while(1)
- {
- play16(0,4,2,wnl);
- play16(0,6,2,wnl+32);
- play16(1,0,2,wnl+64);
- play16_fb(0,4,0);
- play16_fb(0,6,0);
- play16_fb(1,0,0);
-
-
- wannianli();
-
- choose12864(2);
- init12864();
- clear12864();
-
- play16(0,4,2,wnl);
- play16(0,6,2,wnl+32);
- play16(1,0,2,wnl+64);
- }
- }
復制代碼 全部資料51hei下載地址:
DSP_萬年歷.zip
(64.18 KB, 下載次數(shù): 42)
2019-11-20 20:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|