• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

微功耗液位变送器显示问题

罗格朗777 2018-05-23 浏览量:873
51单片机不具备直接驱动lcd段码液晶的能力求一份单片机IO口直接驱动lcd的程序
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • /****************** LCD段码扫描函数 ***************************
    
    u8 code T_COM[4]={0x080x040x020x01};
    
    void LCD_scan(void) //5us @22.1184MHZ
    
    {   u8 j;
    
    j = scan_index >> 1;        //COMx
    
    P2n_pure_input(0x0f);       //全部COM输出高阻 COM为中点电压
    
    if(scan_index & 1)          //反相扫描
    
    {   P1 = ~LCD_buff[j]; //送SEG驱动码
    
    P2 = ~(LCD_buff[j|4] & 0xf0);   //送SEG驱动码和COM驱动码
    
    }
    
    else  //正相扫描
    
    {   P1 = LCD_buff[j];          //送SEG驱动码
    
    P2 = LCD_buff[j|4] & 0xf0;  //送SEG驱动码和COM驱动码
    
    }
    
    P2n_push_pull(T_COM[j]); //某个COM设置为推挽输出
    
    if(++scan_index >= 8) scan_index = 0;   //扫描完成,重复扫描
    
    }
    
     
    
    /****************** LCD段码显示缓冲装载函数 ***************************/
    
    /****************** 对第1~6数字装载显示函数 ***************************/
    
    u8 code T_LCD_mask[4]  = {~0xc0~0x30~0x0c~0x03};
    
    u8 code T_LCD_mask4[4] = {~0x40~0x10~0x04~0x01};
    
    void LCD_load(u8 nu8 dat) //n为第几个数字,为1~6,dat为要显示的数字 10us@22.1184MHZ
    
    {   u8 ik;
    
    u8 *p;
    
    if((n == 0) || (n > 6)) return;
    
    i = t_display[dat];
    
     
    
    if(n <= 4) //1~4
    
    {   n--;
    
    p = LCD_buff;
    
    }
    
    else
    
    {   n = n - 5;
    
    p = &LCD_buff[4];
    
    }
    
     
    
    k = 0;
    
    if(i & 0x08) k |= 0x40; //D
    
    *p = (*p & T_LCD_mask4[n]) | (k>>2*n);
    
    p++;
    
     
    
    k = 0;
    
    if(i & 0x04) k |= 0x40; //C
    
    if(i & 0x10) k |= 0x80; //E
    
    *p = (*p & T_LCD_mask[n]) | (k>>2*n);
    
    p++;
    
     
    
    k = 0;
    
    if(i & 0x02) k |= 0x40; //B
    
    if(i & 0x40) k |= 0x80; //G
    
    *p = (*p & T_LCD_mask[n]) | (k>>2*n);
    
    p++;
    
     
    
    k = 0;
    
    if(i & 0x01) k |= 0x40; //A
    
    if(i & 0x20) k |= 0x80; //F
    
    *p = (*p & T_LCD_mask[n]) | (k>>2*n);
    
    }
    • 发布于 2018-05-23
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 下面是STC官网的驱动程序,电路图和相关文档:

    http://www.stcmcu.com/STC-DEMO-CODE/40-IO-LCD-8x6-2014-6-19.rar

    • 发布于2018-05-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以参考一下这篇文章https://wenku.baidu.com/view/1c2f4032dd3383c4bb4cd2ef.html
    • 发布于2018-05-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 51可以直接驱动LCD1602,最少只需要占用51个IO口,使用一片74HC595实现。

    • 发布于2018-05-28
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

微功耗液位变送器显示问题