找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3427|回复: 2
打印 上一主题 下一主题
收起左侧

数字电压表单片机源程序

[复制链接]
跳转到指定楼层
楼主
ID:243994 发表于 2017-11-8 15:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机设计的数字电压表,可采集4路电压

单片机源程序如下:
  1. #include "reg52.h"
  2. #include "intrins.h"
  3. #include "stdio.h"
  4. #define uchar unsigned char
  5. #define RS_CLR RS=0
  6. #define RS_SET RS=1
  7. #define RW_CLR RW=0
  8. #define RW_SET RW=1
  9. #define EN_CLR EN=0
  10. #define EN_SET EN=1
  11. sbit ST=P3^4;
  12. sbit EOC=P3^5;
  13. sbit OE=P3^6;
  14. sbit ALE=P3^7;
  15. sbit ADDC=P2^1;
  16. sbit ADDB=P2^2;
  17. sbit ADDA=P2^3;
  18. sbit RS = P2^4;
  19. sbit RW = P2^5;
  20. sbit EN = P2^6;
  21. sbit KEY1=P2^0;
  22. sbit KEY2=P2^7;
  23. sbit KEY4=P3^2;
  24. uchar num=0;
  25. uchar temp[20];
  26. float Voltage;

  27. void DelayUs2x(unsigned char t)
  28. {   
  29. while(--t);
  30. }

  31. void DelayMs(unsigned char t)
  32. {
  33.      
  34. while(t--)
  35. {
  36.      DelayUs2x(245);
  37.          DelayUs2x(245);
  38. }
  39. }

  40. void delay(uchar i)
  41. {
  42.         uchar j;
  43.         while(i--)
  44.         {
  45.                 for(j=125;j>0;j--);
  46.         }
  47. }

  48. bit LCD_Check_Busy(void)
  49. {
  50. P0=0xFF;
  51. RS_CLR;
  52. RW_SET;
  53. EN_CLR;
  54. _nop_();
  55. EN_SET;
  56. return (bit)(P0 & 0x80);
  57. }

  58. void LCD_Write_Com(unsigned char com)
  59. {  
  60. DelayMs(5);
  61. RS_CLR;
  62. RW_CLR;
  63. EN_SET;
  64. P0=com;
  65. _nop_();
  66. EN_CLR;
  67. }

  68. void LCD_Write_Data(unsigned char Data)
  69. {
  70. //while(LCD_Check_Busy()); //忙则等待
  71. DelayMs(5);
  72. RS_SET;
  73. RW_CLR;
  74. EN_SET;
  75. P0=Data;
  76. _nop_();
  77. EN_CLR;
  78. }

  79. void LCD_Clear(void)
  80. {
  81. LCD_Write_Com(0x01);
  82. DelayMs(5);
  83. }

  84. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  85. {     
  86. if (y == 0)
  87.          {     
  88.          LCD_Write_Com(0x80 + x);     //表示第一行
  89.          }
  90. else
  91.          {      
  92.          LCD_Write_Com(0xC0 + x);      //表示第二行
  93.          }        
  94. while (*s)
  95.          {     
  96. LCD_Write_Data( *s);     
  97. s ++;     
  98.          }
  99. }

  100. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  101. {     
  102. if (y == 0)
  103.          {     
  104.          LCD_Write_Com(0x80 + x);     
  105.          }   
  106. else
  107.          {     
  108.          LCD_Write_Com(0xC0 + x);     
  109.          }        
  110. LCD_Write_Data( Data);  
  111. }

  112. void LCD_Init(void)
  113. {
  114.    LCD_Write_Com(0x38);    /*显示模式设置*/
  115.    DelayMs(5);
  116.    LCD_Write_Com(0x38);
  117.    DelayMs(5);
  118.    LCD_Write_Com(0x38);
  119.    DelayMs(5);
  120.    LCD_Write_Com(0x38);  
  121.          LCD_Write_Com(0x0C);    /*显示开及光标设置*/
  122.    LCD_Write_Com(0x06);    /*显示光标移动设置*/
  123.          LCD_Write_Com(0x01);    /*显示清屏*/
  124. }

  125. unsigned char Read_AD()
  126. {
  127.         uchar temp=0;
  128.         while(EOC==0);
  129.         OE=1;
  130.         temp=P1;
  131.         DelayMs(1);
  132.         OE=0;
  133.         return temp;
  134. }

  135. void UartInit(void)                //2400bps@12MHz
  136. {
  137.         PCON &= 0x7f;               
  138.         SCON = 0x50;               
  139.         AUXR &= 0xbf;               
  140.         AUXR &= 0xfe;               
  141.         TMOD &= 0x0f;               
  142.         TMOD |= 0x20;               
  143.         TL1 = 0xF3;               
  144.         TH1 = 0xF3;        
  145.         ET1 = 0;               
  146.         TR1 = 1;               
  147. }


  148. void SendByte(unsigned char dat)
  149. {
  150. SBUF = dat;
  151. while(!TI);
  152. TI = 0;
  153. }

  154. void SendStr(unsigned char *s)
  155. {
  156. while(*s!='\0')// \0 表示字符串结束标志,
  157.                 //通过检测是否字符串末尾
  158.   {
  159.   SendByte(*s);
  160.         DelayUs2x(8);
  161.   s++;
  162.   }
  163. }

  164. //unsigned char keyscan()
  165. //{
  166. //        
  167. //        if(KEY1==0)
  168. //        {
  169. //                  ALE=1;
  170. //                  ADDA=0;
  171. //                  ADDB=0;
  172. //                  ADDC=0;
  173. //            ALE=0;
  174. //                num=Read_AD();
  175. //                Voltage=(float)num*5.0/256;
  176. //                sprintf(temp,"V1:%3.2f",Voltage);
  177. //                LCD_Write_String(4,0,temp);
  178. //        }
  179. //         else if(KEY2==0)
  180. //         {
  181. //                                        ALE=1;
  182. //                                        ADDA=1;
  183. //                                        ADDB=0;
  184. //                                        ADDC=0;
  185. //                                        ALE=0;
  186. //                                 num=Read_AD();
  187. //                Voltage=(float)num*5.0/256;
  188. //                sprintf(temp,"V2:%3.2f",Voltage);
  189. //                LCD_Write_String(4,0,temp);
  190. //          }
  191. //                else if(KEY3==0)
  192. //                {
  193. //                                        ALE=1;
  194. //                                        ADDA=0;
  195. //                                        ADDB=1;
  196. //                                        ADDC=0;
  197. //                                        ALE=0;
  198. //                        num=Read_AD();
  199. //                Voltage=(float)num*5.0/256;
  200. //                sprintf(temp,"V3:%3.2f",Voltage);
  201. //                LCD_Write_String(4,0,temp);
  202. //                }
  203. //}
  204. unsigned char keyscan()
  205. {
  206.   if(KEY1==0)
  207.   {
  208.                                 while(1)
  209.                                 {
  210.                                          ST=1;
  211.                  ST=0;
  212.                                          ALE=1;
  213.                                          ADDA=0;
  214.                                          ADDB=0;
  215.                                          ADDC=0;
  216.                                          ALE=0;
  217.            
  218.                                    num=Read_AD();
  219.                 Voltage=(float)num*10.0/256;
  220.                 sprintf(temp,"V1:%4.2f\n",Voltage);
  221.                 LCD_Write_String(0,0,temp);
  222.                                          ST=1;
  223.                  ST=0;
  224.                                          ALE=1;
  225.                                          ADDA=0;
  226.                                          ADDB=0;
  227.                                          ADDC=0;
  228.                                          ALE=0;
  229.            
  230.                                    num=Read_AD();
  231.                 Voltage=(float)num*10.0/256;
  232.                 sprintf(temp,"V1:%4.2f\n",Voltage);
  233.                 LCD_Write_String(0,0,temp);
  234.                 SendStr(temp);
  235.                                          DelayMs(2000);
  236.                                 DelayMs(2000);
  237.                                 DelayMs(2000);
  238.                                          DelayMs(2000);

  239.            ST=1;
  240.                        ST=0;
  241.                                          ALE=1;
  242.                                          ADDA=1;
  243.                                          ADDB=0;
  244.                                          ADDC=0;
  245.                                          ALE=0;

  246.                                     num=Read_AD();
  247.                 Voltage=(float)num*10.0/256;
  248.                 sprintf(temp,"V2:%4.2f\n",Voltage);
  249.                 LCD_Write_String(9,0,temp);
  250.                        ST=1;
  251.                        ST=0;
  252.                                          ALE=1;
  253.                                          ADDA=1;
  254.                                          ADDB=0;
  255.                                          ADDC=0;
  256.                                          ALE=0;

  257.                                     num=Read_AD();
  258.                 Voltage=(float)num*10.0/256;
  259.                 sprintf(temp,"V2:%4.2f\n",Voltage);
  260.                 LCD_Write_String(9,0,temp);
  261.                 SendStr(temp);
  262.                                          DelayMs(2000);
  263.                                          DelayMs(2000);
  264.                                          DelayMs(2000);
  265.                                                   DelayMs(2000);
  266.                                 
  267.            ST=1;
  268.                        ST=0;
  269.                                          ALE=1;
  270.                                          ADDA=0;
  271.                                          ADDB=1;
  272.                                          ADDC=0;
  273.                                          ALE=0;

  274.                                              num=Read_AD();
  275.                 Voltage=(float)num*10.0/256;
  276.                 sprintf(temp,"V3:%4.2f\n",Voltage);
  277.                 LCD_Write_String(0,1,temp);
  278.                        ST=1;
  279.                        ST=0;
  280.                                          ALE=1;
  281.                                          ADDA=0;
  282.                                          ADDB=1;
  283.                                          ADDC=0;
  284.                                          ALE=0;

  285.                                              num=Read_AD();
  286.                 Voltage=(float)num*10.0/256;
  287.                 sprintf(temp,"V3:%4.2f\n",Voltage);
  288.                 LCD_Write_String(0,1,temp);
  289.                 SendStr(temp);
  290.                                          DelayMs(2000);
  291.                                          DelayMs(2000);
  292.                                          DelayMs(2000);
  293.                                                   DelayMs(2000);
  294.                                 
  295.            ST=1;
  296.                        ST=0;
  297.                                          ALE=1;
  298.                                          ADDA=1;
  299.                                          ADDB=1;
  300.                                          ADDC=0;
  301.                                          ALE=0;
  302.                                              num=Read_AD();
  303. ……………………

  304. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
数字电压表.rar (31.49 KB, 下载次数: 17)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:259533 发表于 2017-12-11 09:26 | 只看该作者
这个有原理图吗?
回复

使用道具 举报

板凳
ID:321817 发表于 2018-5-4 09:26 | 只看该作者
这个有原理图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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