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

📄 lcd.c

📁 tq6963与ATmega128.显示图形和汉字。将图形单元作为汉字来显示。
💻 C
📖 第 1 页 / 共 2 页
字号:
    
	 #include <lib/avrx.h>
	 #include <lib/iom128v.h>
     #include <lib/macros.h>
	 #include <lib/_const.h>
	 #include <lib/STDIO.h>
	 #include <lib/STRING.h>
     #include <lib/ziku.h>	
	 #include <lib/pgmspace.h>
	 #include <lib/stdint.h>
	 #include <lib/delay.h>
//==========================================================================================

 /********************the definition of  functions about  lcd *************************
   128x64点阵液晶程序,编译软件ICCAVR-6.31A
接线图如下
    |--1-------|FG  |--2-------|VSS     |--3-------|VDD    |--4-------|VEE  
	|--5-------|WR-------PD4    |--6-------|RD-------PD5   |--7-------|CE-------PE2   
    |--8-------|CD-------PE3    |--9-------|RST------PD6   |--10------|DB0------PA0    
	|--11------|DB1------PB1    |--12------|DB2------PB2   |--13------|DB3------PB3
    |--14------|DB4------PB4    |--15------|DB5------PB5   |--16------|DB6------PB6
    |--17------|DB7------PB7    |--18------|FS    |--19------|LED- |--20------|LED+          */
   //================================================================================*/
     //读信号
     #define LCD_RD_CLR()    PORTD&=~(1<<PD5);DDRD|=(1<<5)
     #define LCD_RD_SET()    PORTD|=(1<<PD5);DDRD|=(1<<5)
     //写信号
     #define LCD_WR_CLR()    PORTD&=~(1<<PD4);DDRD|=(1<<4)
     #define LCD_WR_SET()    PORTD|=(1<<PD4); DDRD|=(1<<4)
     //片选信号
     #define CE_CLR()    PORTE&=~(1<<PE2);DDRE|=(1<<2)
     #define CE_SET()    PORTE|=(1<<PE2); DDRE|=(1<<2)
     //数据命令信号
     #define CD_CLR()    PORTE&=~(1<<PE3);DDRE|=(1<<3)
     #define CD_SET()    PORTE|=(1<<PE3); DDRE|=(1<<3)
     //复位信号
     #define RST_CLR()   PORTD&=~(1<<PD6);DDRD|=(1<<6)
     #define RST_SET()   PORTD|=(1<<PD6); DDRD|=(1<<6)
	 #define movt(x,y) 	lcd2((y*30)+x,(y*30)+x>>8,0x24);
	 
	 //#define RST_CLR()   PORTD&=~(1<<PD6);DDRD|=(1<<6)
    #define SET_138()     PORTC|=(1<<PC5);
    #define CLR_138()     PORTC&=~(1<<PC5);
	#define CS_LED()      PORTC&=~(1<<PC2); PORTC&=~(1<<PC1);PORTC&=~(1<<PC0)
	#define CS_OUT1()     PORTC&=~(1<<PC2); PORTC|=(1<<PC1); PORTC&=~(1<<PC0)  
	#define CS_OUT2()     PORTC&=~(1<<PC2); PORTC|=(1<<PC1); PORTC|=(1<<PC0)
	#define CS_INPUT1()   PORTC|=(1<<PC2); PORTC&=~(1<<PC1); PORTC&=~(1<<PC0)
	#define CS_INPUT2()   PORTC|=(1<<PC2); PORTC&=~(1<<PC1); PORTC|=(1<<PC0)
	#define CS_INPUT3()   PORTC|=(1<<PC2); PORTC|=(1<<PC1);  PORTC&=~(1<<PC0)
	
	 
    #define WR_SET()      PORTG|=(1<<PG0); DDRG|=(1<<0)
	#define WR_CLR()      PORTG&=~(1<<PG0);DDRG|=(1<<0)
	#define RD_SET()      PORTG|=(1<<PG1); DDRG|=(1<<1)
	#define RD_CLR()      PORTG&=~(1<<PG1);DDRG|=(1<<1)
	 
	#define  sta0_bit   PORTA0
    #define  sta1_bit   PORTA1
    #define  sta2_bit   PORTA2
    #define  sta3_bit   PORTA3	
	
	#define  FAN2_C       0XFE
	#define  FAN1_C       0XFD
	#define  CB_OPEN      0XFB
	#define  CB_CLOSE     0XF7
	#define  EARTH_OPEN   0XEF
	#define  EARTH_CLOSE  0XDF
	#define  TRUCK_OUT    0XBF
	#define  CB_OPEN_REMOTE  0XF7
	#define  CB_CLOSE_REMOTE  0XEF
	#define  HEATER1_C        0XDF
	#define  HEATER2_C        0XBF
	
	#define  LED_RUN         0XFD
	#define  LED_WARNING     0XFB
	#define  LED_CLOSE       0XF7
	#define  LED_OPEN        0XEF
	#define  LED_COMUNIC     0XDF
	#define  LED_6           0XBF
	
	#define  KEY_RIGHT       0XFE
	#define  KEY_ESC         0XFD
	#define  KEY_DOWN        0XFB
	#define  KEY_ENT         0XF7
	#define  KEY_UP          0XEF
	#define  KEY_LEFT        0XDF
	
	#define  TRUCK_TEST      0XFE
	#define  CHARGED         0XFE
	#define  STANDBY_IN3     0XFE
	
	#define  TRUCK_MID           0XFD
	#define  FRONT_DOOR_CLOSE    0XFD
	#define  STANDBY_IN4         0XFD
	
	#define  TRUCK_WORK           0XFB
	#define  BACK_DOOR_CLOSE      0XFB
	#define  STANDBY_IN5          0XFB
	
	#define  TRUCK_ENWORK         0XF7
	#define  MANUAL_CHARG         0XF7
	#define  STANDBY_IN6          0XF7
	
	#define  EARTH_OPEN           0XEF
	#define  CB_CLOSE_state       0XEF
	#define  STANDBY_IN7          0XEF
	
	#define  EARTH_CLOSE          0XDF
	#define  CB_OPEN_state              0XDF
	
	#define  CB_STATA_OPEN        0XBF
	#define  STANDBY_IN1          0XBF
	#define  STANDBY_IN9          0XBF
	
	#define  CB_STATA_CLOSE       0X7F
	#define  STANDBY_IN2          0X7F
	
	#define  FRONT_DOOR_NO_CLOSE  0XFFFE	
	#define  BACK_DOOR_NO_CLOSE   0XFFFD	
	#define  NO_CHARGED           0XFFFB	
	#define  CB_POSITION_ERROR    0XFFF7	
	#define  EARTH_POSITION_ERROR 0XFFEF	
	#define  TRUCK_IN_ERROR       0XFFDF	
	#define  TRUCK_OUT_ERROR      0XFFBF	
	#define  NOT_OPERATION_ERATH  0XFF7F
	#define  EARTH_OPEN_ERROR     0XFEFF
	#define  EARTH_CLOSE_ERROR    0XFDFF
	#define  TRUCK_POSITION_ERROR 0XFBFF
	#define  CB_OPEN_ERROR        0XF7FF
	#define  CHARG_ERROR          0X7FFF
	#define  CB_CLOSE_ERROR       0XEFFF
	#define  OBJECTIVE_POSITION   0XDFFF
	#define  LIFE_OVER            0XBFFF

	#define  TRUCK_IN_P            0
	#define  TRUCK_OUT_P           1
	#define  EARTH_CLOSE_P         2
	#define  EARTH_OPEN_P          3
	#define  CB_CLOSE_P            4
	#define  CB_OPEN_P             5
	#define  FAN1_P                6
	#define  FAN2_P                7
	#define  HEATER1_P            8
	#define  HEATER2_P            9
	#define  CB_CLOSE_REMOTE_P     10
	#define  CB_OPEN_REMOTE_P      11
	
	#define  TRUCK_INING           0X7F
	#define  TRUCK_OUTING          0XBF
	#define  EARTH_CLOSING         0XDF
	#define  EARTH_OPENING         0XEF
	#define  CB_CLOSING            0XF7
	#define  CB_OPENING            0XFB	
	#define  FAN1_ING              0XFD
	#define  FAN2_ING              0XFE
	#define  HEATER1_ING           0XF7
	#define  HEATER2_ING           0XFB
	#define  CB_CLOSE_REMOTING     0XFD
	#define  CB_OPEN_REMOTING      0XFE
	
	#define  TRUCK_IN_OVER         0X80
	#define  TRUCK_OUT_OVER        0X40	
	#define  EARTH_CLOSE_OVER      0X20
	#define  EARTH_OPEN_OVER       0X10
	#define  CB_CLOSE_OVER         0X8
	#define  CB_OPEN_OVER          0X4
	#define  FAN1_OVER             0X2
	#define  FAN2_OVER             0X1
	#define  HEATER1_OVER          0X8
	#define  HEATER2_OVER          0X4
	#define  CB_CLOSE_REMOTE_OVER  0X2
	#define  CB_OPEN_REMOTE_OVER   0X1
	
	
	const uint16_t warning_1,warning_2;   
	
	/*#define  P_out1 (*(volatile unsigned char *)0x2300) 
	#define  P_out2 (*(volatile unsigned char *)0x2400)
	#define  P_out3 (*(volatile unsigned char *)0x2500) 
	#define  P_out4 (*(volatile unsigned char *)0x2600)
	#define  P_out5 (*(volatile unsigned char *)0x2200) */
	
    unsigned char relay_set[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 

	 


const prog_uint8_t   BREAKPT=2;
	 
 
void  delay1ms(void)
{
 	 uint8_t i;
	 for(i=0;i<1000;i++){;}
}
//===============================================
void  delay(uint16_t n)
{
 	uint16_t i;
	/*while(i<n)
	{
	  delay1ms();
	  i++;
	}*/
	for(i=0;i<1000;i++){delay1ms();}
}
//写数据
//=================================================*/
void  wdata(uint8_t data)            
{ 
  //DDRC=0xff;  //A口方向为输出 
  //PORTC=0xff;
  DDRB=0xff;  //A口方向为输出 
  PORTB=0xff;
  //CE_CLR();
  CD_CLR();   //write data
  LCD_RD_SET();
  LCD_WR_CLR();   //上升沿写入
  NOP();//delay(10);
  PORTB=data;
  NOP();NOP();//delay(20);
  LCD_WR_SET(); 
 // CE_SET();
 // delay(100);
 // CD_SET();
}

//写命令===============================================*/
void  lcd0(uint8_t com)              
{
 // DDRC=0xff;   //A口方向为输出
 // PORTC=0xff;
  DDRB=0xff;  //A口方向为输出 
  PORTB=0xff;
  // CE_CLR();
  CD_SET();    //wite com
 // delay(100); 
  LCD_RD_SET();
  LCD_WR_CLR();
  NOP();// delay(10);
  PORTB=com;
  NOP();NOP();//delay(20);
  LCD_WR_SET();
  //CE_SET();
 }

//=================================================================*/
void lcd1(uint8_t data ,uint8_t com)
{     
    wdata(data);    
    lcd0(com);
}
//================================================================================
void lcd2(uint8_t data,uint8_t datb,uint8_t com)
{
 	  	 wdata(data);
 	 	 wdata(datb);
 	  	 lcd0(com);
}
//====================读取LCD状态字========================================
 uint8_t readstate(void)
 {
    uint8_t lcd_state;
   	//CE_SET();
    CD_SET(); 	  //C/D=1
	LCD_RD_SET(); 	  //RD=1
	LCD_WR_SET();     //WR=1
	DDRB=0x00;
	LCD_RD_CLR();     //RD=0
	NOP();//delay(10);
	lcd_state=PINB;
	  // 读取引脚A物理电平
    NOP();NOP();//delay(20);
    LCD_RD_SET();    //RD=1
    return lcd_state;
 }
  //============判断指令(数据)读写状态================================
  void check_sta01(void)
 {
     while((readstate()&0x03)!=3);
 }
  //============判断数据自动读状态======================================
  void check_sta2(void)
 {
     while((readstate()&0x04)!=4);
 }
 //============判断数据自动写状态=======================================
 void  check_sta3(void)
 {
    while((readstate()&0x08)!=8);
 }

//===================================================================
void cls( uint8_t mode)
{  
	uint16_t i;
	check_sta01();
	if(mode)	lcd2(0x00,0x08,0x24);
	else    	lcd2(0x00,0x00,0x24);	
	lcd0(0xb0);
	//check_sta01();
	i=16*64;
	do{wdata(0x00);}while(i--);	  
	lcd0(0xb2);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -