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

📄 lcd.c

📁 freesacle的实时操作系统UCOS的开发程序
💻 C
字号:
   /*
 ***************************************************************************************
 * 文件名:  LED.C
 *
 * 功能 :	 
 *
 * 参数说明 : (1)
 *
 * 状态  :
 ****************************************************************************************
 */
 #include "stdlib.h"
 #include "string.h"
 #include <mc9s12dg128.h>
 extern void uart_putchar(unsigned char ch);
 unsigned char Length(char *str);
 void Delay(void);
 void LCD_Init(void);
 void update_lcd_display(void);
 void set_lcd_addr(unsigned char addr_x);
   
void speed_show(unsigned char l,unsigned int i);
 
 unsigned char lcd_dsp_buff[64];
 
 #define Data(data)   (PTH=(unsigned char)(data)) 
 
 /*
 #define RS0    PORTB &=~0x02 
 #define RW0	  PORTB &=~0x08 
 #define E0	    PORTB &=~0x20
 #define RS1    PORTB |=0x02 
 #define RW1	  PORTB |=0x08 
 #define E1	    PORTB |=0x20 
	 */
 #define RS0    PTJ &=~0x01 
 #define RW0	  PTJ &=~0x02 
 #define E0	    PTJ &=~0x40
 #define RS1    PTJ |=0x01 
 #define RW1	  PTJ |=0x02 
 #define E1	    PTJ |=0x40 	 
	 
#define WriteIR_comm   RS0;RW0
#define WriteDR_comm   RS1;RW0
#define ReadAC_comm    RS0;RW1
#define ReadDR_comm    RS1;RW1 

#define LockinB_comm  E1;Delay()
#define LockinE_comm  Delay();E0

#define WriteIR(data)		WriteIR_comm;LockinB_comm;Data(data);LockinE_comm //写指令到IR
#define WriteRAM(data)	WriteDR_comm;LockinB_comm;Data(data);LockinE_comm //写数据到RAM



 
/*------------------------------------------------------------------------------
* LCD初始化
*
*/  																								
 void LCD_Init(void){
       unsigned char i;
       WriteIR(0x01)	;		   //清屏
       for(i=0;i<100;i++)        
       Delay();
       WriteIR(0x02)	;		   //
       WriteIR(0x06)	;		   //显示方式
			 WriteIR(0x0e)	;		   //
			 WriteIR(0x14)	;		   //	
			 WriteIR(0x30)	;
			 WriteIR(0x80)	;			 //打开显示
 }
/*----------------------------------------------------------------------------
*显示字符
*
*/ 
void LCD_display(unsigned char line,char  ch[]){
      
      unsigned char length,i;
      switch(line){
        case 1:WriteIR(0x80);break;
        case 2:WriteIR(0x90);break;
        case 3:WriteIR(0x88);break;
        case 4:WriteIR(0x98);break;
        default:break;
      }     
      length=(unsigned char )Length((char *)ch);   			
       for(i=0;i<length;i++){
           WriteRAM(ch[i]) ;     //写入一个8bit的字符
            Delay();
        if(i>15){
           line++;
           if(line>4)line=1;
           switch(line){
             case 1:WriteIR(0x80);break;
             case 2:WriteIR(0x90);break;
             case 3:WriteIR(0x88);break;
             case 4:WriteIR(0x98);break;
             default:break;	 
           }
         }  
       }
} 
/*-----------------------------------------------------------------------------
*
*/
void set_lcd_addr(unsigned char addr_x)//ac地址的矫正
{
          if ((addr_x>7) && (addr_x<16)) {
            
          WriteIR(addr_x+0x88); 
          }
          else if ((addr_x>15) && (addr_x<24)) {
            WriteIR(addr_x+0x80-8); 
          }
          
          else if ((addr_x>23) && (addr_x<32)) {
            WriteIR(addr_x+0x90-16); 
          }
          else {
            WriteIR(addr_x+0x80); 
          }
          
} 
/*---------------------------------------------------------------------------------
*
* Delay()延时等函数
*
*/
void Delay(void){			    
  unsigned int j,temp;
  temp=0;
  for(j=0;j<900;j++)
    temp++;    
}
/*-----------------------------------------------------------------------------
*
*/
unsigned char Length(char str[]){
  
  		unsigned char i;
  		char temp; 
  		if(str==NULL)return 0;
  		else{ 		  
  		  for(i=0;;i++){
  		    temp=*(str+i);
  		    if(temp=='\0')
  		        break;
  		  }
  		  return i+1 ;
  		}
}
  
void update_lcd_display(void)

  {
    unsigned char i,j;
    
    
    for(i=0;i<32;i++)
      {
       set_lcd_addr(i);
       WriteRAM(lcd_dsp_buff[i+i]) ;     //写入一个8bit的字符
       WriteRAM(lcd_dsp_buff[i+i+1]) ;     //写入一个8bit的字符
      }
    
    
    
  }
  
void speed_show(unsigned char l,unsigned int i)
  {
  
   unsigned char j,k;
   unsigned int a,b;
   
   

   
 a=i;
 for(j=0;j<5;j++) {
 a=a/10;
    if(!a)
     break;
 }
 b=1;
 k=j;
 for (;j>0;j--)
 b=b*10;
 for(;k>0;k--) {
   a=i/b;
   i=i%b;
   b=b/10;
   j=a;
   lcd_dsp_buff[l]=j+0x30;
   l++;
 }
 lcd_dsp_buff[l]=i+0x30;
 
 for(j=0;j<3;j++)
  {
  l++;
  lcd_dsp_buff[l]=' ';
    
  }
// update_lcd_display();  
  }

⌨️ 快捷键说明

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