找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1696|回复: 1
收起左侧

51单片机小白改进下郭天祥老师的adc0804转换例子

[复制链接]
ID:890771 发表于 2021-3-18 11:40 | 显示全部楼层 |阅读模式
学的这个专业,但是没怎么好好学,现在工作了才又捡起来,真是挺惭愧的,浪费自己的时间。最近在学习郭天祥老师的51单片机过程中,发现了郭老师写的有些AD转换例子还有改进的空间,论坛内也没有相关帖子,就打算上传下让后来学习的人参考。

这个例子很简单,项目是:利用adc0804进行模数转换,当拧动实验板上的ad旁边的电位器re2时,在数码管的前三位以十进制的方式动态显示出ad转换后的数字量,数值在0-255变化; 如果用郭老师的程序写出来,会发现在学习板上只能显示上电的初始值,或者显示128,需要改进a的值,我试了下,必须改到大概8000往上才能实时刷新显示,而且动态显示的数码管肉眼可见的刷新率低,具体原因是因为转换时间不够,这个转换时间大概有80ms左右?我不知道为什么会这么高,但是程序上运行来看,确实,如有错误,希望大佬指正,下面是我改进后的程序,能够实时显示,而且清晰,如果输出会有一两个个数的抖动,那是因为它的原理决定。

单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit duan=P2^6;
sbit wei=P2^7;
sbit wr=P3^6;
sbit rd=P3^7;
uchar bai,shi,ge,num;
uint a,a1,a2,a3;
void set();
void dsplay(uchar,uchar,uchar);
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void main()
{
        set();
        while(1)
        {
                wr=1;
                _nop_();
                wr=0;
                _nop_();
                wr=1;
                for(a=30;a>0;a--)
                {
                        dsplay(a1,a2,a3);
                }
                P1=0xff;
                rd=1;
                _nop_();
                rd=0;
                _nop_();
                num=P1;
                rd=1;
                a1=num/100;
                a2=num%100/10;
                a3=num%10;

        }
}
void set()
{
        wei=1;
        P0=0x7f;
        wei=0;
        a1=a2=a3=0;
}
void dsplay(uchar a1,uchar a2,uchar a3)
{
        wei=1;
        P0=0x7e;
        wei=0;
        P0=0x00;
        duan=1;
        P0=table[a1];
        duan=0;
        P0=0xff;
        delayms(1);

        wei=1;
        P0=0x7d;
        wei=0;
        P0=0x00;
        duan=1;
        P0=table[a2];
        duan=0;
        P0=0xff;
        delayms(1);        

        wei=1;
        P0=0x7b;
        wei=0;
        P0=0x00;
        duan=1;
        P0=table[a3];
        duan=0;
        P0=0xff;
        delayms(1);
}

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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