|
修改記錄: 由LED顯示模數轉換的結果,改變成由四位數碼管顯示電壓值
-------------------------------------------------------------------------
* 功能描述: 采集電位器的模擬電壓值,轉換成數字量
* 通過四位共陽數碼管顯示
-------------------------------------------------------------------------
* 接線說明:數碼管段碼P10~P17--SA~SH,數碼管位選P20~P23--C0~C3
* ADC0809:0809DB0~DB7--P00~P07 , 0809CS--P27,0809EOC--P30
* 0809WR--P36,0809RD--P37,0809A,B,C通道選擇--GND
* 0809CLK--ALE(注:在核心板上),0809IN0--POT(電位器輸出)
*************************************************************************/
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
//char code SST516[3] _at_ 0x003b;
unsigned char code segbit[]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char code combit[]={0xf1,0xf2,0xf4,0xf8};
#define ADC0809 XBYTE[0x7fff] /* 定義ADC0809 端口地址 */
#define Smg_Seg P1
#define Smg_Com P2
sbit EOC=P3^0;
void TimeInitial();
void Delay(unsigned int i);
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void main()
{
uchar temp,loopdat1;
uint voldata;
uchar dispbuf[4];
while(1)
{
ADC0809=0x0f;
do
{;}
while(~EOC); //轉換是否完成
//delayms(1);
temp = ADC0809; //讀出轉換結果
voldata = temp*1.0/255*500;
dispbuf[3] = voldata%10;
dispbuf[2] = voldata/10%10;
dispbuf[1] = voldata/100%10;
dispbuf[0] = voldata/1000;
for(loopdat1=0;loopdat1<4;loopdat1++)
{
Smg_Seg = segbit[dispbuf[loopdat1]];
if( loopdat1 == 1 )
{
Smg_Seg &= 0x7f;
}
Smg_Com = combit[loopdat1];
Delay(4);
Smg_Com = 0xf0;
}
}
}
|
-
仿真.jpg
(229.79 KB, 下載次數: 130)
下載附件
2020-6-25 17:57 上傳
-
-
ADC0809模數轉換實驗.zip
2020-6-25 17:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
89.79 KB, 下載次數: 32, 下載積分: 黑幣 -5
|