欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 1602液晶顯示的電壓表程序 [打印本頁]

作者: daniu    時間: 2014-12-26 21:29
標題: 1602液晶顯示的電壓表程序
本帖最后由 daniu 于 2014-12-26 21:31 編輯

STC12C5406AD 晶振頻率為12MHz 指令周期:本程序取:1.0us/6倍。

本程序已調(diào)試完成:

功能說明:STC12C5406AD+74HC164+1602液晶顯示的電壓表。
測量電壓:采用10位AD測量,測量結(jié)果非常準確。


  1. #include "stc12c5410ad.h"//頭文件
  2. #include "intrins.h"
  3. #define uchar unsigned char//宏定義
  4. #define uint unsigned int//宏定義

  5. sbit RS=P3^4;//定義I/O的硬件接口
  6. sbit E=P3^7;

  7. sbit A_B=P3^2;
  8. sbit CP=P3^3;

  9. sbit Simulation=P1^7;//模擬電壓輸入

  10. uint temp;


  11. uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//1602:0-9 數(shù)字
  12. uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//溫度符號
  13. uchar DispBuf[6]; //6字節(jié)的顯示緩沖區(qū)
  14. char char_char_1[]={" www#mdizi#com "};//定義字符串

  15. void delay(uint z)//1ms延時
  16. {
  17. uchar x,x1;
  18. for(;z>0;z--)
  19. {
  20. for(x=0;x<114;x++)
  21. {
  22. for(x1=0;x1<1;x1++);
  23. }
  24. }
  25. }

  26. void delay1()//經(jīng)精準計算,該段程序1次延時時間為 19.53us;多次調(diào)用需要重新計算。
  27. {
  28. _nop_();
  29. _nop_();
  30. _nop_();
  31. }


  32. void write_Directive(uchar a)//寫指令
  33. {
  34. uchar i,temp;
  35. for(i=0;i<8;i++)
  36. {
  37. temp=a;
  38. temp&=0x80;
  39. if(temp==0x80)
  40. A_B=1;
  41. else
  42. A_B=0;
  43. a=a<<1;
  44. delay1();
  45. CP=0;
  46. delay1();
  47. CP=1;
  48. delay1();
  49. CP=0;
  50. }

  51. RS=0;
  52. delay(3);
  53. E=0;
  54. delay(3);
  55. E=1;
  56. delay(3);
  57. E=0;
  58. delay(3);
  59. }

  60. void write_Data(uchar a)//寫數(shù)據(jù)
  61. {
  62. uchar i,temp;
  63. for(i=0;i<8;i++)
  64. {
  65. temp=a;
  66. temp&=0x80;
  67. if(temp==0x80)
  68. A_B=1;
  69. else
  70. A_B=0;
  71. a=a<<1;
  72. delay1();
  73. CP=0;
  74. delay1();
  75. CP=1;
  76. delay1();
  77. }

  78. RS=1;
  79. delay(3);
  80. E=0;
  81. delay(3);
  82. E=1;
  83. delay(3);
  84. E=0;
  85. delay(3);

  86. }

  87. void init()//初始化
  88. {
  89. uchar i;
  90. CP=1;
  91. A_B=1;
  92. delay(15);
  93. write_Directive(0x38);
  94. delay(5);
  95. write_Directive(0x38);
  96. delay(5);
  97. write_Directive(0x38);
  98. write_Directive(0x01);
  99. write_Directive(0x02);///初始化后數(shù)據(jù)地址為0x80;即第一行,第一個位置
  100. write_Directive(0x0c);
  101. write_Directive(0x80+0x40);//第二行第一位地址
  102. for(i=0;i<16;i++)
  103. {
  104. write_Data(char_char_1[ i]);//顯示字符串" wwwmdizicom "
  105. }

  106. }

  107. void Temperature_symbol()//溫度符號
  108. {
  109. uchar i;
  110. for(i=0;i<8;i++)
  111. {
  112. write_Directive(0x40+i);//寫入溫度符號
  113. write_Data(DispTab_2[ i]);
  114. }
  115. }

  116. void write_Data_String()//顯示時間函數(shù)
  117. {
  118. uchar i;
  119. unsigned int mm;
  120. DispBuf[0]=temp/10000;//顯示百位
  121. mm=temp%10000;

  122. DispBuf[1]=mm/1000;//顯示十位
  123. mm=mm%1000;

  124. DispBuf[2]=mm/100;//顯示個位
  125. mm=mm%100;

  126. DispBuf[3]=mm/10;//顯示小數(shù)點:0.001
  127. DispBuf[4]=mm%10;//顯示小數(shù)點:0.0001


  128. i=DispBuf[0];
  129. DispBuf[0]=DispTab_1[ i];//查表,取字符
  130. i=DispBuf[1];
  131. DispBuf[1]=DispTab_1[ i];
  132. i=DispBuf[2];
  133. DispBuf[2]=DispTab_1[ i];
  134. i=DispBuf[3];
  135. DispBuf[3]=DispTab_1[ i];
  136. i=DispBuf[4];
  137. DispBuf[4]=DispTab_1[ i];

  138. write_Directive(0x80+0x04);//第一行,第五個位置地址

  139. write_Data(DispBuf[0]);//第一行,第五個位置

  140. write_Data('.');//第一行,第六個位置

  141. write_Data(DispBuf[1]);//第一行,第七個位置
  142. write_Data(DispBuf[2]);//第一行,第八個位置

  143. write_Data(DispBuf[3]);//第一行,第九個位置

  144. write_Data(DispBuf[4]);//第一行,第十個位置

  145. write_Data('V');

  146. }

  147. void I_O_init()
  148. {
  149. P1M1=0x80;
  150. P1M0=0x80;
  151. }


  152. void ADC_Conversion()//ADC開始轉(zhuǎn)
  153. {
  154. ADC_CONTR=0x87;
  155. delay(1);
  156. ADC_CONTR=0x8f;
  157. delay(1);
  158. //while((ADC_CONTR==0x8f));
  159. ADC_CONTR=0x87;
  160. delay(1);
  161. }

  162. void ADC_Calculated()//ADC計算
  163. {

  164. float temp1;
  165. float temp2;
  166. uint temp3;

  167. temp=ADC_DATA;//高8位
  168. temp1=temp;
  169. temp=temp1/256*5*10000;//高8位計算

  170. temp3=ADC_LOW2;//低2位
  171. temp2=temp3;
  172. temp3=temp2/256*5*10000;//低2位計算

  173. temp=temp+temp3;//高8位的計算值+低2位的計算值=實際值


  174. }

  175. void main()
  176. {
  177. init();
  178. I_O_init();//I/O口初始化
  179. Temperature_symbol();//寫入溫度符號
  180. while(1)
  181. {
  182. ADC_Conversion();//ADC開始轉(zhuǎn)
  183. ADC_Calculated();//ADC計算
  184. write_Data_String();//顯示溫度
  185. delay(1000);
  186. }
  187. }

復(fù)制代碼




作者: qq704661078    時間: 2015-1-31 20:30
謝謝樓主分享!!!
作者: qingkongwanli    時間: 2015-6-4 21:12
謝謝樓主的程序,本人最近正在學習STC的單片機,準備做一個電動三輪車的電壓表和速度表
作者: JIAHUIFENG    時間: 2015-6-20 15:58
有電路圖嗎
作者: bhjyqjs    時間: 2015-6-24 09:56
一個很規(guī)范的C51程序,頂一個!
作者: 不是我    時間: 2016-4-4 22:28
請問樓主能給出電路圖嗎?
作者: dengrui    時間: 2016-4-11 10:15
同求電路圖
作者: kongroom    時間: 2017-4-15 15:59
沒電路圖等于沒用啊
作者: raymondau    時間: 2017-4-15 16:26
是的,請樓主附上電路圖吧
作者: bsvb    時間: 2017-4-15 18:59
謝謝樓主分享!!!
作者: bsvb    時間: 2017-4-15 18:59
謝謝樓主分享!!!,請樓主附上電路圖吧
作者: opop1988    時間: 2018-1-19 21:35

謝謝樓主分享!!!,請樓主附上電路圖吧
作者: xsj1877578806    時間: 2018-9-16 18:11
最大多少伏?




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