找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机电压测量程序

[复制链接]
跳转到指定楼层
楼主
基于51单片机电压测量代码如下:

  1. #include<reg52.h>
  2. #include<intrins.h>// _nop()_函数头文件

  3. sbit key = P3^3;
  4. sbit start = P3^4;
  5. sbit oe = P3^2;
  6. sbit eoc = P3^1;
  7. sbit c = P3^0;

  8. sbit RS = P2^0;   //定义端口
  9. sbit RW = P2^1;
  10. sbit E = P2^2;

  11. //sbit clock = P3^7;



  12. unsigned char da0,da1,da2,da3;
  13. unsigned int  temp;
  14. unsigned char dat;
  15. unsigned char sum;
  16. unsigned d1;
  17. unsigned char lcdd[]="0123456789";
  18. unsigned char folat;


  19. void lcd_w_cmd(unsigned char com);//写命令
  20. void lcd_w_dat(unsigned char dat);//写数据
  21. void display(unsigned char dat);//显示函数
  22. unsigned char lcd_r_start();//读状态函数
  23. void int1(); //初始化1602
  24. void delay(unsigned char t);
  25. void delay1();
  26. void display1(unsigned char dat)
  27. {
  28.         temp = dat*1000;
  29.         da0 = temp/51/1000;//个位;
  30.         da1 = temp/51/100%10;//十分位
  31.         d1 = temp/51/10;
  32.         da2 = d1%10;// 百分位
  33.     da3 = temp/51%10;// 千分位
  34.         lcd_w_cmd(0x0c);
  35.         delay(20);
  36.         lcd_w_cmd(0xc0);
  37.         delay(20);
  38.     delay(2);
  39.         lcd_w_dat('V');
  40.         lcd_w_dat('o');
  41.         lcd_w_dat('l');
  42.         lcd_w_dat('a');
  43.         lcd_w_dat('t');
  44.         lcd_w_dat('a');
  45.         lcd_w_dat('g');
  46.         lcd_w_dat('e');
  47.         lcd_w_dat(' ');
  48.         lcd_w_dat(lcdd[da0]); //       
  49.         lcd_w_dat('.');
  50.         lcd_w_dat(lcdd[da1]);
  51.         lcd_w_dat(lcdd[da2]);
  52.         lcd_w_dat(lcdd[da3]);
  53.         lcd_w_dat('V');
  54. }
  55. /*-----------主函数---------*/

  56. void main()
  57. {
  58.         TCON = 0x04;
  59.         IE = 0x84;
  60.         c = 0;
  61.         int1();
  62.         sum = 0;
  63.         while(1)
  64.         {
  65.                 for(folat = 0;folat<5;folat++)
  66.                 {
  67.                         start = 0;
  68.                         start = 1;
  69.                         start = 0;
  70.                         do
  71.                         {
  72.                          _nop_();
  73.                         }
  74.                         while(eoc==0);
  75.                           oe = 1;
  76.                         dat = P1;
  77.                         sum        = sum+dat;
  78.                         oe = 0;
  79.                 }
  80.                 dat = sum/5;
  81.                 display1(dat);
  82.                 sum=0;
  83.        
  84.         }


  85. }

  86. void key_scan() interrupt 2//外部中断1
  87. {
  88.         if(key==0)
  89.         {
  90.                 delay(10);
  91.                 if(key==0)
  92.                 {
  93.                         c = ~c;
  94.                         start = 0;
  95.                         start = 1;
  96.                         start = 0;
  97.                         folat = 0;
  98.                         sum = 0;
  99.                 }
  100.         }


  101. }

  102. void delay(unsigned char t)//延时函数
  103. {
  104.         unsigned char j,i;
  105.         for(i = 0;i<t;i++)
  106.                 for(j = 0;j<20;j++);
  107. }

  108. void delay1()
  109. {
  110.         _nop_();
  111.         _nop_();
  112.         _nop_();
  113. }
  114. void int1()
  115. {
  116.         lcd_w_cmd(0x3c);  //设置工作方式
  117.         lcd_w_cmd(0x0c); //设置光标
  118.         lcd_w_cmd(0x01); //清屏
  119.         lcd_w_cmd(0x06); //设置输入方式
  120.         lcd_w_cmd(0x80); //设置初始化显示设置
  121. }
  122. /*-----lcd读状态函数----*/
  123. unsigned char lcd_r_start()
  124. {
  125.         unsigned char s;
  126.         RW=1;
  127.         delay1();
  128.         RS=0;
  129.         delay1();
  130.         E=1;
  131.         delay1();
  132.         s=P0;  
  133.         delay1();
  134.         E=0;
  135.         delay1();
  136.         RW=0;
  137.         delay1();
  138.         return(s);

  139. }

  140. /*LCD

  141. 写命令函数

  142. */

  143. void lcd_w_cmd(unsigned char com)
  144. {
  145. unsigned char i;
  146. do
  147. {
  148. i=lcd_r_start();
  149. i=i&0x80;
  150. delay(2);

  151. }

  152. while(i!=0);
  153. RW=0;
  154. delay1();
  155. RS=0;
  156. delay1();
  157. E=1;
  158. delay1();
  159. P0=com;
  160. delay1();
  161. E=0;
  162. delay1();
  163. RW=1;
  164. delay(255);;

  165. }

  166. void lcd_w_dat(unsigned char dat)
  167. {
  168. unsigned char i;
  169. do
  170. {

  171. i=lcd_r_start(); //
  172. i=i&0x80;
  173. delay(2);
  174. }
  175. while(i!=0); // LCD
  176. RW=0;
  177. delay1();
  178. RS=1;
  179. delay1();
  180. E=1;
  181. delay1();
  182. P0=dat;
  183. delay1();
  184. E=0;
  185. delay1();
  186. RW=1;
  187. delay(255);
  188. }

  189.      
复制代码


下载:
电压表.rar (31.76 KB, 下载次数: 55)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:224479 发表于 2017-8-3 18:07 | 只看该作者
正在做用单片机的电压测量,表示不会
回复

使用道具 举报

板凳
ID:371538 发表于 2018-7-23 12:31 | 只看该作者
各个接口怎么接,可以说一下吗
谢谢~
回复

使用道具 举报

地板
ID:406783 发表于 2018-10-8 22:59 | 只看该作者
GZ-T200电阻电压测量仪,淘宝网上有哦,液晶显示呢;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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