標(biāo)題: 單片機(jī)數(shù)字電壓表 lcd12864液晶顯示 帶源碼和仿真 [打印本頁]

作者: 51黑ff    時間: 2016-9-9 20:00
標(biāo)題: 單片機(jī)數(shù)字電壓表 lcd12864液晶顯示 帶源碼和仿真
用51單片機(jī)做的數(shù)字電壓表仿真,下面是原理圖:
顯示部分是用的lcd12864,。


里面含有仿真和程序:
數(shù)字電壓表.rar (905.63 KB, 下載次數(shù): 330)


液晶顯示的數(shù)字電壓表源程序:
  1. #include<reg52.h>
  2. #define uchar  unsigned char
  3. #define unit  unsigned int
  4. uchar code Hzk[]={  
  5. /*--  文字:  輸  --*/
  6. /*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬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;  此字體下對應(yīng)的點(diǎn)陣為:寬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;  此字體下對應(yīng)的點(diǎn)陣為:寬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;  此字體下對應(yīng)的點(diǎn)陣為:寬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;  此字體下對應(yīng)的點(diǎn)陣為:寬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;//狀態(tài)信息(判斷是否忙)
  47.          RS=0; // 數(shù)據(jù)\指令選擇,D/I(RS)=“L” ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)
  48.          RW=1; //R/W=“H” ,E=“H”數(shù)據(jù)被讀到DB7∽DB0
  49.          do{
  50.         LCD_databus=0x00;
  51.     EN=1;        //EN下降沿
  52.         dat=LCD_databus;
  53.     EN=0;
  54.     dat=0x80 & dat; //僅當(dāng)?shù)?位為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;        //選屏參數(shù),page選頁參數(shù),column選列參數(shù),number選第幾漢字輸出
  125. SelectScreen(ss);
  126. lie=lie&0x3f;
  127. Set_page(page);        //寫上半頁
  128. Set_lie(lie); //控制列
  129. for(i=0;i<16;i++)  //控制16列的數(shù)據(jù)輸出
  130. {write_LCD_data(Hzk[i+32*number]);} //i+32*number漢字的前16個數(shù)據(jù)輸出
  131. Set_page(page+1);                 //寫下半頁
  132. Set_lie(lie);           //控制列
  133. for(i=0;i<16;i++)          //控制16列的數(shù)據(jù)輸出
  134. {write_LCD_data(Hzk[i+32*number+16]);}//i+32*number+16漢字的后16個數(shù)據(jù)輸出
  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;//啟動轉(zhuǎn)換
  166. while(EOC==0);    //等待轉(zhuǎn)換結(jié)果      
  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. }
復(fù)制代碼



作者: ak155101    時間: 2017-3-21 21:16
好厲害
作者: ak155101    時間: 2017-3-21 21:17
看起來不錯
作者: 千山鳥飛絕    時間: 2017-3-24 17:14
可以看看
作者: wyhwyhwyh    時間: 2017-5-2 20:49
好厲害
作者: wyhwyhwyh    時間: 2017-5-2 20:50
能用1602做一個嗎
作者: 越快樂越墮落    時間: 2017-5-2 21:43
我想知道測量范圍
作者: 飛飛鷹    時間: 2017-5-12 09:46
測不準(zhǔn),顯示的亂七八糟的,什么東西啊
作者: XDDZ1013    時間: 2017-5-12 22:51
下載學(xué)習(xí)
作者: XDDZ1013    時間: 2017-5-16 20:36
學(xué)習(xí)學(xué)習(xí)
作者: 18390093215    時間: 2017-6-6 12:21
學(xué)習(xí)一下
作者: jxy17908    時間: 2017-11-16 20:31
非常不錯的教程,樓主有心了
作者: 704516392    時間: 2017-12-4 12:21
厲害厲害
作者: pgdw    時間: 2017-12-12 12:03
感謝樓主無私分享,試試精度如何?
作者: 君若晨風(fēng)    時間: 2017-12-25 12:02
謝謝樓主,無私奉獻(xiàn)
作者: 孤獨(dú)求敗    時間: 2018-1-15 21:16
厲害了,我的哥
作者: 電子酷酷    時間: 2018-4-4 00:35
多謝樓主的 資料好好學(xué)習(xí)一下
作者: 1039629873    時間: 2018-4-9 11:56
打開后電壓無法顯示。。。
作者: zxdgg    時間: 2018-8-30 08:32
感謝分享

作者: jygz    時間: 2018-8-30 16:26
學(xué)習(xí)學(xué)習(xí),感謝分享
作者: hai2599    時間: 2018-9-15 23:14
謝謝分享!!找了很久才找到這個!
作者: lmn51    時間: 2018-10-6 00:49
厲害厲害
作者: 天宇    時間: 2018-10-23 09:43
樓主,為什么我的不顯示多少V?
作者: 閆YZH    時間: 2020-4-30 11:04
厲害了,我的哥

作者: zcm119    時間: 2021-5-24 19:34
感謝分享!很好的學(xué)習(xí)教材!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1