找回密码
 立即注册

QQ登录

只需一步,快速开始

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

(修复完善版51单片机ADC0808两路输入的数字电压表设计 Proteus仿真程序

[复制链接]
ID:1153344 发表于 2026-6-10 22:59 | 显示全部楼层 |阅读模式
针对http://www.51hei.com/bbs/dpj-188270-1.html 做了如下修改
修复了一些接线错误  --- 原版IN1通道接线错误 以及ADD A-C 接反
增加按键切换通道显示
  1. #include<reg51.h>
  2. unsigned char a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71},b[4],c=0x01;

  3. sbit  START=P2^4;
  4. sbit  OE=P2^6;
  5. sbit  EOC=P2^5;
  6. sbit  add_a=P2^0;
  7. sbit  add_b=P2^1;
  8. sbit  add_c=P2^2;
  9. sbit  led=P2^7;
  10. sbit  buzzer=P2^3;
  11. sbit  KEY=P1^4;

  12. unsigned char disp_ch=0;

  13. void Delay1ms(unsigned int count)
  14. {
  15.         unsigned  int i,j;
  16.         for(i=0;i<count;i++)
  17.         for(j=0;j<120;j++);
  18. }

  19. void show()
  20. {
  21.         unsigned int r;
  22.         for(r=0;r<4;r++)
  23.         {
  24.                 P1=(c<<r);
  25.                 P3=b[r];
  26.                 if(r==2)
  27.                 P3=P3|0x80;
  28.                 Delay1ms(1);
  29.         }
  30. }

  31. void KeyScan(void)
  32. {
  33.         P1 |= 0x10;
  34.         if(KEY==0)
  35.                 disp_ch=1;
  36.         else
  37.                 disp_ch=0;
  38. }

  39. void main(void)
  40. {
  41.         unsigned int addata=0,addata2=0,i,disp_val=0;
  42.         while(1)
  43.         {
  44.                 KeyScan();

  45.                 add_a=0;
  46.                 add_b=0;
  47.                 add_c=0;
  48.                 Delay1ms(1);
  49.                 START=1;
  50.                 START=0;
  51.                 while(EOC==0);
  52.                 OE=1;
  53.                 addata=P0;
  54.                 if(addata>=0x40)
  55.                 {
  56.                         for(i=0;i<100;i++)
  57.                         {
  58.                                 led=~led;
  59.                                 buzzer=~buzzer;
  60.                         }
  61.                         led=1;
  62.                         buzzer=1;
  63.                 }
  64.                 else
  65.                 {
  66.                         led=0;
  67.                         buzzer=0;
  68.                 }
  69.                 OE=0;

  70.                 add_a=1;
  71.                 add_b=0;
  72.                 add_c=0;
  73.                 Delay1ms(1);
  74.                 START=1;
  75.                 START=0;
  76.                 while(EOC==0);
  77.                 OE=1;
  78.                 addata2=P0;
  79.                 if(addata2>=0x80)
  80.                 {
  81.                         for(i=0;i<100;i++)
  82.                         {
  83.                                 led=~led;
  84.                                 buzzer=~buzzer;
  85.                         }
  86.                         led=1;
  87.                         buzzer=1;
  88.                 }
  89.                 else
  90.                 {
  91.                         led=0;
  92.                         buzzer=0;
  93.                 }
  94.                 OE=0;

  95.                 disp_val=0;
  96.                 if(disp_ch==0)
  97.                         disp_val=addata*1.96;
  98.                 else
  99.                         disp_val=addata2*1.96;

  100.                 b[0]=a[disp_val%10];
  101.                 b[1]=a[disp_val/10%10];
  102.                 b[2]=a[disp_val/100%10];
  103.                 b[3]=a[disp_val/1000];

  104.                 for(i=0;i<=200;i++)
  105.                 {
  106.                         show();
  107.                 }
  108.         }
  109. }
复制代码



两路输入的数字电压表设计.zip

128.82 KB, 下载次数: 0, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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