单片机 adc0804的DB口接p0时怎么写显示程序(下面的程序是DB接p1口时)

#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharsbi... #include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit wr=P3^6;sbit rd=P3^7;uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳显示代码 void delay(uint x) //延时函数 delay(1)延时0.992ms,大约为1ms{ uchar i; while(x--) for(i=0;i<120;i++); }void display(uchar db) //数码管显示函数,用于显示模数转换后得到的数字量{ uchar bw,sw,gw; //bw,sw,gw分别等于db百位,十位,个位上的数 bw=db/100; sw=db%100/10; gw=db%10; P2=0x01; //点亮第一只数码管 P0=dis[bw]&0x7f; //最高位置0,点亮第一只数码管的小数点, delay(5); P2=0x02; //点亮第二只数码管 P0=dis[sw]; delay(5); P2=0x04; //点亮第三只数码管 P0=dis[gw]; delay(5); P2=0x08; //点亮第四只数码管 P0=dis[0]; //第四只数码管一直显示0 delay(5);} void main(){ uchar i; while(1) { wr=0; //在片选信号CS为低电平情况下(由于CS接地,所以始终为低电平), _nop_(); //WR由低电平到高电平时,即上升沿时,AD开始采样转换 wr=1; delay(1); //延时1ms,等待采样转换结束 P1=0xff; //这条语句不能少,我也还不知道为什么 rd=0; //将RD脚置低电平后,再延时大于135ns左右(这里延时1us), _nop_(); //即可从DB脚读出有效的采样结果,传送到P1口 for(i=0;i<10;i++) //刷新显示一段时间 display(P1); //显示从DB得到的数字量 } } 展开
 我来答
赢皮大8
2017-02-18 · TA获得超过889个赞
知道小有建树答主
回答量:991
采纳率:75%
帮助的人:505万
展开全部
由于数码管的段选是直接接到P0口上的,没有锁存器,所以在读取Ad0804时,如果数码管继续亮着,必然会造成乱码或鬼影,最佳解决方案就是读Ad0804前操作P2口,关闭数码管显示。结果上只会稍微变暗点,或者偶尔闪一下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式