找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的ADC0832在LCD1602显示程序与连接图

[复制链接]
跳转到指定楼层
楼主
单片机源程序如下:

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS=P2^0;        /***LCD1602工作端口定义***/
  6. sbit E=P2^2;
  7. sbit RW=P2^1;
  8. //sbit qp=P3^5;                                  /***清屏按键***/
  9. sbit cs=P1^4;                                  /***adc0832端口定义***/
  10. sbit clk=P1^5;
  11. sbit di=P1^6;
  12. sbit DO1=P1^7;
  13. char table5[5];                                        /***用来存储数字转换成字符的***/
  14. uint temp,i,time;                          /***速度、角度、循环/定时时间变量定义***/
  15. uchar data2; //char型
  16. void delay(uint z)                                        /***延时子程序***/
  17. {
  18.         uint x,y;
  19.         for(x=z;x>0;x--)
  20.         for(y=110;y>0;y--);
  21. }
  22. void write_com(uchar com)                                 /***LCD1602写命令子程序***/
  23. {        RW=0;
  24.         RS=0;
  25.         P0=com;
  26.         delay(5);
  27.         E=1;
  28.         delay(5);
  29.         E=0;
  30. }
  31. void write_data(uchar dat)           /***LCD1602写数字子程序***/
  32. {        RW=0;
  33.         RS=1;
  34.         P0= dat;
  35.         delay(5);
  36.         E=1;
  37.         delay(5);
  38.         E=0;

  39. }
  40. void LCD_write_char(uchar x,uchar y,uchar Data1)           /***LCD1602在指定位置写字符子程序***/
  41. {
  42.     if (y == 0)
  43.     {
  44.         write_com(0x80 + x);
  45.     }
  46.     else
  47.     {
  48.         write_com(0xC0 + x);
  49.     }
  50.     write_data( Data1);
  51. }
  52. void init()                  /***LCD1602初始化子程序***/
  53. {
  54.         E=0;
  55.         write_com(0x38);
  56.         write_com(0x0e);
  57.         write_com(0x06);
  58.         write_com(0x01);
  59.         write_com(0x80+ 0x1);
  60. }
  61. void convector_num(uint x)          /***把数字 转化成 字符串***/
  62. {
  63.         if(x<100)
  64.         {
  65.         table5[0]=x/10+0x30;
  66.         table5[1]=x%10+0x30;
  67.         table5[2]=' ';
  68.         table5[3]=' ';
  69.         table5[4]=' ';
  70.         }
  71.         else if(x>=100)
  72.         {
  73.         table5[0]=x/100+0x30;
  74.         table5[1]=(x/10)%10+0x30;
  75.         table5[2]=x%10+0x30;
  76.         table5[3]=' ';
  77.         table5[4]=' ';
  78.         }               
  79. }

  80. void convector_float(float x)          /***把数字 转化成 float***/
  81. {
  82.         uint y=x*10;

  83.         table5[0]=y/10+0x30;
  84.         table5[1]='.';
  85.         table5[2]=y%10+0x30;
  86.         table5[3]=' ';
  87.         table5[4]=' ';               
  88. }

  89. void zhczfc(uint x)          /***把数字 转化成 字符串***/
  90. {
  91.         if(x<10)
  92.         {
  93.         table5[0]=x/1000+0x30;
  94.         table5[1]= '.';
  95.         table5[2]=x%1000/100+0x30;
  96.         table5[3]= x%100/10+0x30;
  97.         table5[4]= x%10+0x30;
  98.         }
  99.         if(x>=10)
  100.         {
  101.         table5[0]=x/10000+0x30;
  102.         table5[1]=x%10000/1000+0x30;
  103.         table5[2]= '.';
  104.         table5[3]=x%1000/100+0x30;
  105.         table5[4]= x%100/10+0x30;
  106.         }               
  107. }

  108. readadc0832()           /***adc0832数据量读取***/
  109. {
  110.         uchar j;
  111.         data2=0;
  112.         data2<<=3;
  113.         data2|=3;
  114.         cs=0;
  115.         for(i=0;i<3;i++)
  116.         {
  117.                 clk=0;
  118.                 delay(5);
  119.                 di=data2;
  120.                 data2>>=1;
  121.                 delay(5);
  122.                 clk=1;
  123.                 di=0 ;
  124.         }
  125.         clk=0;
  126.         delay(5);
  127.         clk=1;
  128.         for(j=0;j<8;j++)
  129.         {
  130.                 clk=0;
  131.                 delay(5);
  132.                 if(DO1==1)data2|=0x01;
  133.                 data2<<=1;
  134.                 delay(5) ;
  135.                 clk=1;
  136.         }
  137.         cs=1;
  138. }

  139. float voltage;        //电压值
  140. void main()
  141. {        
  142.         init();                                 /***lcd1602初始化***/
  143.         delay(100);
  144.         while(1)
  145.         {        
  146.                 readadc0832();

  147.                 convector_num(data2);
  148.                 for(i=0;i<5;i++)
  149.                 {
  150.                         LCD_write_char(i,0,table5[i]);        
  151.                         delay(20);
  152.                 }

  153.                 voltage=data2*5.0/255;                  /***500为5*100,100为保留2位小数***/
  154.                 //zhczfc(data2);
  155.                 convector_float(voltage);
  156.                 for(i=0;i<5;i++)
  157.                 {
  158.                         LCD_write_char(i,1,table5[i]);        
  159.                         delay(20);
  160.                 }
  161. }
  162. }
复制代码



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

使用道具 举报

沙发
ID:495323 发表于 2019-8-1 14:17 | 只看该作者
能显示吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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