📄 按键.c
字号:
{
uchar data=0,i;
mDS1302IO_Out;
reg+=1;//读标志
mSetDS1302IO;
mClrDS1302RST;
wait;
mClrDS1302SCK;
wait;
wait;
mSetDS1302RST;
wait;
for(i=0;i<8;i++)
{
if(reg&BIT(i))
mSetDS1302IO;
else
mClrDS1302IO;
wait;
mSetDS1302SCK;
wait;
mClrDS1302SCK;
wait;
}
mDS1302IO_In;
wait;
wait;
for(i=0;i<8;i++)
{
if(mTestDS1302IO)
data |= BIT(i);
else
data &= ~BIT(i);
mSetDS1302SCK;
wait;
mClrDS1302SCK;
wait;
}
wait;
mClrDS1302RST;
wait;
return(data);
}
void pDS1302_Init(void)
{
pDS1302_Write(mDS1302_CONTROL_Reg,0x00); //关闭写保护
// pDS1302_Write(mDS1302_SEC_Reg,0x80); //暂停
pDS1302_Write(mDS1302_CHARGER_Reg,0x00); //涓流充电 A9
// pDS1302_Write(mDS1302_HOUR_Reg,0x14); //时
//pDS1302_Write(mDS1302_MIN_Reg,0x25); //分
//pDS1302_Write(mDS1302_SEC_Reg,0x20); //秒
pDS1302_Write(mDS1302_CONTROL_Reg,0x80); //打开写保护
}
void Delay10ms(uchar count)
{
uchar TimeCount;
uint j;
TimeCount = count;
while(TimeCount > 0)
{
for(j=0;j<200;j++)
{;;}
TimeCount--;
}
}
void Com0_Init(void)
{
uint baud;
baud=0x33;
UCSR0B = 0x00; //设置波特率时关闭发送和接收
UBRR0H=(uchar)(baud>>8);
UBRR0L=(uchar)baud;
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); // 8位数据+1位STOP位+无奇偶校验
UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); //允许发送和接收和接收终断使能
}
/*#pragma interrupt_handler ISR_Uart0_Rx:iv_USART0_RXC
uchar ISR_Uart0_Rx(void)
{
uchar temp;
temp=UDR0;
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = temp;
}
*/
//======================================================//
void Uart0_Transmit(uchar data)
{
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = data;
}
void inchour() //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
{
time_array[1]++;
if((time_array[0]==0x02)&&(time_array[1]==0x04))
{
time_array[1]=0x00;
time_array[0]=0x00;
}
if((time_array[0]!=0x02)&&(time_array[1]==0x0A))
{
time_array[0]++;
time_array[1]=0x00;
}
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
void incmin() //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
{
time_array[3]++;
if(time_array[3]==0x0A)
{
time_array[3]=0x00;
time_array[2]++;
if(time_array[2]==0x06)
time_array[2]=0x00;
}
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
void dechour() //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
time_array[1]--;
if((time_array[0]==0x00)&&(time_array[1]==-1))
{
time_array[1]=0x03;
time_array[0]=0x02;
}
if((time_array[0]!=0x00)&&(time_array[1]==-1))
{
time_array[1]=0x09;
time_array[0]--;
}
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
void decmin() //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
time_array[3]--;
if(time_array[3]==-1)
{
time_array[3]=0x09;
time_array[2]--;
if(time_array[2]==-1)
time_array[2]=0x05;
}
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
void canbi0() //参比的正负设置
{ if(leftcount%2==0)
Bmp8x16(0x04,0x38,zhenghao);
else
Bmp8x16(0x04,0x38,fuhao);
}
void incanbizhengshu() //参比的整数加1
{
canbi_array[2]++;
if((canbi_array[1]==0x09)&&(canbi_array[2]==0x09))
{
canbi_array[1]=0x00;
canbi_array[2]=0x00;
}
if((canbi_array[1]!=0x09)&&(canbi_array[2]==0x0A))
{
canbi_array[1]++;
canbi_array[2]=0x00;
}
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
void incanbixiaoshu() //参比的小数加1
{
canbi_array[4]++;
if((canbi_array[3]==0x09)&&(canbi_array[4]==0x09))
{
canbi_array[3]=0x00;
canbi_array[4]=0x00;
}
if((canbi_array[3]!=0x09)&&(canbi_array[4]==0x0A))
{
canbi_array[3]++;
canbi_array[4]=0x00;
}
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
void decanbizhengshu() //参比的整数减1
{
canbi_array[2]--;
if((canbi_array[1]==0x00)&&(canbi_array[2]==-1))
{
canbi_array[1]=0x09;
canbi_array[2]=0x09;
}
if((canbi_array[1]!=0x00)&&(canbi_array[2]==-1))
{
canbi_array[2]=0x09;
canbi_array[1]--;
}
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
void decanbixiaoshu() //参比的小数减1
{
canbi_array[4]--;
if((canbi_array[3]==0x00)&&(canbi_array[4]==-1))
{
canbi_array[3]=0x09;
canbi_array[4]=0x09;
}
if((canbi_array[3]!=0x00)&&(canbi_array[4]==-1))
{
canbi_array[4]=0x09;
canbi_array[3]--;
}
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
void data_init()
{
unsigned char i;
entercount=0;
leftcount=0;
rightcount=0;
position1302=0;
positioncanbi=0x02;
for(i=1;i<5;i++)
canbi_array[i]=0x00;
}
unsigned char getkey(void)
{
unsigned char keycode;
if ((PINB&0XF4)!=0XF4)
{
Delay10ms(35);
if((PINB&0XF4)!=0XF4)
{
keycode=PINB&0XF4;
while((PINB&0XF4)!=0XF4);
}
}
return keycode;
}
unsigned char getkeylock(void)
{
unsigned char keycode;
while((PINB&0xf4)==0xf4);
Delay10ms(35);
if((PINB&0xf4)!=0xf4)
{
keycode=PINB&0XF4;
while((PINB&0XF4)!=0XF4);
}
return keycode;
}
void anjian(void)
{
unsigned char i,key,hour,min,sec;
data_init();
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
while(1)
{
hour=pDS1302_Read(mDS1302_HOUR_Reg); //时
min=pDS1302_Read(mDS1302_MIN_Reg); //分
sec=pDS1302_Read(mDS1302_SEC_Reg); //秒
time_array[0]=hour>>4;
time_array[1]=hour&0x0f;
time_array[2]=min>>4;
time_array[3]=min&0x0f;
time_array[4]=sec>>4;
time_array[5]=sec&0x0f;
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
Draw_NtoArab(0x00,0x58,time_array[4]);
Draw_NtoArab(0x00,0x60,time_array[5]);
//////////////////////键盘部分的程序////////////////////////////
key=getkey();
if(key==enter)
{
if(entercount==0)
{
Draw_NtoArab_rev(0x00,0x28,time_array[0]);
Draw_NtoArab_rev(0x00,0x30,time_array[1]);
while(1)
{
key=getkeylock();
if(key==enter)
{
hh=(time_array[0]<<4)|time_array[1];
mm=(time_array[2]<<4)|time_array[3];
pDS1302_Write(mDS1302_CONTROL_Reg,0x00);
wait;
pDS1302_Write(mDS1302_HOUR_Reg,hh);
pDS1302_Write(mDS1302_MIN_Reg,mm);
pDS1302_Write(mDS1302_CONTROL_Reg,0x80);
wait;
entercount++;
break;
}
else if(key==up)
{
if(position1302==zuo)
inchour();
else
incmin();
}
else if(key==down)
{
if(position1302==zuo)
dechour();
else
decmin();
}
else if(key==left)
{
position1302=zuo;
Draw_NtoArab_rev(0x00,0x28,time_array[0]);
Draw_NtoArab_rev(0x00,0x30,time_array[1]);
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
else
{
position1302=zhong;
Draw_NtoArab_rev(0x00,0x40,time_array[2]);
Draw_NtoArab_rev(0x00,0x48,time_array[3]);
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
}
}
else //进入参比设置
{
Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);
while(1)
{
key=getkeylock();
if(key==enter)
{
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
canbianjian=canbi_array[1]*1000+canbi_array[2]*100+canbi_array[3]*10+canbi_array[4];
break;
}
else if(key==up)
{
if(positioncanbi==can1)
incanbizhengshu();
else
incanbixiaoshu();
}
else if(key==down)
{
if(positioncanbi==can1)
decanbizhengshu();
else
decanbixiaoshu();
}
else if(key==left)
{
positioncanbi=can1;
Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
else
{
positioncanbi=can2;
Draw_NtoArab_rev(0x04,0x58,canbi_array[3]);
Draw_NtoArab_rev(0x04,0x60,canbi_array[4]);
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
}
entercount=0;
}
}
}
}
uint read_max6675(void)
{
uchar i;
uint x=0;
clr_sck;
wait;
clr_cs6675;
wait;
set_sck;
wait;
for(i=0;i<16;i++) //读取转换结果的12位
{
wait;
clr_sck;
if(PINB&0x08)
x|=(1<<(15-i));
wait;
set_sck;
}
x=(x&0x7fff)>>3;
set_cs6675;
return x;
}
void max6675_display(uint x)
{
uint temp[5]={0,0,0,0,0};
uint n=0,m=0;
m=10237.5*x/4095;
temp[0]=m/10000;
n=m-temp[0]*10000;
temp[1]=n/1000;
n=n-temp[1]*1000;
temp[2]=n/100;
n=n-temp[2]*100;
temp[3]=n/10;
n=n-temp[3]*10;
temp[4]=n/1;
Draw_NtoArab(0x02,0x10,temp[0]);
Draw_NtoArab(0x02,0x18,temp[1]);
Draw_NtoArab(0x02,0x20,temp[2]);
Draw_NtoArab(0x02,0x28,temp[3]);
Draw_NtoArab(0x02,0x38,temp[4]);
}
void wendu6675(void)
{ uint t;
Delay10ms(100);
while(1)
{
t=read_max6675();
max6675_display(t);
Delay10ms(100);
}
}
void main()
{
//uint abc;
Initial_MCU(); //初始化mcu
Initial_LCD(); //初始化LCD
//pDS1302_Init();
Clear_DDRAM(0x00,0x07); //清除lcd的所有显示内容
Draw_Menu_Interface(); //绘制主菜单
wendu6675();
//abc=read_max6675();
//ds1302display();
//Com0_Init();
//anjian();
}
/*-----------------------------------------------------------------*-
--------------------END OF FILE------------------------------------
-*-----------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -