找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5341|回复: 3
收起左侧

ADC0832+51单片机的AD数模转换Proteus仿真程序

[复制链接]
ID:657799 发表于 2019-12-6 21:18 | 显示全部楼层 |阅读模式
该设计为5V的直流数字电压表设计
AD.png

以下是源程序:
  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. }
复制代码

全部资料51hei下载地址:
AD数模转换.zip (32.94 KB, 下载次数: 177)
回复

使用道具 举报

ID:706694 发表于 2020-5-31 19:52 | 显示全部楼层
学习一下 ,非常感谢
回复

使用道具 举报

ID:706694 发表于 2020-5-31 19:53 | 显示全部楼层
正好需要,51黑很强大
回复

使用道具 举报

ID:827662 发表于 2020-11-27 10:30 来自手机 | 显示全部楼层
太厉害了,对我学习很有帮助
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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