找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6008|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

ADC0832+51單片機(jī)的AD數(shù)模轉(zhuǎn)換Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
該設(shè)計為5V的直流數(shù)字電壓表設(shè)計


以下是源程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit CS=P3^4;
  4. sbit CLK=P1^0;
  5. sbit DI0=P1^1;
  6. unsigned char code digit[10]={"0123456789"};
  7. unsigned char code Str[]={"Volt="};
  8. sbit RS=P2^0;
  9. sbit RW=P2^1;
  10. sbit E=P2^2;
  11. sbit BF=P0^7;
  12. void delay1ms()
  13. {
  14. unsigned char i,j;
  15. for(i=0;i<10;i++)
  16. for(j=0;j<33;j++)
  17. ;
  18. }
  19. void delaynms(unsigned char n)
  20. {
  21. unsigned char i;
  22. for(i=0;i<n;i++)
  23. delay1ms();
  24. }
  25. bit BusyTest(void)
  26. {
  27. bit result;
  28. RS=0;
  29. RW=1;
  30. E=1;
  31. _nop_();
  32. _nop_();
  33. _nop_();
  34. _nop_();
  35. result=BF;
  36. E=0;
  37. return result;
  38. }
  39. void WriteInstruction(unsigned char dictate)
  40. {
  41. while(BusyTest()==1);
  42. RS=0;
  43. RW=0;
  44. E=0;
  45. _nop_();
  46. _nop_();
  47. P0=dictate;
  48. _nop_();
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. E=1;
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. _nop_();
  57. E=0;
  58. }
  59. void WriteAddress(unsigned char x)
  60. {
  61. WriteInstruction(x|0x80);
  62. }
  63. void WriteData(unsigned char y)
  64. {
  65. while(BusyTest()==1);
  66. RS=1;
  67. RW=0;
  68. E=0;
  69. P0=y;
  70. _nop_();
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. E=1;
  75. _nop_();
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. E=0;
  80. }
  81. void LcdInitiate(void)
  82. {
  83. delaynms(15);
  84. WriteInstruction(0x38);
  85. delaynms(5);
  86. WriteInstruction(0x38);
  87. delaynms(5);
  88. WriteInstruction(0x38);
  89. delaynms(5);
  90. WriteInstruction(0x0c);
  91. delaynms(5);
  92. WriteInstruction(0x06);
  93. delaynms(5);
  94. WriteInstruction(0x01);
  95. delaynms(5);
  96. }
  97. void display_volt(void)
  98. {
  99. unsigned char i;
  100. WriteAddress(0x03);
  101. i=0;
  102. while(Str[i]!='\0')
  103. {
  104. WriteData(Str[i]);
  105. i++;
  106. }
  107. }
  108. void display_dot(void)
  109. {
  110. WriteAddress(0x09);
  111. WriteData('.');
  112. }
  113. void display_V(void)
  114. {
  115. WriteAddress(0x0c);
  116. WriteData('V');
  117. }
  118. void display1(unsigned char x)
  119. {
  120. WriteAddress(0x08);
  121. WriteData(digit[x]);
  122. }
  123. void display2(unsigned char x)
  124. {
  125. unsigned char i,j;
  126. i=x/10;
  127. j=x%10;
  128. WriteAddress(0x0a);
  129. WriteData(digit[i]);
  130. WriteData(digit[j]);
  131. }
  132. unsigned char A_D()
  133. {
  134. unsigned char i,dat;
  135. CS=1;
  136. CLK=0;
  137. CS=0;
  138. DI0=1;
  139. CLK=1;
  140. CLK=0;
  141. DI0=1;
  142. CLK=1;
  143. CLK=0;
  144. DI0=0;
  145. CLK=1;
  146. CLK=0;
  147. DI0=1;
  148. CLK=1;
  149. for(i=0;i<8;i++)
  150. {
  151. CLK=1;
  152. CLK=0;
  153. dat<<=1;
  154. dat|=(unsigned char)DI0;
  155. }
  156. CS=1;
  157. return dat;
  158. }
  159. main(void)
  160. {
  161. unsigned int AD_val;
  162. unsigned char Int,Dec;
  163. LcdInitiate();
  164. delaynms(5);
  165. display_volt();
  166. display_dot();
  167. display_V();
  168. while(1)
  169. {
  170. AD_val=A_D();
  171. Int=(AD_val)/51;
  172. Dec=(AD_val%51)*100/51;
  173. display1(Int);
  174. display2(Dec);
  175. delaynms(250);
  176. }
  177. }
復(fù)制代碼

全部資料51hei下載地址:
AD數(shù)模轉(zhuǎn)換.zip (32.94 KB, 下載次數(shù): 177)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:706694 發(fā)表于 2020-5-31 19:52 | 只看該作者
學(xué)習(xí)一下 ,非常感謝
回復(fù)

使用道具 舉報

板凳
ID:706694 發(fā)表于 2020-5-31 19:53 | 只看該作者
正好需要,51黑很強(qiáng)大
回復(fù)

使用道具 舉報

地板
ID:827662 發(fā)表于 2020-11-27 10:30 來自觸屏版 | 只看該作者
太厲害了,對我學(xué)習(xí)很有幫助
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表