找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机测量气压与上位机通信

[复制链接]
跳转到指定楼层
楼主
ID:789726 发表于 2021-5-5 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于单片机的测量气压与上位机通信
  1. #include<reg52.h>                        

  2. typedef unsigned int u16;         
  3. typedef unsigned char u8;

  4. u8 AD_val;
  5. u8 j=0;

  6. sbit  RS=P2^4;
  7. sbit  RW=P2^3;
  8. sbit  E=P2^2;

  9. sbit  LED1=P1^5;
  10. sbit  LED2=P1^6;
  11. sbit  LED3=P1^7;

  12. sbit cs=P1^0;
  13. sbit clk=P3^6;
  14. sbit dio=P3^7;

  15. u8 str[]="qi_ya_:";
  16. u8 str1[]="KPa";
  17. void delayms(u16 ms)  //延时函数
  18. {
  19.         u8 i;
  20.         while(ms--)
  21.         for(i=0;i<123;i++);
  22. }

  23. void w_com(u8 com)    //写指令寄存器
  24. {
  25.           RS=0;
  26.         RW=0;
  27.         E=1;
  28.         P0=com;
  29.         E=0;
  30.         delayms(1);
  31. }

  32. void w_dat(u8 dat)  //写数据寄存器
  33. {
  34.          RS=1;
  35.         RW=0;
  36.         E=1;
  37.         P0=dat;
  38.         E=0;
  39.         delayms(1);        
  40. }

  41. void lcd_ini(void)  //液晶屏初始化
  42. {
  43.         delayms(10);
  44.         w_com(0x38);
  45.         delayms(10);
  46.         w_com(0x0c);
  47.         delayms(10);
  48.         w_com(0x06);
  49.         delayms(10);
  50.         w_com(0x01);
  51.         delayms(10);
  52.         w_com(0x38);
  53.         delayms(10);
  54. }

  55. void UsartInit()  //串口接收初始化
  56. {
  57.         SCON=0X50;                        
  58.         TMOD=0X20;                        
  59.         PCON=0X00;                        
  60.         TH1=250;                                
  61.         TL1=250;
  62.         ES=1;                                                
  63.         EA=1;                                                
  64.         TR1=1;                                       
  65. }

  66. u8 A_D()          //AD0832 AD模数转换初始化函数
  67. {
  68.         u8 i,dat;
  69.         cs=1;
  70.         
  71.         clk=0;
  72.         cs=0;
  73.         clk=1;

  74.         clk=0;
  75.         dio=1;
  76.         clk=1;

  77.         clk=0;
  78.         dio=0;
  79.         clk=1;
  80.         
  81.         clk=0;
  82.         dio=1;
  83.         clk=1;
  84.         
  85.         for(i=0;i<8;i++)
  86.         {
  87.                 clk=1;
  88.                 clk=0;
  89.                 dat<<=1;
  90.                 dat|=(u8)dio;
  91.         }
  92.         cs=1;
  93.         return dat;
  94. }


  95. void main()           //主函数
  96. {        
  97.     u8 i,r;
  98.         double s,l;
  99.     lcd_ini();
  100.     w_com(0x80);
  101.     for(i=0;str[i]!='\0';i++)
  102.     w_dat(str[i]);
  103.         w_com(0xcb);
  104.         for(i=0;str1[i]!='\0';i++)
  105.     w_dat(str1[i]);
  106.         UsartInit();
  107.         LED1=0;
  108.     LED2=0;
  109.     LED3=0;  
  110.         while(1)
  111.         {  EA=0;
  112.            AD_val=A_D();
  113.            EA=1;

  114.            s=(1.0/256)*AD_val*5;
  115.            l=((s-0.27)/1.8);
  116.            r=100*l;
  117.            j=r;

  118.            EA=0;
  119.            w_com(0xc7);
  120.            w_dat(r/100+0x30);
  121.            w_dat(r/10%10+0x30);
  122.            w_dat(r%10+0x30);
  123.            EA=1;

  124.            if(r<20)
  125.            {
  126.                    LED1=1;
  127.                 LED2=0;
  128.                 LED3=0;
  129.                 }
  130.                 if(r<40&&r>20)
  131.            {
  132.                    LED1=0;
  133.                 LED2=1;
  134.                 LED3=0;
  135.                 }
  136.                 if(r>40)
  137.            {
  138.                    LED1=0;
  139.                 LED2=0;
  140.                 LED3=1;
  141.                 }
  142.            delayms(100);   
  143.         }               
  144. }

  145. void Usart() interrupt 4         //串口发送中断函数
  146. {
  147.         u8 receiveData;
  148.         receiveData=SBUF;
  149.         RI=0;
  150.         SBUF=j;
  151.         while(!TI);                        
  152.         TI=0;                                                
  153. }

复制代码

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

使用道具 举报

沙发
ID:857846 发表于 2021-11-23 15:03 | 只看该作者
有详细资料嘛,作者
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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