|
終于把這個(gè)模擬給做出來(lái)了,體會(huì)到了怎么去發(fā)現(xiàn)坑,學(xué)著去填坑,仿真文件供大家參考,謝謝。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- //利用_nop_()的等待命令
- #define uchar unsigned char
- #define uint unsigned int
- sbit adwr=P3^2;
- sbit adrd=P3^1;
- sbit CS=P3^0;
- sbit INTR=P3^3;
- uchar num;
- uchar code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //共陽(yáng)極數(shù)碼管的顯示代碼
- uchar COM[]={0x01,0x02,0x04,0x08};
- //數(shù)碼管的位選代碼
- uchar num, num2=0,time[4]={0,0,0,0},val;
- float val2;
- unsigned int val3;
- main()
- {
- //使用定時(shí)器0定時(shí)對(duì)結(jié)果掃描顯示
- TMOD=0x01; //定時(shí)器的工作方式1
- TH0=(65536-917)/256; //定時(shí)定義初值
- TL0=(65536-917)%256;
- EA=1; //總中斷使能打開(kāi)
- ET0=1; //定時(shí)器0中斷
- TR0=1; //定時(shí)器0啟動(dòng)
- CS=0; // 啟動(dòng)轉(zhuǎn)換
- while(1)
- //此處循環(huán)等待時(shí)間到中斷
- {
- adwr=1;
- _nop_();
- adwr=0;
- _nop_();
- adwr=1;
- INTR=0;//intr轉(zhuǎn)換完成后自動(dòng)拉低
- //當(dāng)只有一片AD芯片時(shí),可以將CS一直處在低位即可,連續(xù)轉(zhuǎn)換
- adrd=1;
- _nop_();
- adrd=0;
- _nop_();
- val=P1;
- adrd=1;
- val2=((val*1.0/255)*5.0);//將數(shù)字量轉(zhuǎn)換為數(shù)值。
- val3=val2*1000;//將轉(zhuǎn)化的數(shù)值放大后,分別其對(duì)應(yīng)位的值
- time[0]=val3/1000;//個(gè)位
- time[1]=val3%1000/100;//個(gè)分位
- time[2]=val3%100/10;//十分位
- time[3]=val3%10;//千分位
- }
- }
- void Timer_0() interrupt 1
- {
- TH0=(65536-917)/256; //中斷后計(jì)數(shù)器重新賦值
- TL0=(65536-917)%256;
- num++;
- if (num==10)
- {num=0;
- P2=COM[num2];//取反后,位選數(shù)碼管全部熄滅
- //共陽(yáng)極數(shù)碼管時(shí),高電平選通,低電平關(guān)閉
- P0=0xff;//數(shù)碼管全部低電平,熄滅
- {
- if(num2==0)
- {P0=display[time[num2]]&0x7F;} //顯示帶小數(shù)點(diǎn)的個(gè)位數(shù)
- else
- {P0=display[time[num2]];}
- }
- num2++;
- if(num2>=4) num2=0;
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
02_ADC轉(zhuǎn)換.zip
(89.66 KB, 下載次數(shù): 41)
2020-11-7 22:39 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|