標(biāo)題:
C51單片機(jī)ADC0804模擬轉(zhuǎn)換Proteus仿真程序
[打印本頁]
作者:
joe_2019
時間:
2020-11-7 22:40
標(biāo)題:
C51單片機(jī)ADC0804模擬轉(zhuǎn)換Proteus仿真程序
終于把這個模擬給做出來了,體會到了怎么去發(fā)現(xiàn)坑,學(xué)著去填坑,仿真文件供大家參考,謝謝。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
Snipaste_2020-11-07_22-35-35.jpg
(399.6 KB, 下載次數(shù): 89)
下載附件
2020-11-7 22:39 上傳
單片機(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};
//共陽極數(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()
{
//使用定時器0定時對結(jié)果掃描顯示
TMOD=0x01; //定時器的工作方式1
TH0=(65536-917)/256; //定時定義初值
TL0=(65536-917)%256;
EA=1; //總中斷使能打開
ET0=1; //定時器0中斷
TR0=1; //定時器0啟動
CS=0; // 啟動轉(zhuǎn)換
while(1)
//此處循環(huán)等待時間到中斷
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
INTR=0;//intr轉(zhuǎn)換完成后自動拉低
//當(dāng)只有一片AD芯片時,可以將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ù)值放大后,分別其對應(yīng)位的值
time[0]=val3/1000;//個位
time[1]=val3%1000/100;//個分位
time[2]=val3%100/10;//十分位
time[3]=val3%10;//千分位
}
}
void Timer_0() interrupt 1
{
TH0=(65536-917)/256; //中斷后計數(shù)器重新賦值
TL0=(65536-917)%256;
num++;
if (num==10)
{num=0;
P2=COM[num2];//取反后,位選數(shù)碼管全部熄滅
//共陽極數(shù)碼管時,高電平選通,低電平關(guān)閉
P0=0xff;//數(shù)碼管全部低電平,熄滅
{
if(num2==0)
{P0=display[time[num2]]&0x7F;} //顯示帶小數(shù)點(diǎn)的個位數(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)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1