#include "stc15f2k60s2.h"
#include "intrins.h"
#include "stdio.h"
#include "onewire.h"
#include "ds1302.h"
#include "iic.h"
#define uchar unsigned char
#define uint unsigned int
extern unsigned char shijian[7];
//LED开关
uchar led_bit=0xff;
#define led_on(n) {led_bit&=_crol_(0xfe,n-1);P0=led_bit;P2|=0x80;P2&=0x9f;P2&=0x1f;}
#define led_off(n){led_bit|=_crol_(0x01,n-1);P0=led_bit;P2|=0x80;P2&=0x9f;P2&=0x1f;}
uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,\
0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,\
0XBF,0XFF,0XC6,0x86,0X8C};
uchar Digbuf[]={0,1,2,3,4,5,6,7};
uchar Digcom=0;
void Allinit();
void delayms(uint ms);
void Timer2Init(void);
void GID_Show();
void keyscan16();
void LED_Show();
uint wendu=0;
uchar inter_face1=0; //数据,参数界面切换
uchar inter_face2=0; //数据子界面
uchar inter_face3=0;//参数子界面
uchar voltage=0;
char shi_can=17; //小时参数
char wen_can=25; //温度参数
char led_can=4; //指示灯参数
uint tt1=0,tt2=0;
void main(void)
{
Allinit();
Timer2Init();
DS_init();
while(1)
{
voltage=AD_Read(0x01); //光敏分压
voltage=AD_Read(0x01);
wendu=Temper_Get();
DS_Get();
LED_Show();
keyscan16();
GID_Show();
}
}
void GID_Show()
{
if(inter_face1==0) //数据界面
{
if(inter_face2==0) //时间数据显示
{
Digbuf[0]=shijian[2]/10;Digbuf[1]=shijian[2]%10;Digbuf[2]=20;
Digbuf[3]=shijian[1]/10;Digbuf[4]=shijian[1]%10;Digbuf[5]=20;
Digbuf[6]=shijian[0]/10;Digbuf[7]=shijian[0]%10;
}
else if(inter_face2==1) //温度数据显示
{
Digbuf[0]=22;Digbuf[1]=21;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;
Digbuf[5]=wendu/1000;Digbuf[6]=wendu%1000/100+10;Digbuf[7]=wendu%100/10;
}
else if(inter_face2==2)
{
Digbuf[0]=23;Digbuf[1]=21;Digbuf[2]=voltage/100+10;Digbuf[3]=voltage%100/10;Digbuf[4]=voltage%10;
Digbuf[5]=21;Digbuf[6]=21;
if(voltage<50){Digbuf[7]=1;} //暗
else Digbuf[7]=0; //亮
}
}
else if(inter_face1==1) //参数界面
{
if(inter_face3==0) //时间参数
{
Digbuf[0]=24;Digbuf[1]=1;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;
Digbuf[6]=shi_can/10;Digbuf[7]=shi_can%10;
}
else if(inter_face3==1) //温度参数
{
Digbuf[0]=24;Digbuf[1]=2;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;
Digbuf[6]=wen_can/10;Digbuf[7]=wen_can%10;
}
else if(inter_face3==2) //指示灯参数
{
Digbuf[0]=24;Digbuf[1]=2;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;Digbuf[6]=21;
Digbuf[7]=led_can;
}
}
}
void LED_Show()
{
if(shi_can<=7)
{
if((shijian[2]>=shi_can)&&(shijian[2]<=8)){led_on(1);}
else {led_off(1);}
}
else if(shi_can>7)
{
if(((shijian[2]>=shi_can)&&(shijian[2]<=23))||((shijian[2]>=0)&&(shijian[2]<=8))){led_on(1);}
else {led_off(1);}
}
if(wendu<wen_can*100){led_on(2);} //温度
else {led_off(2);}
if(voltage<50) //暗
{
if(led_can==4){led_on(4);led_off(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==5){led_off(4);led_on(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==6){led_off(4);led_off(5);led_on(6);led_off(7);led_off(8);}
else if(led_can==7){led_off(4);led_off(5);led_off(6);led_on(7);led_off(8);}
else if(led_can==8){led_off(4);led_off(5);led_off(6);led_off(7);led_on(8);}
}
}
void keyscan16()
{
P44=0;P42=1;
if(P32==0)//s5 子界面切换
{
delayms(5);
if(P32==0)
{
if(inter_face1==0) //数据界面
{
if(inter_face2==0){inter_face2=1;}
else if(inter_face2==1){inter_face2=2;}
else if(inter_face2==2){inter_face2=0;}
}
else if(inter_face1==1) //参数界面
{
if(inter_face3==0){inter_face3=1;}
else if(inter_face3==1){inter_face3=2;}
else if(inter_face3==2){inter_face3=0;}
}
}
while(!P32);
}
else if(P33==0) //s4 数据,参数界面切换
{
delayms(5);
if(P33==0)
{
if(inter_face1==0){inter_face1=1;inter_face3=0;}
else if(inter_face1==1){inter_face1=0;inter_face2=0;}
}
while(!P33);
}
P44=1;P42=0;
if(P32==0) //s9 +
{
delayms(5);
if(P32==0)
{
if(inter_face1==1)//参数界面加
{
if(inter_face3==0)//小时参数 00-23
{
shi_can++;
if(shi_can>=23)shi_can=23;
}
else if(inter_face3==1) //温度参数 00-99
{
wen_can++;
if(wen_can>=99)wen_can=99;
}
else if(inter_face3==2)//指示灯参数 4-8
{
led_can++;
if(led_can>=8)led_can=8;
}
}
}
while(!P32);
}
else if(P33==0) //s8 —
{
delayms(5);
if(P33==0)
{
if(inter_face1==1)//参数界面加
{
if(inter_face3==0)//小时参数 00-23
{
shi_can--;
if(shi_can<=0)shi_can=0;
}
else if(inter_face3==1) //温度参数 00-99
{
wen_can--;
if(wen_can<=0)wen_can=0;
}
else if(inter_face3==2)//指示灯参数 4-8
{
led_can--;
if(led_can<=4)led_can=4;
}
}
}
while(!P33);
}
}
void Timer2Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x20; //设置定时初值
T2H = 0xD1; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0X04;
EA=1;
}
void timer2() interrupt 12
{
P0=0XFF;
P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=0XFF;
P2|=0XE0;P2&=0XFF;P2&=0X1F;
P0=(1<<Digcom);
P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=tab[Digbuf[Digcom]];
P2|=0XE0;P2&=0XFF;P2&=0X1F;
if(++Digcom==8)Digcom=0;
if(voltage<50) //暗
{
tt2=0;
tt1++;
if(tt1>=3000)
{
tt1=0;
led_on(3);
}
}
else //亮
{
tt1=0;
tt2++;
if(tt2>=3000)
{
tt2=0;
led_off(3);
}
}
if(voltage<50) //暗
{
if(led_can==4){led_on(4);led_off(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==5){led_off(4);led_on(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==6){led_off(4);led_off(5);led_on(6);led_off(7);led_off(8);}
else if(led_can==7){led_off(4);led_off(5);led_off(6);led_on(7);led_off(8);}
else if(led_can==8){led_off(4);led_off(5);led_off(6);led_off(7);led_on(8);}
}
else {led_off(4);led_off(5);led_off(6);led_off(7);led_off(8);}
}
void Allinit()
{
P0=0X00;P2|=0XA0;P2&=0XBF;P2&=0X1F;
P0=0XFF;P2|=0X80;P2&=0X9F;P2&=0X1F;
P0=0XFF;P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=0XFF;P2|=0XE0;P2&=0XFF;P2&=0X1F;
}
void delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
蓝桥杯单片机第十一届国赛
最新推荐文章于 2023-07-28 15:09:45 发布