咱們的ADC0809電壓表
///////通道編號的數碼管顯示函數///////
void disp_in(uchar a)
{
ADD_A = 0;
ADD_B = 0;
ADD_C = 0;
P0 = numtable[a];
delay(3);
}
///////通道1的AD轉換函數///////
void ADC_1()
{
STA_ALE = 0;
STA_ALE = 1;
ADD_A = 1;
ADD_B = 0;
ADD_C = 1;
ADC_B = 0;
ADC_A = 0;
STA_ALE = 0;
}
///////通道2的AD轉換函數///////
void ADC_2()
{
STA_ALE = 0; STA_ALE = 1;
ADD_A = 1;
ADD_B = 0;
ADD_C = 1;
ADC_B = 0;
ADC_A = 1;
STA_ALE = 0;
}
///////判別是哪條通道AD轉換函數///////
void ADC(uchar ad_dat)
{
if (1 == keynum)
{
ADC_1();
disp();
disp_in(1);
}
else if (2 == keynum)
{
ADC_2();
disp();
disp_in(2);
}
else if (3 == keynum)
{
TR1 = 1;
if (!shift)
{
ADC_1();
disp();
disp_in(1);
}
if (shift)
{
ADC_2();
disp();
disp_in(2);
}
}
else if (16 == keynum)
{
ADC_2();
disp();
disp_in(2);
}
while ( 0 == OE_EOC )
{
keyscan();
if (1 == keynum)
{
disp();
disp_in(1);
}
else if (2 == keynum)
{
disp();
disp_in(2);
}
else if (3 == keynum)
{
TR1 = 1;
if (!shift)
{
disp();
disp_in(1);
}
if (shift)
{
disp();
disp_in(2);
}
}
}
temp = ad_dat*0.0196078;
val_int = (uchar) temp;
val_decimal = (uchar) ((temp - val_int)*100);
}
///////定時(shí)器初始化函數//////
void timer_init()
{
IE = 0x8a; TMOD = 0x12;
TH0 = 0x14;
TL0 = 0x00;
TR0 = 1;
TH1 = -50000/256;
TL1 = -50000%6;
}
///////主函數//////
int main ()
{
timer_init();//初始化定時(shí)器
while(1)
{
keyscan();//矩陣鍵盤(pán)掃描賦值
if (1 == keynum || 2 == keynum || 3== keynum) //當有鍵按下時(shí),啟動(dòng)ADC轉換
ADC(P2);
else //否則顯示四個(gè)0
{
disp();
disp_in(0);
}
}
return 0;
}
///////1S顯示切換的定時(shí)中斷函數(T1)//////
void TIMER(void) interrupt 3
{
static uchar timer;
timer++;
if (20 == timer)
{
timer = 0;
shift = !shift;//用于兩位的1S顯示切換
}
}
///////提供給ADC芯片CLOCK的定時(shí)函數(T0)//////
void OTHER_CLOCK(void) interrupt 1
{
CLK = !CLK;
}
說(shuō)說(shuō)主要遇到的問(wèn)題和學(xué)到的東西:一個(gè)是因為用了等待查詢(xún)方式來(lái)讀取ADC0809的AD轉換結果,加上矩陣鍵盤(pán)和38譯碼器選址,導致兩個(gè)問(wèn)題:
1.各個(gè)功能的邏輯關(guān)系混亂。雖然只有幾個(gè)功能模塊,但是也思考了一番才有了新的程序架構。還有就是始終沒(méi)能適應自頂向下的編程思維,比如會(huì )習慣先編出ADC的START信號或者選址函數,再去想用在哪里。而不是先直接構造一個(gè)ADC處理的框架,再去想細節的實(shí)現。
2.還有數碼管動(dòng)態(tài)顯示不停閃爍。調試的時(shí)候,也老想著(zhù),應該就是這樣了吧,改不了了吧,呵呵,可是解決之后再次覺(jué)得天無(wú)絕人之路啊,
ADD_A = 1;
ADD_B = 0; 這段語(yǔ)句起初P0 = numtable_DE[val_int];是放在首位的,結果想想是不是因為用38
ADD_C = 0; 譯碼器控制位選擾亂了下一位的段選,移一下位就搞定了……真是奇妙
P0 = numtable_DE[val_int];
delay(1);
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
團隊合作的效率這次體現得很明顯,特別是繁瑣的畫(huà)圖,可是因為大家實(shí)踐比較少,結果很不幸犯了很基礎的錯誤,導致成品沒(méi)有成功。不知道以后還有機會(huì )合作不
關(guān)鍵詞:
ADC0809電壓
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論