新聞中心

咱們的ADC0809電壓表

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
第一次和同學(xué)合作的學(xué)校課題:表,以實(shí)物失敗,仿真成功告終。相信以后回頭看,會(huì)發(fā)現(xiàn)許多地方非常的不專業(yè),特發(fā)此博文,以后當(dāng)笑話看。不過(guò)因?yàn)槭堑谝淮谓佑|AD相關(guān)知識(shí),也學(xué)到了挺多。
系統(tǒng)軟件設(shè)計(jì)要求:
(1) 鍵盤管理程序(包括鍵掃描、鍵處理程序)。
(2) LED動(dòng)態(tài)顯示程序,包括:
(3) 各通道輪流顯示,共顯示2個(gè)通道,每通道顯示1s;
(4) 單通道顯示,僅顯示指定通道電壓,并保持到其他功能鍵按下。
先上原理圖:
原理圖連線比較亂,主要是為了滿足盡量少外圍元件的要求,有一個(gè)明顯奇怪的地方就是38譯碼器輸出口沒(méi)用完,但是單片機(jī)口接得滿滿的,因?yàn)楫?dāng)時(shí)想用38譯碼器的其中三個(gè)輸出口來(lái)控制ADC0809的ABC,結(jié)果發(fā)現(xiàn)38譯碼器輸出口一次只能有一個(gè)低電,從而導(dǎo)致ADC的選址ABC兩個(gè)以上低電的情況無(wú)法實(shí)現(xiàn),測(cè)量電壓輸入口切換的功能也無(wú)法實(shí)現(xiàn)。這個(gè)原理圖的錯(cuò)誤直到編程時(shí)才發(fā)現(xiàn),結(jié)果只能大膽參考網(wǎng)絡(luò)言論,把ADC0809的STARTALE共接,OEEOC共接,雖然總感覺(jué)會(huì)帶來(lái)潛在問(wèn)題,還好,仿真成功了。
看到網(wǎng)上一些仿真圖,有模有樣,比如紅綠交通燈,還真畫(huà)出紅綠燈外形,還有馬路斑馬線等等,而不是只用LED燈,真佩服,不過(guò)覺(jué)得把心思都用在表面的東西,還不如優(yōu)化一下方案和程序。(注意:如參考此程序AD0809和C52的兩個(gè)OUT網(wǎng)絡(luò)標(biāo)號(hào)高低位順序是相反的)
說(shuō)到程序,原本是本著dont share your code的原則(來(lái)自最近剛看了斯坦福的公開(kāi)課,真是重視知識(shí)產(chǎn)權(quán)),不打算公開(kāi),不過(guò)想想,自己編得這么幼稚低級(jí),就當(dāng)做交流和以后借鑒吧:
///12MHZ/////
//////頭文件及宏定義////////
#include
#define uint unsigned int
#define uchar unsigned char
///////相關(guān)變量定義///////
static uchar keynum;
bit shift;
float temp;
uchar val_int;
uchar val_decimal;
///////I/O口定義/////////
sbit STA_ALE = P3^0;
sbit OE_EOC = P3^1;
sbit CLK = P3^2;
sbit ADD_A = P3^3;
sbit ADD_B = P3^4;
sbit ADD_C = P3^5;
sbit ADC_B = P3^6;
sbit ADC_A = P3^7;
////////帶小數(shù)點(diǎn)數(shù)碼管顯示編碼///////////
uchar data numtable_DE[] =
{
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef
};
////////不帶小數(shù)點(diǎn)數(shù)碼管顯示編碼///////////
uchar data numtable[] =
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};
///////數(shù)碼管動(dòng)態(tài)顯示函數(shù)聲明///////
void disp();
///////延時(shí)函數(shù)///////
void delay(uint x)
{
uint a,b;
for ( a = x; a > 0; a--)
for ( b = 125; b > 0; b--);
}
///////矩陣鍵盤掃描及賦值函數(shù)///////(這個(gè)部分自己改造得比較喜歡,想記下來(lái),作為自己的風(fēng)格)
int keyscan()
{
uchar temp1,temp2,keycod;
P1 = 0xf0;
if ( (P1 & 0xf0) != 0xf0 )
{
temp1 = P1;
}
P1 = 0x0f;
temp2 = P1;
keycod = temp1 | temp2;
switch(keycod)
{
case 0x7e:
keynum = 1;
break;
case 0xbe:
keynum = 2;
break;
case 0xde:
keynum = 3;
break;
default :
keynum = keynum;
break;
}
}
///////數(shù)碼管動(dòng)態(tài)顯示函數(shù)///////
void disp()
{
ADD_A = 1;
ADD_B = 0;
ADD_C = 0;
P0 = numtable_DE[val_int];
delay(1);
ADD_A = 0;
ADD_B = 1;
ADD_C = 0;
P0 = numtable[(val_decimal/10)];
delay(1);
ADD_A = 1;
ADD_B = 1;
ADD_C = 0;
P0 = numtable[(val_decimal)];
delay(1);
}
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: ADC0809電壓

評(píng)論


技術(shù)專區(qū)

關(guān)閉