標題:
單片機車型空調控制系統(tǒng)程序+萬年歷Proteus仿真
[打印本頁]
作者:
lufeiboy
時間:
2019-11-20 20:35
標題:
單片機車型空調控制系統(tǒng)程序+萬年歷Proteus仿真
7U$EPZDK~[EKBC5355@PM]J.png
(69.53 KB, 下載次數: 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; //人數加按鍵
sbit People_KEY_DEC = P1^1; //人數減按鍵
int People = 0; //人數值,默認為0
uchar k,direction;
bit flag;
bit flag5=0; //flag5是外部中斷1的標志位 flag1是步進標志
uchar p,dengji; //定時次數
bit flag1=0;
systemtime realtime;
bit first=1; //中斷次數控制
void Display_People(void);
void KEY_People(void);
/*=========================================
//定時器中斷,
=========================================*/
void dingshi() interrupt 1 using 1 //定時程序.產生步進時間
{
if(p--)
{
TL0=0;
TH0=0xa0;
flag1=0;
}
else
{
flag1=1;
TL0=0;
TH0=0x00;
p=20-(dengji>>1);
}
}
/*=========================================
//中斷函數 ,用于檢測時間調節(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);
}
/*=========================================
//人數調節(jié)按鍵函數
=========================================*/
void KEY_People( void )
{
//人數加
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;
}
}
}
//人數減
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;
}
}
}
}
/*=========================================
//人數調節(jié)按鍵函數
=========================================*/
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);
}
}
/*=========================================
//主函數
=========================================*/
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, 下載次數: 42)
2019-11-20 20:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1