📄 lcd.c
字号:
}
//=================端口初始化=================================//
void port_init(void)
{
//============lcd test setting==============================//
DDRC=0xff; PORTC=0xff;
DDRA=0xff; PORTA=0xff;
DDRD=0xff;PORTD=0xff;
DDRE=0xff;PORTE=0xff;
DDRB=0xff;PORTB=0xff;
DDRF=0xff;PORTF=0xff;
DDRG=0xff;PORTG=0xff;
//============lcd test setting==============================//
//=======logical_out test setting ,data bus mode===========//
/* MCUCR=0x80;
XMCRA=0x00;
//XMCRB=0x02;
DDRC=0xff;
PORTC=0x00;
//UCSR1C&=~BIT(UMSEL1);*/
}
//===================LCD初始化================================//
void lcd_init(void)
{
lcd0(0x9f); /*disp mode*///9c
lcd0(0x84);
lcd0(0x80); /*mode set 80*/
lcd0(0xa4); /*curor high*/
lcd2(0x00,0x00,0x40); /*text start address*/
lcd2(0x10,0x00,0x41); /*text cul*/
lcd2(0x00,0x08,0x42);//lcd2(0x00,0x10,0x42);
lcd2(0x10,0x00,0x43);//lcd2(0x10,0x00,0x43);
//lcd2(0x1c,0x00,0x22); /*cgram首地址 00011 100000000 000 = 1c00h*/
cls(1);
cls(0);
/*RST_CLR();
NOP();//delay(10);
RST_SET();*/
}
//==============================================================
void movto(uint8_t x,uint8_t y, uint8_t t_g) /*t_g 0=text 1=graph*/
{
unsigned int k;
k=y*16+x;
if(t_g) y=(k>>8)+0x08;
else y=k>>8;
lcd2(k,y,0x24);
}
//=============================================================
void xline(uint8_t x, uint8_t y, uint8_t len)
{
movto(x,y,1);
for (;len>0;len--)
{
lcd1(0xff,0xc0);
}
}
//=============================================================
void xlin0( uint8_t x,uint8_t y,uint8_t len)
{
movto(x,y,1);
for (;len>0;len--)
{
lcd1(0x00,0xc0);
}
}
//=============================================================
void yline( uint8_t x, uint8_t y,uint8_t len)
{
uint8_t byt;
byt=x&7;
byt|=0xf8; //byt|=0xF8;
x>>=3;
for(;len>0;len--)
{
movto(x,y,1);y++;
lcd0(byt);
}
}
//================地址==========================================*/
//===============清除屏幕(清所有8K存储空间)===================
void lcd_clear(void)
{
uint16_t cl_count;
lcd2(0x00,0x00,0x24); //设置显示存储器首地址
lcd0(0xb0); //设置自动写状态
for(cl_count=8192;cl_count>0;cl_count--)//32768
{
check_sta3();
wdata(0x00);
// lcd0(0xb0); //进入自动写状态
}
lcd0(0xb2); //关闭自动写状态
}
//=======================write character,ASCII,icon===================================
void put_c(uint8_t x ,uint8_t y,uint8_t chn,uint8_t mode)
{
uint16_t c,i,h,w=0;
const uint8_t *p;
c=y*16+x+0x0800;
if(mode)
{ if(chn<128)
{ h=8;
p=CGram+(chn-0X20)*8;
}
else
{ h=16;w=1;
p=character+(chn-128)*32;}
}
if(!mode)
{
h=11;
p=Icon+chn*11;
}
for(i=0;i<h;i++)
{ lcd2(c,c>>8,0x24);
lcd0(0xb0);//自动写方式
wdata(*p);
p++;
if(w){wdata(*p);p++;}
lcd0(0xb2); //自动写结束
c=c+16;
}
}
void putst(uint8_t x,uint8_t y,uint8_t numb)
{ uint8_t *p=numb;
movt(x,y);
lcd0(0xb0); check_sta3();
while(*p) { wdata(*p-0x20);p++;};
lcd0(0xb2);
}
void put_s(uint8_t x ,uint8_t y,uint8_t *chn,uint8_t mode)
{
uint16_t y0,c,i,h,w=0;
const uint8_t *p;
y0=y;
while(*chn>=0x10)
{ if(*chn<128)
{ h=8;
p=CGram+(*chn-0X20)*8;
}
else
{ h=16;w=1;
p=character+(*chn-128)*32;}
y=y0;
c=y*16+x+0x0800;
for(i=0;i<h;i++)
{ lcd2(c,c>>8,0x24);
y=y0;
lcd0(0xb0);//自动写方式
if(mode){wdata(~(*(char*)p++));}
else {wdata(*(char*)p++);}
if(w)
{ if(mode){wdata(~(*(char*)p++));}
else {wdata(*(char*)p++);}
}
lcd0(0xb2); //自动写结束
c=c+16;
}
x++;
if(w)x++;
chn++;
}
}
/*===============================================================*/
uint8_t strtp[30];
uint8_t strtp1[30];
uint8_t strtp2[30];
void lcd_time(uint8_t x,uint8_t y,uint8_t h,uint8_t m,uint8_t s)
{
uint8_t *t;
t=(uint8_t*)strtp;
*t=h/10+0x30;*++t=h%10+0x30;*++t=':';
*++t=m/10+0x30;*++t=m%10+0x30;*++t=':';
*++t=s/10+0x30;*++t=s%10+0x30;*++t=0;
put_s(x,y,strtp,0);
}
//struct value {float temp;float humi;};
void lcd_temp_humi(uint8_t x,uint8_t y,float tempreture,float humidity)
{
uint8_t *p1,*p2;
uint8_t temp_d,humi_d;
temp_d=(int)(tempreture*10);humi_d=(int)(humidity*10);//temp_d=temp;humi_d=humi;
p1=(uint8_t*)strtp1;p2=(uint8_t*)strtp2;
*p1=temp_d/100+0x30;*++p1=(temp_d%100)/10+0x30;*++p1='.';*++p1=(temp_d%100)%10+0x30;*++p1='C';*++p1='C';*++p1=0;
*p2=humi_d/100+0x30;*++p2=(humi_d%100)/10+0x30;*++p2='.';*++p2=(humi_d%100)%10+0x30;*++p2='%';*++p2='R';*++p2='H';*++p2=0;
put_s(x,y,strtp1,0);put_s(x,y+10,strtp2,0);
}
void strcpy_(uint8_t *s,uint8_t *t)
{
while(*t++=*s++){;}
}
void break_bg(void)
{
port_init();
lcd_init();
lcd_clear();
uint8_t s="CBA";uint8_t t="ABC";
put_c(3,0,1,0);
xline(0,0,16);
yline(7,0,63);
yline(7,0,63);
yline(120,0,63);
xline(1,2,5);
yline(28,3,1);
put_c(3,7,3,0);put_c(3,18,4,0);
put_c(3,26,2,0);
put_c(1,29,5,0);put_c(2,29,6,0);
put_c(3,29,5,0);put_c(4,29,6,0);
put_c(5,29,5,0);put_c(6,29,6,0);
yline(28,40,2);
yline(12,42,1);yline(11,42,1);yline(10,42,1);yline(9,42,1);yline(8,42,1);
xline(2,42,3);
yline(47,42,1);yline(46,42,1);yline(45,42,1);yline(44,42,1);
put_c(1,43,22,0);put_c(2,43,14,0);put_c(3,43,7,0);put_c(4,43,8,0);put_c(5,43,9,0);
put_c(1,54,19,0);put_c(2,54,19,0);put_c(3,54,19,0);
xline(0,63,16);
lcd_time(7,3,11,20,23);
lcd_temp_humi(7,20,12.3,10.0);//lcd_temp_humi(7,15,value.temp,value.humi);
putst(7,30,numb);//put_s(7,40,s,0);strcpy_(s,t);put_s(7,50,s,0);
}
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
//WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
/* reset WDT */
/* Write logical one to WDTOE and WDE */
//WDTCR |= (1<<WDTOE) | (1<<WDE);
WDTCR=0X18; //现在把WDTCH给关掉了
/* Turn off WDT */
WDTCR = 0x00;
//WDTCR=0X17;
}
void motor_start(uint8_t data)
{
switch(data)
{
case TRUCK_IN_P: CS_OUT1();WR_CLR(); PORTA=PORTA&TRUCK_INING;break;
case TRUCK_OUT_P: CS_OUT1();WR_CLR();PORTA=PORTA&TRUCK_OUTING;break;
case EARTH_CLOSE_P: CS_OUT1();WR_CLR(); PORTA=PORTA&EARTH_CLOSING;break;
case EARTH_OPEN_P: CS_OUT1();WR_CLR(); PORTA=PORTA&EARTH_OPENING;break;
case CB_CLOSE_P: CS_OUT1();WR_CLR(); PORTA=PORTA&CB_CLOSING;break;
case CB_OPEN_P: CS_OUT1();WR_CLR(); PORTA=PORTA&CB_OPENING;break;
case FAN1_P: CS_OUT1();WR_CLR(); PORTA=PORTA&FAN1_ING;break;
case FAN2_P: CS_OUT1();WR_CLR(); PORTA=PORTA&FAN2_ING;break;
case HEATER1_P: CS_OUT2();WR_CLR(); PORTA=PORTA&HEATER1_ING;break;
case HEATER2_P: CS_OUT2();WR_CLR(); PORTA=PORTA&HEATER2_ING;break;
case CB_CLOSE_REMOTE_P: CS_OUT2();WR_CLR(); PORTA=PORTA&CB_CLOSE_REMOTING;break;
case CB_OPEN_REMOTE_P: CS_OUT2();WR_CLR(); PORTA=PORTA&CB_OPEN_REMOTING;break;
}
}
void motor_over(uint8_t data)
{
switch(data)
{
case TRUCK_IN_P: CS_OUT1();WR_CLR(); PORTA|=TRUCK_IN_OVER ;break;
case TRUCK_OUT_P: CS_OUT1();WR_CLR(); PORTA|=TRUCK_OUT_OVER ;break;
case CB_CLOSE_P: CS_OUT1();WR_CLR(); PORTA|=CB_CLOSE_OVER ;break;
case CB_OPEN_P: CS_OUT1();WR_CLR(); PORTA|=CB_OPEN_OVER ;break;
case EARTH_CLOSE_P: CS_OUT1();WR_CLR(); PORTA|=EARTH_CLOSE_OVER ;break;
case EARTH_OPEN_P: CS_OUT1();WR_CLR(); PORTA|=EARTH_OPEN_OVER ;break;
case FAN1_P: CS_OUT1();WR_CLR(); PORTA|=FAN1_OVER ;break;
case FAN2_P: CS_OUT1();WR_CLR(); PORTA|=FAN2_OVER ;break;
case HEATER1_P: CS_OUT2();WR_CLR(); PORTA|=HEATER1_OVER ;break;
case HEATER2_P: CS_OUT2();WR_CLR(); PORTA|=HEATER2_OVER;break;
case CB_CLOSE_REMOTE_P: CS_OUT2();WR_CLR(); PORTA|=CB_CLOSE_REMOTE_OVER ;break;
case CB_OPEN_REMOTE_P: CS_OUT2();WR_CLR(); PORTA|=CB_OPEN_REMOTE_OVER ;break;
}
}
void main_control()
{
}
void logical_out_test(void)
{ /* uint8_t i,j;
port_init();
SET_138();
WR_();
CS_1();
PORTA=0X0F; */;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -