找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13927|回复: 24
收起左侧

单片机数字电压表 lcd12864液晶显示 带源码和仿真

  [复制链接]
ID:137190 发表于 2016-9-9 20:00 | 显示全部楼层 |阅读模式
用51单片机做的数字电压表仿真,下面是原理图:
0.png 显示部分是用的lcd12864,。

0.png
里面含有仿真和程序:
数字电压表.rar (905.63 KB, 下载次数: 330)


液晶显示的数字电压表源程序:
  1. #include<reg52.h>
  2. #define uchar  unsigned char
  3. #define unit  unsigned int
  4. uchar code Hzk[]={  
  5. /*--  文字:  输  --*/
  6. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  7. 0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,
  8. 0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,

  9. /*--  文字:  出  --*/
  10. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  11. 0x00,0x00,0x7C,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,
  12. 0x00,0x7C,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,

  13. /*--  文字:  电  --*/
  14. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  15. 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
  16. 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,

  17. /*--  文字:  压  --*/
  18. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  19. 0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
  20. 0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00,

  21. /*--  文字:  为  --*/
  22. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  23. 0x00,0x20,0x22,0x2C,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,
  24. 0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x01,0x46,0x80,0x40,0x3F,0x00,0x00,0x00,

  25. };
  26. #define LCD_databus P0
  27. uchar num;
  28. long int sum;
  29. sbit EN=P2^0;
  30. sbit RW=P2^1;
  31. sbit RS=P2^2;
  32. sbit CS2=P2^3;
  33. sbit CS1=P2^4;
  34. sbit ST=P3^0;
  35. sbit OE=P3^1;
  36. sbit EOC=P3^2;
  37. sbit CLK=P3^3;
  38. void delay1ms()  
  39. {
  40.     uchar a,b;
  41.     for(b=105;b>0;b--)
  42.         for(a=8;a>0;a--);
  43. }
  44. void Read_busy()
  45. {
  46.         uchar dat;//状态信息(判断是否忙)
  47.          RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据
  48.          RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0
  49.          do{
  50.         LCD_databus=0x00;
  51.     EN=1;        //EN下降沿
  52.         dat=LCD_databus;
  53.     EN=0;
  54.     dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
  55.     }while(!(dat==0x00));
  56. }
  57. void write_LCD_command(uchar value)
  58. {
  59.         Read_busy();
  60.         RS=0;
  61.         RW=0;
  62.         LCD_databus=value;
  63.         EN=1;
  64.         delay1ms();
  65.         EN=0;
  66. }
  67. void write_LCD_data(uchar value)
  68. {
  69.         Read_busy();
  70.         RS=1;
  71.         RW=0;
  72.         LCD_databus=value;
  73.         EN=1;
  74.         delay1ms();
  75.         EN=0;
  76. }
  77. void Set_page(uchar page)        
  78. {
  79.         page=0xb8|page;
  80.         write_LCD_command(page);
  81. }
  82. void Set_line(uchar startline)
  83. {
  84.         startline=0xc0|startline;
  85.         write_LCD_command(startline);        
  86. }
  87. void Set_lie(uchar lie)
  88. {
  89.         lie=lie&0x3f;
  90.         lie=0x40|lie;
  91.         write_LCD_command(lie);
  92. }
  93. void Setonoff(uchar onoff)
  94. {
  95.         onoff=0x3e|onoff;
  96.         write_LCD_command(onoff);
  97. }
  98. void SelectScreen(uchar screen)
  99. {
  100.         switch(screen)
  101.         {
  102.                 case 0:CS1=0;CS2=0 ;break;
  103.                 case 1:CS1=0;CS2=1 ;break;
  104.                 case 2:CS1=1;CS2=0 ;break;
  105.                 default: break;
  106.         }
  107. }
  108. void ClearScreen(uchar screen)
  109. {
  110.         uchar i,j;
  111.         SelectScreen(screen);
  112.         for(i=0;i<8;i++)
  113.         {
  114.           Set_page(i);
  115.           Set_lie(0);
  116.            for(j=0;j<64;j++)
  117.            {
  118.                 write_LCD_data(0x00);           
  119.            }
  120.         }
  121. }
  122. void Display(uchar ss,uchar page,uchar lie,uchar number)
  123. {
  124. int i;        //选屏参数,page选页参数,column选列参数,number选第几汉字输出
  125. SelectScreen(ss);
  126. lie=lie&0x3f;
  127. Set_page(page);        //写上半页
  128. Set_lie(lie); //控制列
  129. for(i=0;i<16;i++)  //控制16列的数据输出
  130. {write_LCD_data(Hzk[i+32*number]);} //i+32*number汉字的前16个数据输出
  131. Set_page(page+1);                 //写下半页
  132. Set_lie(lie);           //控制列
  133. for(i=0;i<16;i++)          //控制16列的数据输出
  134. {write_LCD_data(Hzk[i+32*number+16]);}//i+32*number+16汉字的后16个数据输出
  135. }

  136. void Init()
  137. {
  138.         Read_busy();
  139.         SelectScreen(0);
  140.         Setonoff(0);
  141.            SelectScreen(0);
  142.         Setonoff(1);
  143.         SelectScreen(0);
  144.         ClearScreen(0);
  145.         Set_line(0);
  146. }
  147. void Init1()
  148. {
  149. EA=1;
  150. TMOD=0x01;
  151. TH0=(65536-150)/256;
  152. TL0=(65536-150)%256;
  153. ET0=1;
  154. TR0=1;

  155. }
  156. void main()
  157. {
  158. Init();
  159. ClearScreen(0);
  160. Set_line(0);
  161. Init1();
  162. OE=1;
  163. ST=0;
  164. ST=1;
  165. ST=0;//启动转换
  166. while(EOC==0);    //等待转换结果      
  167. OE=1;   //允许输出               
  168. sum=P1*1.0/255*5000;               
  169. LCD_databus=sum;        
  170. Display(0,0,16,LCD_databus);        
  171. while(1);
  172. }
  173. void Timer0() interrupt 1
  174. {
  175. TH0=(65536-150)/256;
  176. TL0=(65536-150)%256;
  177. CLK=~CLK;//ADC0809时钟信号
  178. }
