找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1530|回复: 0
收起左侧

Proteus仿真HDM32GS12-B显示驱动 单片机程序

[复制链接]
ID:830137 发表于 2022-4-9 13:27 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1.png
这是在做传感器实验显示的时候的副产物,可以显示放在字库文字,数字可以放在一个数组如uchar code xue[]={5,2,0,0,1,3,1,4,};不用在数字库里面排序,优化了显示代码。显示时可以不用分上下部分

单片机源程序如下:
  1. #include <intrins.h>
  2. #include <reg51.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define LCD_DATA P0
  6. sbit E1=P2^4;
  7. sbit E2=P2^5;
  8. sbit A0=P2^7;
  9. sbit RW=P2^6;        
  10. uchar code xue[]={5,2,0,0,1,3,1,4,};
  11. uchar code ziku[]=
  12. {
  13.         /*--  温  --*/
  14.         0x10,0x60,0x02,0x8c,0x00,0x00,0xfe,0x92,0x92,0x92,0x92,0x92,0xfe,0x00,0x00,0x00,
  15.         0x04,0x04,0x7e,0x01,0x40,0x7e,0x42,0x42,0x7e,0x42,0x7e,0x42,0x42,0x7e,0x40,0x00,
  16.         /*--  度  --*/
  17.         0x00,0x00,0xfc,0x24,0x24,0x24,0xfc,0x25,0x26,0x24,0xfc,0x24,0x24,0x24,0x04,0x00,
  18.         0x40,0x30,0x8f,0x80,0x84,0x4c,0x55,0x25,0x25,0x25,0x55,0x4c,0x80,0x80,0x80,0x00,
  19. };
  20. uchar code shuzi[]=
  21. {
  22. /*--    0  --*/
  23. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
  24. /*--    1  --*/
  25. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
  26. /*--    2  --*/
  27. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
  28. /*--    3  --*/
  29. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
  30. /*--    4  --*/
  31. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
  32. /*--    5  --*/
  33. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
  34. /*--    6  --*/
  35. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
  36. /*--    7  --*/
  37. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
  38. /*--    8  --*/
  39. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
  40. /*--    9  --*/
  41. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
  42. };
  43. void delay(uchar z)   
  44. {
  45.      int x;
  46.      for(x=z;x>0;x--);
  47. }
  48. void OUTMD(uchar i)//左页
  49. {        
  50.    A0=1; //写数据//发送数据
  51.    delay(5);
  52.    E1=1;
  53.    delay(10);
  54.    LCD_DATA=i;
  55.    delay(5);
  56.    E1=0;
  57. }
  58. void OUTSD(uchar i)//右页
  59. {        
  60.    A0=1; //写数据//发送数据
  61.    delay(5);
  62.    E2=1;
  63.    delay(10);
  64.    LCD_DATA=i;
  65.    delay(5);
  66.    E2=0;
  67. }
  68. void OUTMI(uchar i)//左页
  69. {
  70.    A0=0; //写指令//发送命令
  71.    delay(5);
  72.    E1=1;
  73.    delay(10);
  74.    LCD_DATA=i;
  75.    delay(5);
  76.    E1=0;
  77. }
  78. void OUTSI(uchar i)//左页
  79. {
  80.    A0=0; //写指令//发送命令
  81.    delay(5);
  82.    E2=1;
  83.    delay(10);
  84.    LCD_DATA=i;
  85.    delay(5);
  86.    E2=0;
  87. }
  88. void lcdini(void)//初始化
  89. {
  90.    RW=0;
  91.    OUTMI(0XE2);  OUTSI(0XE2);//??
  92.    OUTMI(0XAE);  OUTSI(0XAE);//POWER
  93.    OUTMI(0XA4);  OUTSI(0XA4);//????
  94.    OUTMI(0XA9);  OUTSI(0XA9);//1/32???
  95.    OUTMI(0XA1);  OUTSI(0XA1);//?????,????
  96.    OUTMI(0XE0);  OUTSI(0XE0);//??-??-???
  97.    OUTMI(0XEE);  OUTSI(0XEE);//???  ???-??-???
  98.    OUTMI(0X00);  OUTMI(0XC0);//?????,?????
  99.    OUTSI(0X00);  OUTSI(0XC0);
  100.    OUTMI(0XAF);  OUTSI(0XAF);//POWER SAVE ??????,?????
  101. }
  102. void SetPage ( uchar page0,uchar page1)
  103. {
  104. OUTMI(0xB8|page1);
  105. OUTSI(0xB8|page0);
  106. }
  107. void SetAddress ( uchar address0,uchar address1)
  108. {
  109. OUTMI(address1);
  110. OUTSI(address0);
  111. }
  112. void PutCharR(uchar ch)
  113. {
  114. OUTSD(ch);
  115. }
  116. void PutCharL(uchar ch)
  117. {
  118. OUTMD(ch);
  119. }
  120. void clrscr(void)
  121. {
  122. uchar  i;
  123. uchar  page;
  124. for (page=0;page<4;page++)
  125.   {
  126.     SetPage ( page, page);
  127.     SetAddress(0,0);
  128.     for (i=0;i<61;i++)
  129.         {
  130.           PutCharR(0);
  131.           PutCharL(0);
  132.         }
  133.    }
  134. }
  135. void Draw_wordh (uint wei, uint d_where, uint x_add, bit layer, uchar width,uchar *p)
  136. {                //???????
  137.   uchar x,address;        //address?????????
  138.   bit window=0;  //window??????
  139.   d_where = d_where*2*width;        
  140.         //SetAddress(0,0);
  141.   for (x=0;x<width;x++)
  142.         {   
  143.                 if (x_add>=61) {window=1;address=x_add%61;}//判断左右半屏
  144.     else address=x_add;
  145.   if(layer==0)
  146.                 { //??????????
  147.      SetPage(wei,wei);
  148.      SetAddress(address,address);
  149.      if(window==1)PutCharR(p[x+d_where]);//右半屏显示上半部分
  150.      else PutCharL(p[x+d_where]);//左
  151.                  }
  152.   else
  153.         {         //????????????
  154.    SetPage(wei+2,wei+2);
  155.    SetAddress(address,address);
  156.    if(window==1)PutCharR(p[x+d_where]);//??
  157.    else PutCharL(p[x+d_where]);
  158.   }
  159.     x_add++;
  160.   }}
复制代码

Keil代码与Proteus仿真下载: 显示文字数字.zip (64.29 KB, 下载次数: 15)

评分

参与人数 1黑币 +20 收起 理由
admin + 20

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表