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

📄 lcd.c

📁 数字万用表芯片MAX134的驱动,包括一些资料,知识源于网络
💻 C
字号:

#include "HARD_CENECT.H"
#include<intrins.h>
#define uchar unsigned char 

#define    clr       0x01   //清屏
#define    byte      unsigned char

void lcd_int(void);
void check_busy(void);
void write_command(byte cm);
void write_lcd_data(byte disp);
void write_LCD(byte shuju,bit C_or_D);
void change_data(void);
void lcd_delay(void);
void lcd_delay_nms(unsigned int n); 
void printch(byte adress,byte *ch);


unsigned char LCD_DATA;   

/****************************************
*涵数名:printch()
*涵数功能:在指的位置开始显示字符
*****************************************/
void printch(byte adress,byte *ch)
{
write_command(adress);
while(*ch)
 {
 write_lcd_data(*ch);   
 ch ++;
 }
}

/****************************************
*涵数名:printc()
*涵数功能:在指的位置显示单个字符
*****************************************/
void printc(byte adress,byte disp_data)
{
write_command(adress);
write_lcd_data(disp_data);
}
/*************************
*涵数名:lcd_int()
*涵数功能:初始化LCD
**************************/
void lcd_int(void)
{
write_command(0x30); 
lcd_delay_nms(5);
write_command(0x30);
lcd_delay_nms(5);
write_command(0x28);     
lcd_delay_nms(5);
write_command(0x28);
lcd_delay_nms(5);
write_command(0x28);
lcd_delay_nms(5);
write_command(0x80);
lcd_delay_nms(5);
write_command(0x01);
lcd_delay_nms(5);
write_command(0x0C);
lcd_delay_nms(5);
}

/*************************
*涵数名:check_busy()
*涵数功能:检查LCD是否为忙
**************************/
void check_busy(void)
{
 bit i=1;    //定义判断标志位
 LCD_E=0;    //去使能信号
 RS=0;       //传送命令数据
 RW=1;       //此时为读
 DATA7=1;
 LCD_E=1;    //高四位移出
 do{;}
 while(DATA7!=0);
 LCD_E=0;
}

/*************************
*涵数名:write_command()
*涵数功能:写入命令
**************************/
void write_command(byte cm)
{
 write_LCD(cm,0);               //送命令时RS=0
}
/*************************
*涵数名:write_lcd_data()
*涵数功能:写入显示数据
**************************/
void write_lcd_data(byte disp)
{
 write_LCD(disp,1);            //送数据时RS=1
}
/**************************
*涵数名:write_LCD()
*涵数功能:写数据到LCD,C_or_D
*表示是命令还是显示数据
***************************/
void write_LCD(byte shuju,bit C_or_D)
{
 unsigned char i;
 check_busy();
 RS=C_or_D;
 RW=0;
 LCD_E=0;
 LCD_DATA=shuju;
 for(i=0;i<2;i++)
 { 
   change_data();
   LCD_E=1;
   lcd_delay();
   LCD_E=0;   
 }
}
/*************************
*涵数名:change_data()
*涵数功能:将要送入的数据转换
*成4BIT格式并送入4条数据线
*要求两次转换是连续的就不用
*重新装入数据
**************************/
void change_data(void)
{
    if((LCD_DATA&0x80)==0x80)
      DATA7=1;
    else
      DATA7=0;
    LCD_DATA=LCD_DATA<<1;
    if((LCD_DATA&0x80)==0x80)
      DATA6=1;
    else
      DATA6=0;
    LCD_DATA=LCD_DATA<<1;
    if((LCD_DATA&0x80)==0x80)
      DATA5=1;
    else
      DATA5=0;
    LCD_DATA=LCD_DATA<<1;
    if((LCD_DATA&0x80)==0x80)
      DATA4=1;
    else
      DATA4=0; 
    LCD_DATA=LCD_DATA<<1;
}
/*********************************************************
*涵数名:lcd_delay_nms(unsigned int n)
*涵数功能:延时N MS
*
*********************************************************/
void lcd_delay_nms(unsigned int n)      
{
    unsigned int i=0,j=0;
    for (i=n;i>0;i--)
     for (j=0;j<1140;j++);  
}
/*********************************************************
*涵数名:lcd_delay()
*涵数功能:延时N MS
*
*********************************************************/
void lcd_delay(void)
{
byte i;
for(i=0;i<40;i++);
}



⌨️ 快捷键说明

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