找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2460|回复: 0
收起左侧

基于ADC0809的单路数码管电压表设计(带Proteus仿真)

[复制链接]
ID:577554 发表于 2021-6-11 15:06 | 显示全部楼层 |阅读模式
设计,大部分都是跟着学霸的样子照猫画虎写出来的,做了些适当的改动
代码和功能都比较简陋,代码有注释,适合单片机入门参考(仿真用的是proteus8.6版本,低版本的可能打不开)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

仿真图

仿真图


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管断选码,不显示小数点
  5. unsigned char b[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //显示小数点
  6. sbit  START=P2^4;
  7. sbit  OE=P2^6;
  8. sbit  EOC=P2^5;
  9. sbit  add_a=P2^2;
  10. sbit  add_b=P2^1;
  11. sbit  add_c=P2^0;
  12. sbit  led=P2^7;
  13. sbit  buzzer=P2^3;
  14. sbit  S_1=P0^0;                         
  15. sbit S_2=P0^1;
  16. sbit S_3=P0^2;
  17. sbit S_4=P0^3 ;
  18. void Delay1ms(unsigned int count)
  19. {
  20.         unsigned  int i,j;
  21.         for(i=0;i<count;i++)
  22.         for(j=0;j<120;j++);
  23. }



  24. void main(void)
  25. {
  26.         unsigned int addata=0,i;   
  27.                 unsigned char temp0=0,temp1=0,temp2=0;
  28.         while(1)
  29.   {              //采集第一路信号
  30.     add_a=0;
  31.     add_b=0;
  32.     add_c=0;   
  33.                           START=0;
  34.                 START=1;
  35.                                 Delay1ms(5);
  36.                                 START=0;
  37.                 while(EOC!=1);
  38.                 OE=1;
  39.                 addata=P1;
  40.                          OE=0;
  41.                                          if(addata>=0xcc)    //当大于4.0v时,则使用LED和蜂鸣器报警
  42.         {
  43.                 for(i=0;i<100;i++)
  44.                 {
  45.                         led=~led;
  46.                         buzzer=~buzzer;
  47.                 }
  48.                 led=1;   //控制发光二极管D2闪烁,发出光报警信号
  49.                 buzzer=1;     //控制蜂鸣器发声,发出声音报警信号
  50.         }
  51.         else     //否则取消报警
  52.         {
  53.                 led=0;     //控制发光二极管D2灭
  54.                 buzzer=0;  //控制蜂鸣器不发声
  55.         }
  56.                  
  57.        
  58.         addata=addata*100/51; //  二进制输出数据最高是255,仿真电压最高是5v,255/5=51,最小单位是51
  59.         temp0=addata%10;           // 取个位数 例如输出数据为123,123/10=12.3,addata为整数,不能等于12.3,只能取余数3
  60.         temp1=(addata/10)%10;  // 取十分位数       
  61.         temp2=(addata/100)%10; //取百分位数         

  62.                 for(i=0;i<=200;i++)
  63.                   {
  64.         
  65.         S_1 = 0;                 //第一个数码管
  66.         S_2 = 1;
  67.         S_3 = 1;
  68.         S_4= 1;
  69.         P3=b[temp2];             //选取带有小数点的段选码
  70.         Delay1ms(10);               //延时
  71.         S_1 = 1;                //消隐
  72.                
  73.   //十分位
  74.         S_1 = 1;
  75.         S_2 = 0;                   //取第二个数码管
  76.         S_3= 1;
  77.         S_4= 1;
  78.         P3=a[temp1];              //选取不带有小数点的段选码
  79.   Delay1ms(5);
  80.         S_2 = 1;                    //消隐
  81.        
  82.   //百分位
  83.         S_1 = 1;
  84.         S_2 = 1;
  85.         S_3= 0;                      //取第三个数码管
  86.         S_4= 1;
  87.         P3=a[temp0];                //选取不带有小数点的段选码
  88. Delay1ms(5);  
  89.   S_3= 1;

  90.            }
  91. }}               
复制代码

所有资料51hei提供下载:
ADC0809数码管电压表.zip (134.83 KB, 下载次数: 44)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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