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

📄 p89lpc934_for_lm240128r.txt

📁 P89LPC934_for_ LM240128R的驱动程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
  
/********************************************************************/   
//                        LM240128R驱动程序                          
                                                  
//资源分配:P89LPC934  7.373M内晶振                                             
//                                                                        
//P0.0--P0.7:为液晶D0--D7口    
//                               
//P1.0--P1.7:预留                          
//                                                                                                         
//P2.0--P2.1:接LM240128R液晶/WR  /RD端                             
//P2.2--P2.3: 预留    
//P2.4--P2.7: 接LM240128R液晶 /RST  BUSY  /RS  /CS 端      
   
//receive_num[0]、receive_num[1]:0中1英    
//receive_num[2]、receive_num[3]:显示页码    
//receive_num[4]、receive_num[5]:1号电池电压,先发低位    
//receive_num[6]、receive_num[7]:2号电池电压,先发低位    
//receive_num[8]、receive_num[9]:3号电池电压,先发低位    
//receive_num[10]、receive_num[11]:4号电池电压,先发低位    
//receive_num[12]、receive_num[13]:5号电池电压,先发低位    
//receive_num[14]、receive_num[15]:6号电池电压,先发低位    
//receive_num[16]、receive_num[17]:7号电池电压,先发低位    
//receive_num[18]、receive_num[19]:8号电池电压,先发低位    
//receive_num[20]、receive_num[21]:9号电池电压,先发低位    
//receive_num[22]、receive_num[23]:10号电池电压,先发低位    
//receive_num[24]、receive_num[25]:11号电池电压,先发低位    
//receive_num[26]、receive_num[27]:12号电池电压,先发低位    
//receive_num[28]、receive_num[29]:13号电池电压,先发低位    
//receive_num[30]、receive_num[31]:14号电池电压,先发低位    
//receive_num[32]、receive_num[33]:1号电池温度,先发低位    
//receive_num[34]、receive_num[35]:2号电池温度,先发低位    
//receive_num[36]、receive_num[37]:充电电流,先发低位    
//receive_num[38]、receive_num[39]:错误代码 0表示正常    
   
                 
/********************************************************************/   
#include <REG932.H>    
//#include <INTRINS.H>    
   
/**********端口宏定义**********/   
#define uchar  unsigned char    
///////////////////////////////    
/*  LM240128R液晶端口宏定义  */   
///////////////////////////////    
#define lcd_data  P0 //设置8位数据输入口    
sbit lcd_wr=P2^0;    //设置写控制口    
sbit lcd_rd=P2^1;    //设置读控制口    
sbit lcd_cs=P2^7;    //设置片选控制口    
sbit lcd_rs=P2^6;    //设置命令数据选择控制口    
sbit lcd_rst=P2^4;   //设置复位控制口    
   
   
/***********函数申明***********/   
void port_init(void);   
void delay_3_3us(unsigned int delay_us_time);   
void delay_ms(unsigned int delay_ms_time);   
void lcd_cmd_send(uchar lcd_command);   
void lcd_data_send(uchar lcd_data_num);   
void lcd_clean(void);   
void lcd_text_display(uchar *text_display);   
void lcd_num_display(long int num_display);   
void lcd_float_display(float float_display);   
void lcd_init(void);   
void rtc_init();   
void page1_cn(void);   
void page1_en(void);   
void page2_cn(void);   
void page2_en(void);   
void time_display(void);   
   
/***********全局变量***********/   
unsigned int timea0=0;     //时间显示变量    
uchar timea_s=0,timea_m=0,timea_h=0;   
uchar language=0;                   //语言标志:0中文 1英文    
uchar page=0;                       //显示页面    
uchar uart_temp=0;                  //串口接收变量    
uchar receive_num[40];              //串口缓冲区    
uchar num_flag=0;                   //缓冲区位置标志    
uchar flag0=0;   
unsigned int num_m;                 //显示变量    
float num_x;                        //显示变量    
unsigned int xtime=0;               //循环变量    
   
