找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于ADC0804的1602显示电压仿真和单片机代码

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


单片机源程序如下:
  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 code table2[]="DianYa:0.00V";          
  8. uchar code table3[]="made  by  JCLong";         

  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. void  delay(uint z)
  19. {
  20.    uint x,y;
  21.    for(x=z;x>0;x--)
  22.      for(y=110;y>0;y--);



  23. }
  24. void write_com(uchar com)
  25. {
  26.    lcdrs=0;
  27.    P2=com;
  28.    delay(5);
  29.    lcden=1;
  30.    delay(5);
  31.    lcden=0;


  32. }                                  


  33. void write_date(uchar date)
  34. {
  35.    lcdrs=1;
  36.    P2=date;
  37.    delay(5);
  38.    lcden=1;
  39.    delay(5);
  40.    lcden=0;


  41. }


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

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

  69. }
  70.    
  71. void set_shu(uchar  add,uchar date)
  72.    {

  73.      uchar shu,bai,shi,ge;
  74.          //date=date/225;
  75.          /*bai=date/100;
  76.          shi=date/100%10;
  77.          ge=date%10;
  78.          write_com(0x80+0x40+add);                //将电压值转换为0~225的值
  79.          write_date(table1[bai]);
  80.          write_date(table1[shi]);         
  81.          write_date(table1[ge])  ;        */
  82.          bai=date/45;
  83.          //shi=bai*10/45;
  84.          shi=((date%45)*10/45);         
  85.          ge=((date%45)*10%45)*10/45;
  86.          write_com(0x80+0x40+add);
  87.              {
  88.                  write_date(table1[bai]);
  89.                  }                                                         //将值转换成具体数
  90.          write_com(0x80+0x40+add+2);
  91.              {
  92.                  write_date(table1[shi]);
  93.                  }
  94.           write_com(0x80+0x40+add+3);         
  95.              {
  96.                  write_date(table1[ge]) ;
  97.         }          }

  98. void st_ad() //开AD
  99. {
  100.    adwr=1;
  101.    _nop_();
  102.    adwr=0;
  103.    _nop_();
  104.    adwr=1;

  105. }
  106. void red_ad()//读AD
  107. {
  108.    adrd=1;
  109.    _nop_();
  110.    adrd=0;
  111.    _nop_();
  112.    adrd=0;

  113. }

  114. void main()
  115. {       
  116.    
  117.         init();
  118.        
  119.        
  120.          while(1)
  121.          {           
  122. ……………………

  123. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
基于ADC0804的1602显示电压.zip (17.06 KB, 下载次数: 168)

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

使用道具 举报

沙发
ID:218728 发表于 2017-7-11 20:13 | 只看该作者
bai=date/45;           //shi=bai*10/45;          shi=((date%45)*10/45);                   ge=((date%45)*10%45)*10/45; 楼主能给这段代码解释一下吗,我不太懂,谢了
回复

使用道具 举报

板凳
ID:218728 发表于 2017-7-11 20:13 | 只看该作者
bai=date/45;
         //shi=bai*10/45;
         shi=((date%45)*10/45);         
         ge=((date%45)*10%45)*10/45;
楼主能给这段代码解释一下吗,我不太懂,谢了
回复

使用道具 举报

地板
ID:443783 发表于 2019-3-18 14:10 | 只看该作者
应该是百位=date/45//数据除以45,45应该是最总数据的算法
回复

使用道具 举报

5#
ID:345989 发表于 2019-6-22 17:57 | 只看该作者
C语言刚学没多久,单片机也是刚入门,所以想下载楼主的完整程序看一下
回复

使用道具 举报

6#
ID:713781 发表于 2020-4-23 12:56 | 只看该作者
所以为什么除以45啊
回复

使用道具 举报

7#
ID:730449 发表于 2020-4-23 17:55 来自手机 | 只看该作者
8位的电压数据,有255个点,基准电压是5V,平均每个等份的电压为5/255 V,而单片机得到的0~255的数乘上5/255 就是电压值!即,(date*5)/255=date/45
回复

使用道具 举报

8#
ID:347629 发表于 2020-5-31 15:00 | 只看该作者
马永练 发表于 2020-4-23 17:55
8位的电压数据,有255个点,基准电压是5V,平均每个等份的电压为5/255 V,而单片机得到的0~255的数乘上5/2 ...

5和255约分之后是51,也就是data/51  ,45怕是不对吧
回复

使用道具 举报

9#
ID:292460 发表于 2020-6-10 11:00 | 只看该作者
感谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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