找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于C51单片机和ADC0804显示电压以及0-255数值(仿真加程序)

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5.        
  6. uchar code table1[]="0123456789";
  7. uchar  table2[]="Vo:0.00V;Nu:000";          
  8. uchar  table3[]="made by Xfei";         

  9. uchar num,x,adval,wen,dy,date;
  10. sbit lcden=P3^2;  //使能
  11. sbit lcdrs=P3^0;  //数据/指令
  12. sbit lcdrw=P3^1;  //读/写
  13. sbit lcds1=P3^3;  
  14. sbit lcds2=P3^4        ;
  15. sbit adwr=P3^6;                //写信号输入端
  16. sbit adrd=P3^7;                //读信号输入端
  17. sbit adcs=P3^5;            //片选信号


  18. //延时ms//
  19. void  delay(uint x)
  20. {
  21.    uint i,j;
  22.    for(i=0;i<x;i++)
  23.      for(j=0;j<110;j++);
  24. }


  25. //MCU写指令//
  26. void write_com(uchar com)
  27. {
  28.    lcdrs=0;
  29.    P2=com;
  30.    delay(5);
  31.    lcden=1;
  32.    delay(5);
  33.    lcden=0;
  34. }                                  


  35. //MCU写数据//
  36. void write_date(uchar date)
  37. {
  38.    lcdrs=1;
  39.    P2=date;
  40.    delay(5);
  41.    lcden=1;
  42.    delay(5);
  43.    lcden=0;
  44. }


  45. //初始化//
  46. void init()
  47. {
  48.   adcs=0;
  49.   lcdrw=0;
  50.   lcden=0;
  51.    write_com(0x38);         
  52.    write_com(0x0c);
  53.    write_com(0x06);
  54.    write_com(0x01);         
  55. /*
  56.     while(table3[num]!='\0')
  57.     {
  58.         write_date(table3[num++]);
  59.         delay(100);
  60.         }
  61.         lcden=1;
  62.         delay(1000);
  63.         lcden=0;
  64.    

  65.         write_com(0x80+0x40);
  66.         num=0;//很重要!
  67.         while(table2[num]!='\0')
  68.            {
  69.                     write_date(table2[num++]);
  70.            }                               */
  71. }

  72. /*小改嘻嘻*/


  73. //显示第一行//
  74. void disp1()
  75. {
  76. uchar i;
  77. write_com(0x80+0x00);
  78. for (i=0;i<12;i++)
  79.         {
  80.         write_date(table3[i]);
  81.         delay(100);
  82.         }
  83. }


  84. //显示第二行//
  85. void disp2()
  86. {
  87. uchar i;
  88. write_com(0x80+0x40);
  89. for (i=0;i<12;i++)
  90.         {
  91.         write_date(table2[i]);
  92.         delay(100);
  93.         }
  94. }

  95.    
  96. void set_shu1(uchar  add,uchar date)
  97.    {
  98.      uchar bai,shi,ge;
  99.          bai=date/51;
  100.          shi=((date%51)*10/51);         
  101.          ge=((date%51)*10%51)*10/51;
  102.          write_com(0x80+0x40+add);                 //地址
  103.              {
  104.                  write_date(table1[bai]);          //百位数值
  105.                  }                                                         
  106.          write_com(0x80+0x40+add+2);         //地址右移二位
  107.              {
  108.                  write_date(table1[shi]);         //十位数值
  109.                  }
  110.           write_com(0x80+0x40+add+3);         //地址右移三位
  111.              {
  112.                  write_date(table1[ge]) ;         //个位数值 //将值转换成具体数
  113.              }         
  114.         }         


  115. void set_shu2(uchar  add,uchar date)
  116. {
  117.      uchar bai,shi,ge;
  118.          bai=date/100;
  119.          shi=date%100/10;
  120.          ge=date%10;
  121.          write_com(0x80+0x40+add);               
  122.          {
  123.          write_date(table1[bai]);
  124.          }
  125.          write_com(0x80+0x40+add+1);
  126.         {
  127.          write_date(table1[shi]);
  128.          }
  129.          write_com(0x80+0x40+add+2);         
  130.         {
  131.          write_date(table1[ge])  ;
  132.          }                                           //将电压值转换为0~225的值*/
  133. }

  134. void st_ad() //开AD
  135. {
  136.    adwr=1;
  137.    _nop_();
  138.    adwr=0;
  139.    _nop_();
  140.    adwr=1;

  141. }
  142. void red_ad()//读AD
  143. {
  144.    adrd=1;
  145.    _nop_();
  146.    adrd=0;
  147.    _nop_();
  148.    adrd=0;

  149. }


  150. void main()
  151. {       
  152.    
  153.         init();
  154.         disp1();
  155.         disp2();
  156.        
  157.        
  158.          while(1)
  159.          {           
  160.            write_com(0x80+0x40+7);
  161.           
  162.            st_ad();
  163.            set_shu1(3,adval);
  164.            set_shu2(12,adval);
  165.            red_ad();
  166.            adval=P1;   //P1的值送给date
  167.           // dy=adval/255;
  168.           // P2=wen;
  169.           }
  170.           //while(1);

  171. }
复制代码

所有资料51hei提供下载:
ADC0804显示电压.rar (61.54 KB, 下载次数: 69)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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