|
|
學(xué)的這個(gè)專業(yè),但是沒(méi)怎么好好學(xué),現(xiàn)在工作了才又撿起來(lái),真是挺慚愧的,浪費(fèi)自己的時(shí)間。最近在學(xué)習(xí)郭天祥老師的51單片機(jī)過(guò)程中,發(fā)現(xiàn)了郭老師寫的有些AD轉(zhuǎn)換例子還有改進(jìn)的空間,論壇內(nèi)也沒(méi)有相關(guān)帖子,就打算上傳下讓后來(lái)學(xué)習(xí)的人參考。
這個(gè)例子很簡(jiǎn)單,項(xiàng)目是:利用adc0804進(jìn)行模數(shù)轉(zhuǎn)換,當(dāng)擰動(dòng)實(shí)驗(yàn)板上的ad旁邊的電位器re2時(shí),在數(shù)碼管的前三位以十進(jìn)制的方式動(dòng)態(tài)顯示出ad轉(zhuǎn)換后的數(shù)字量,數(shù)值在0-255變化; 如果用郭老師的程序?qū)懗鰜?lái),會(huì)發(fā)現(xiàn)在學(xué)習(xí)板上只能顯示上電的初始值,或者顯示128,需要改進(jìn)a的值,我試了下,必須改到大概8000往上才能實(shí)時(shí)刷新顯示,而且動(dòng)態(tài)顯示的數(shù)碼管肉眼可見(jiàn)的刷新率低,具體原因是因?yàn)檗D(zhuǎn)換時(shí)間不夠,這個(gè)轉(zhuǎn)換時(shí)間大概有80ms左右?我不知道為什么會(huì)這么高,但是程序上運(yùn)行來(lái)看,確實(shí),如有錯(cuò)誤,希望大佬指正,下面是我改進(jìn)后的程序,能夠?qū)崟r(shí)顯示,而且清晰,如果輸出會(huì)有一兩個(gè)個(gè)數(shù)的抖動(dòng),那是因?yàn)樗脑頉Q定。
單片機(jī)源程序如下:
#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);
}
|
評(píng)分
-
查看全部評(píng)分
|