⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 tq6963与ATmega128.显示图形和汉字。将图形单元作为汉字来显示。
💻 C
📖 第 1 页 / 共 2 页
字号:
}
//=================端口初始化=================================//  
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 + -