复制代码


回复

使用道具 举报

ID:177849 发表于 2017-3-21 21:16 | 显示全部楼层
好厉害
回复

使用道具 举报

ID:177849 发表于 2017-3-21 21:17 | 显示全部楼层
看起来不错
回复

使用道具 举报

ID:182926 发表于 2017-3-24 17:14 | 显示全部楼层
可以看看
回复

使用道具 举报

ID:193639 发表于 2017-5-2 20:49 来自触屏版 | 显示全部楼层
好厉害
回复

使用道具 举报

ID:193639 发表于 2017-5-2 20:50 来自触屏版 | 显示全部楼层
能用1602做一个吗
回复

使用道具 举报

ID:99130 发表于 2017-5-2 21:43 | 显示全部楼层
我想知道测量范围
回复

使用道具 举报

ID:167165 发表于 2017-5-12 09:46 | 显示全部楼层
测不准,显示的乱七八糟的,什么东西啊
回复

使用道具 举报

ID:200118 发表于 2017-5-12 22:51 | 显示全部楼层
下载学习
回复

使用道具 举报

ID:200118 发表于 2017-5-16 20:36 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:184139 发表于 2017-6-6 12:21 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:250182 发表于 2017-11-16 20:31 | 显示全部楼层
非常不错的教程,楼主有心了
回复

使用道具 举报

ID:254710 发表于 2017-12-4 12:21 | 显示全部楼层
厉害厉害
回复

使用道具 举报

ID:250631 发表于 2017-12-12 12:03 | 显示全部楼层
感谢楼主无私分享,试试精度如何?
回复

使用道具 举报

ID:221453 发表于 2017-12-25 12:02 | 显示全部楼层
谢谢楼主,无私奉献
回复

使用道具 举报

ID:228939 发表于 2018-1-15 21:16 | 显示全部楼层
厉害了,我的哥
回复

使用道具 举报

ID:301797 发表于 2018-4-4 00:35 | 显示全部楼层
多谢楼主的 资料好好学习一下
回复

使用道具 举报

ID:128402 发表于 2018-4-9 11:56 | 显示全部楼层
打开后电压无法显示。。。
回复

使用道具 举报

ID:379007 发表于 2018-8-30 08:32 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:391668 发表于 2018-8-30 16:26 | 显示全部楼层
学习学习,感谢分享
回复

使用道具 举报

ID:203945 发表于 2018-9-15 23:14 | 显示全部楼层
谢谢分享!!找了很久才找到这个!!
回复

使用道具 举报

ID:405731 发表于 2018-10-6 00:49 | 显示全部楼层
厉害厉害
回复

使用道具 举报

ID:261649 发表于 2018-10-23 09:43 | 显示全部楼层
楼主,为什么我的不显示多少V?
回复

使用道具 举报

ID:729193 发表于 2020-4-30 11:04 | 显示全部楼层
厉害了,我的哥
回复

使用道具 举报

ID:541982 发表于 2021-5-24 19:34 | 显示全部楼层
感谢分享!!很好的学习教材!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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