标题: 单片机数字电压表proteus仿真 ADC0809模数转换 液晶显示0~50V [打印本页]

作者: 51黑ff    时间: 2016-9-4 21:00
标题: 单片机数字电压表proteus仿真 ADC0809模数转换 液晶显示0~50V

基于单片机的数字电压表proteus仿真 ADC0809模数转换 液晶显示0~50V

程序如下:
  1. #include<reg51.h>
  2. #include<LCD1602.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. uint i,j,temp,temp1;
  6. uint jj=0;
  7. uint kk=0;
  8. uint jjj=0;
  9. uint kkk=0;
  10. uint jjjj=0;
  11. uint kkkk=0;
  12. uint getdata,count,d;
  13. sbit ST=P3^7;
  14. sbit OE=P3^5;
  15. sbit EOC=P3^6;
  16. sbit CLK=P3^4;
  17. sbit k1=P2^1;
  18. sbit k2=P2^2;
  19. sbit k3=P2^3;
  20. char tt;
  21. void Delay(uint n)
  22. {
  23.         uint x;
  24.         while(n--)
  25.         {
  26.                 x=5000;
  27.                 while(x--);        
  28.         }
  29. }
  30. void TimeInitial()
  31. {
  32. TMOD=0x10;
  33. TH1=(65536-200)/256;
  34. TL1=(65536-200)%256;
  35. EA=1;
  36. ET1=1;
  37. TR1=1;

  38. }

  39. void disp_result(void)
  40. {
  41.         LCD_set_position(2);
  42.     LCD_write_data(5*getdata/256+0x30);//各位数据显示
  43.         LCD_printc('.');//小数点
  44.         LCD_write_data(jj*10/256+0x30);//十分位显示
  45.         LCD_write_data(kk*10/256+0x30);//百分位显示
  46.         LCD_printc('v');//显示电压符号"v"
  47. }
  48.   void disp_result1(void)
  49. {
  50.         LCD_set_position(2);
  51.         if((15*getdata/256)<=10)
  52.         {
  53.     LCD_write_data(15*getdata/256+0x30);//各位数据显示
  54.         LCD_printc('.');//小数点
  55.         LCD_write_data(jjj*10/256+0x30);//十分位显示
  56.         LCD_write_data(kkk*10/256+0x30);//百分位显示
  57.         LCD_printc('v');//显示电压符号"v"
  58.         }
  59.         else
  60.         LCD_prints(" not ");
  61. }

  62. void disp_result2(void)
  63. {
  64.         LCD_set_position(2);
  65.     LCD_write_data(5*getdata/256+0x30);//各位数据显示
  66.         LCD_write_data(jjjj*10/256+0x30);//十分位显示
  67.         LCD_printc('.');//小数点
  68.         LCD_write_data(kkkk*10/256+0x30);//百分位显示
  69.         LCD_printc('v');//显示电压符号"v"
  70. }
  71. void disp_result3(void)
  72. {
  73.         LCD_set_position(2);
  74.     LCD_prints("0.00v");//显示电压符号"v"
  75. }                                    
  76. void get(void)
  77. {
  78. ST=0;
  79. OE=0;
  80. ST=1;
  81. Delay(1);
  82. ST=0;   //只需要启动一下,不需要一直保持
  83. while(EOC==0);
  84. OE=1;
  85. Delay(1);
  86. getdata=P1;
  87. OE=0;
  88. jj=5*getdata%256 ;
  89. kk=10*jj%256 ;
  90. jjj=15*getdata%256;
  91. kkk=10*jjj%256;
  92. jjjj=5*getdata%256;
  93. kkkk=10*jjjj%256;
  94. }                  
  95. void main(void)
  96. {
  97. tt=0+0x30;
  98. TimeInitial();
  99. LCD_initial();
  100. LCD_set_position(0);
  101. LCD_printc('u');
  102. LCD_printc('=');
  103. //LCD_write_data(tt) ;     //输出一个字节数据到LCD
  104. LCD_set_position(8);
  105. LCD_prints(" mofan ");
  106. LCD_set_position(0x40);
  107. LCD_prints(" luoyuanfeng");
  108. while(1)
  109.   {
  110.         k1=1;
  111.             k2=1;
  112.             k3=1;        
  113.                 get();
  114.             if(k1==0)
  115.                 disp_result2();
  116.                 if(k2==0)
  117.                 disp_result1();
  118.                 if(k3==0)  
  119.                 disp_result();
  120.                 if(k1&&k2&&k3==1)
  121.                 disp_result3();
  122.         
  123.   }
  124. }
  125. void t1() interrupt 3 using 0
  126. {
  127.   TH1=(65536-200)/256;
  128.   TL1=(65536-200)%256;
  129.   CLK=~CLK;
  130. }

复制代码


全部资料下载(管理提醒:此程序是错误的 大家切勿下载):
项目.zip (318.51 KB, 下载次数: 118)
移步:http://www.51hei.com/bbs/dpj-147212-1.html

作者: 1039629873    时间: 2016-11-30 18:12
是数码管?lcd就好
作者: 小小号    时间: 2017-5-8 19:28
先下载看看 多谢分享
作者: 123good    时间: 2017-5-17 19:05
借鉴学习了
作者: 小小号    时间: 2017-5-19 21:42
楼主 这个没缺0809模块吗,简直是牛头不对马嘴啊 大家不要下载

作者: XIERUXIAN    时间: 2017-12-5 22:21
很好5555555555555
作者: XIERUXIAN    时间: 2017-12-5 22:21
感谢分享,很不错
作者: denminshen    时间: 2018-7-11 18:23
谢谢楼主,下载学习学习!
作者: 12345678..    时间: 2018-12-6 10:19
感谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1