找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ADC0809多通道测量电压proteus仿真和源程序 原理图

  [复制链接]
跳转到指定楼层
楼主
给51黑电子论坛的朋友们分享一个51单片机+ADC0809多通道(一共8个通道)测量电压的proteus工程,经单片机ALE的2MHz一分频后得到1MHz的时钟提供给ADC0809
数码管显示说明:最后一位为通道号,程序中已用两点隔开
在此为了方便电路连接
实际电路中请用三极管或专用芯片驱动三极管
下面是仿真原理图:
8通道电压表的所有资料下载:
ADC0809多通道测电压.rar (68.79 KB, 下载次数: 380)


部分单片机源程序如下(完整代码请下载附件):
  1. #include "adc0809.c"
  2. #define LED_Data P2
  3. #define A 10
  4. #define U 11
  5. sbit  LED1 = P3^0;
  6. sbit  LED2 = P3^1;
  7. sbit  LED3 = P3^2;
  8. sbit  LED4 = P3^3;
  9. sbit  dp   = P3^5;
  10. #define LED_slect  P3

  11. static unsigned char dispdata[4];

  12. unsigned char code num[] = {
  13.                                                                                                           0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  14.                                                                                                           0x7d,0x07,0x7f,0x6f,0x77,0x3e
  15.                                                                                                    };

  16. void decodenum(float adv,unsigned char chn)
  17. {
  18.   unsigned int temp;
  19.   temp = (unsigned int)(adv*100);
  20.   dispdata[0] = temp/100;
  21.   dispdata[1] = temp/10%10;
  22.   dispdata[2] = temp%10;
  23.   dispdata[3] = chn;
  24. }

  25. void  dispone(unsigned char LED,bit ifpoint,unsigned char number)   //,number 0--9
  26. {     
  27.         switch(LED)
  28.         {
  29.                 case 0:LED1 = 0;break;
  30.                 case 1:LED2 = 0;break;
  31.                 case 2:LED3 = 0;break;
  32.                 case 3:LED4 = 0;break;
  33.                 default: LED_slect = 0xff;
  34.         }
  35.         if(ifpoint) dp = 1;
  36.         else dp = 0;
  37.         LED_Data = num[number]|0x80;
  38.         delayus(200);
  39.         LED_slect = 0xff;         
  40. }

  41. void disp()
  42. {
  43.         unsigned char i;
  44.         bit point;
  45.         for(i = 0;i<4;i++)
  46.         {
  47.                 if(i == 1) point = 0;
  48.                 else point = 1;
  49.                 dispone(i,point,dispdata[i]);
  50.         }
  51. }
复制代码

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:185768 发表于 2017-4-3 21:14 | 只看该作者
,51黑有你更精彩
回复

使用道具 举报

板凳
ID:185482 发表于 2017-4-4 02:15 | 只看该作者
很好,学习了
回复

使用道具 举报

地板
ID:195221 发表于 2017-5-1 12:37 | 只看该作者
谢谢楼主 很有用
回复

使用道具 举报

5#
ID:238540 发表于 2017-10-11 11:20 | 只看该作者
厉害了
回复

使用道具 举报

6#
ID:252028 发表于 2017-12-1 11:20 | 只看该作者
真不错
回复

使用道具 举报

7#
ID:162958 发表于 2018-2-1 08:35 | 只看该作者
谢谢楼主,很有用
回复

使用道具 举报

8#
ID:319215 发表于 2018-5-6 16:31 | 只看该作者
能请教一下这个可不可以加个按键选择通道的功能吗,非常感谢~
回复

使用道具 举报

9#
ID:334233 发表于 2018-5-20 15:48 | 只看该作者
强,受教了
回复

使用道具 举报

10#
ID:334233 发表于 2018-5-20 15:54 | 只看该作者
帮忙看下这个吧,做出来了运行不了LED_0        EQU         30H
LED_1         EQU         31H
LED_2         EQU         32H                                   ;存放段码
ADC                EQU                35H
CLOCK        BIT                P2.4                        ;定义ADC0808时钟位
ST                 BIT         P2.5
EOC         BIT         P2.6
OE                 BIT         P2.7

                ORG         00H
                SJMP        START
                ORG                0BH
                LJMP        INT_T0

START:        MOV                LED_0,#00H
                MOV                LED_1,#00H
                MOV                LED_2,#00H
                MOV                DPTR,#TABLE                ;段码表首地址
                MOV                TMOD,#02H
                MOV                TH0,#245
                MOV                TL0,#00H
                MOV                IE,#82H
                SETB        TR0

WAIT:         CLR         ST                                 
                SETB         ST
                CLR         ST                                ;启动AD转换
                JNB         EOC,$                        ;等待转换结束
                SETB         OE
                MOV         ADC,P1                        ;读取AD转换结果
                CLR         OE               
                MOV         A,ADC
                MOV         B,#100                        ;AD转换结果转换成BCD码
                DIV         AB
                MOV         LED_2,A
                MOV         A,B
                MOV         B,#10
                DIV         AB
                MOV         LED_1,A
                MOV         LED_0,B
                LCALL        DISP
                SJMP         WAIT

INT_T0:        CPL                CLOCK                         ;提供ADC0808时钟信号
                RETI

DISP:        MOV                A,LED_0                        ;显示子程序
                MOVC        A,@A+DPTR
                CLR                P2.3
                MOV                P0,A
                LCALL        DELAY
                SETB        P2.3

                MOV                A,LED_1
                MOVC        A,@A+DPTR
                CLR                P2.2
                MOV                P0,A
                LCALL        DELAY
                SETB        P2.2

                MOV                A,LED_2
                MOVC        A,@A+DPTR
                CLR                P2.1
                MOV                P0,A
                LCALL        DELAY
                SETB        P2.1
                RET

DELAY:        MOV                R6,#10                        ;延时5毫秒
D1:                MOV                R7,#250
                DJNZ        R7,$
                DJNZ        R6,D1
                RET

TABLE:         DB                 3FH,06H,5BH,4FH,66H
                DB                 6DH,7DH,07H,7FH,6FH
                END

QQ截图20180520155135.png (107.22 KB, 下载次数: 41)

QQ截图20180520155135.png
回复

使用道具 举报

11#
ID:353123 发表于 2019-1-3 17:40 | 只看该作者
不错哟
回复

使用道具 举报

12#
ID:487754 发表于 2019-3-10 10:57 | 只看该作者
数码管应该用HC573驱动
回复

使用道具 举报

13#
ID:570723 发表于 2019-6-24 13:45 | 只看该作者
怎么下载?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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