/**********端口初始化**********/   
void port_init(void)   
{   
  P0M1=0x00;//为液晶D0--D7口    
  P0M2=0x00;   
   
  P1M1=0x00;//双向I/O口    
  P1M2=0x00;   
   
  P2M1=0x00;//P2^0--/WR  P2^1--/RD  P2^4--/RST  P2^6--/RS  P2^7--/CS  为准双向口    
  P2M2=0x00;      
     
  P3M1=0x00;//双向I/O口    
  P3M2=0x00;   
}   
   
/**********3.3us软件延时**********/   
void delay_3_3us(unsigned int delay_us_time)   
{   
 unsigned int delay_us_x;   
 for(delay_us_x=0;delay_us_x<DELAY_US_TIME;DELAY_US_X++) while(*text_display { *text_display) lcd_text_display(uchar void **********LCD显示文本********** } lcd_cs="0;" lcd_rs="0;" lcd_wr="0;" 极限值为15us delay_3_3us(6); lcd_data="lcd_command;" lcd_data_num) lcd_data_send(uchar **********LCD写数据********** lcd_command) lcd_cmd_send(uchar **********LCD写命令********** {lcd_data_send(0x00);} for(lcd_clean_y="0;lcd_clean_y<128;lcd_clean_y++)" for(lcd_clean_x="0;lcd_clean_x<30;lcd_clean_x++)" lcd_cmd_send(0x70);lcd_cmd_send(0x00); lcd_cmd_send(0x60);lcd_cmd_send(0x00); lcd_clean_y; uchar lcd_clean_x; lcd_clean(void) **********LCD清屏********** 1倍字体大小 lcd_cmd_send(0xf1);lcd_cmd_send(0x0f); 自动解码,可以显示中文 lcd_cmd_send(0xf0);lcd_cmd_send(0xa0); 设置时钟信号周期(刷新率,数值越小刷新越快) lcd_cmd_send(0x90);lcd_cmd_send(0x06); 显示时候的基本设置 lcd_cmd_send(0x10);lcd_cmd_send(0x68); 光标高度,行距 lcd_cmd_send(0x11);lcd_cmd_send(0x10); 参数要求 lcd_cmd_send(0x81);lcd_cmd_send(0x40); 正常模式,文本,显示开,不闪烁,反白 lcd_cmd_send(0x00);lcd_cmd_send(0xcc); 设置显示视窗顶部位置 lcd_cmd_send(0x51);lcd_cmd_send(0x00); 设置显示视窗左边位置 lcd_cmd_send(0x41);lcd_cmd_send(0x00); 设置显示视窗底部位置 lcd_cmd_send(0x31);lcd_cmd_send(0x7f); 设置显示视窗右边位置 lcd_cmd_send(0x21);lcd_cmd_send(0x1d); 设置工作视窗顶部位置 lcd_cmd_send(0x50);lcd_cmd_send(0x00); 设置工作视窗左边位置 lcd_cmd_send(0x40);lcd_cmd_send(0x00); 设置工作视窗底部位置 lcd_cmd_send(0x30);lcd_cmd_send(0x7f); 设置工作视窗右边位置 lcd_cmd_send(0x20);lcd_cmd_send(0x1d); delay_ms(50); lcd_rst="0;" delay_ms(250); 复位 lcd_init(void) **********LCD初始化********** delay_3_3us(3); for(delay_ms_y="0;delay_ms_y<100;delay_ms_y++)" for(delay_ms_x="0;delay_ms_x<delay_ms_time;delay_ms_x++)" delay_ms_y; int unsigned delay_ms_x; delay_ms_time) delay_ms(unsigned **********ms软件延时********** {;}>0)   
  {   
   lcd_data_send(*text_display);   
   text_display++;   
  }   
}   
   
/**********LCD显示变量**********/   
void lcd_num_display(long int num_display)   
{   
 uchar a,b,c,d,e,f,g;   
 if(num_display<0)        //显示“-”号    
  {   
   lcd_text_display("-");   
   num_display*=-1;   
  }   
 a=num_display/1000000;   
 b=num_display%1000000/100000;   
 c=num_display%100000/10000;   
 d=num_display%10000/1000;   
 e=num_display%1000/100;   
 f=num_display%100/10;   
 g=num_display%10;   
    
 if(num_display>=1000000)   
  {lcd_data_send(a+48);}   
 if(num_display>=100000)   
  {lcd_data_send(b+48);}   
 if(num_display>=10000)   
  {lcd_data_send(c+48);}   
 if(num_display>=1000)   
  {lcd_data_send(d+48);}   
 if(num_display>=100)    
  {lcd_data_send(e+48);}   
 if(num_display>=10)    
  {lcd_data_send(f+48);}   
 lcd_data_send(g+48);    
}   
   
/**********LCD显示浮点数**********/   
void lcd_float_display(float float_display)   
{   
  long int first_num=0;   
  float last_num=0;   
  uchar a,b,c,d;   
  if(float_display<0)   
   {   
    lcd_text_display("-");   
    float_display*=-1;   
   }   
  first_num=float_display;          //取出整数部分    
  lcd_num_display(first_num);       //显示整数部分    
  lcd_text_display(".");            //显示小数点    
  last_num=float_display-first_num; //取出小数部分    
  first_num=last_num*10000;   
  a=first_num/1000;   
  b=first_num%1000/100;   
  c=first_num%100/10;   
  d=first_num%10;   
  lcd_data_send(a+48);   
  if(first_num%1000!=0)  //十分位后还有非0数,显示百分位    
   {lcd_data_send(b+48);}   
  if(first_num%100!=0)   //百分位后还有非0数,显示千分位    
   {lcd_data_send(c+48);}   
  if(first_num%10!=0)    //千分位后还有非0数,显示万分位    
   {lcd_data_send(d+48);}   
     
}   
   
   
/**********RTC定时器初始化**********/   
void rtc_init(void)    
{    
 IEN0=0x40;  //使能RTC中断    
 WDCON=0xe0; //关闭看门狗中断    
 RTCH=0xE0;  //7.3728MHz下,1s中断1次时,RTC的定时值     
 RTCL=0xFF;     
 RTCCON=0x63;//开启RTC模块,时钟为内部RC振荡时钟     
}   
   
void rtc_isr(void) interrupt 10   
{    
 RTCCON&=0x63;       //清除RTC中断标志位      
 if(++timea_s>=60)   
  {   
   timea_s=0;   
   if(++timea_m>=60)   
    {   
     timea_m=0;   
     timea_h++;   
    }   
  }   
}     
   
/**********显示测试时间**********/   
void time_display(void)   
{   
 if(timea0!=timea_s)   
 {   
  timea0=timea_s;   
  lcd_cmd_send(0x60);lcd_cmd_send(0x10);   
  lcd_cmd_send(0x70);lcd_cmd_send(0x60);   
  if(timea_h<10)   
   {lcd_num_display(0);}   
  lcd_num_display(timea_h);   
  lcd_text_display(":");   
  if(timea_m<10)   
   {lcd_num_display(0);}   
  lcd_num_display(timea_m);   
  lcd_text_display(":");   
  if(timea_s<10)   
   {lcd_num_display(0);}   
  lcd_num_display(timea_s);   
  lcd_text_display(" ");   
 }   
}   
   
/**********显示菜单信息**********/   
void page1_cn(void)   
{   
    //lcd_box_display(79,0,176,17,1);    
    lcd_cmd_send(0x60);lcd_cmd_send(0x08);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x00);    
    lcd_cmd_send(0xf1);lcd_cmd_send(0x0f);   
    lcd_text_display("各节电池电压(V)");   
       
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x10);   
    lcd_text_display("01号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x20);   
    lcd_text_display("03号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x30);   
    lcd_text_display("05号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x40);   
    lcd_text_display("07号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x50);   
    lcd_text_display("09号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x60);   
    lcd_text_display("11号:");   
    lcd_cmd_send(0x60);lcd_cmd_send(0x00);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x70);   
    lcd_text_display("13号:");   
       
    lcd_cmd_send(0x60);lcd_cmd_send(0x0f);   
    lcd_cmd_send(0x70);lcd_cmd_send(0x10);   

⌨️ 快捷键说明

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