欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機Proteus仿真ADC0809數字電壓表程序設計
[打印本頁]
作者:
zyc0211
時間:
2020-12-22 08:17
標題:
單片機Proteus仿真ADC0809數字電壓表程序設計
源碼加電路圖
51hei.png
(28.04 KB, 下載次數: 46)
下載附件
2020-12-22 15:13 上傳
51hei.png
(36.22 KB, 下載次數: 36)
下載附件
2020-12-22 15:13 上傳
單片機源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管顯示0-9的電平碼
uint volt,vtime; //電壓值測定值
uchar addr;//測量地址位
sbit LW1=P2^3; //對應第4個數碼管
sbit LW2=P2^2; //對應第3個數碼管
sbit LW3=P2^1; //對應第2個數碼管
sbit LW4=P2^0; //對應第1個數碼管
sbit LW5=P1^4;//指示當前顯示的是第幾個轉換值
sbit CLK=P2^4; //時鐘信號
sbit START=P2^5; //轉換啟動開關
sbit EOC=P2^6; //轉換結束標志
sbit OE=P2^7;//定義ADC0809各腳
/**********************************************************/
//函數名:delay(uint x)
//功能:延時程序 改變測量地址
//調用函數:
//輸入參數:x
//輸出參數:
//說明:程序的延時時間為x乘以0.5ms 每5s改變測量地址位
/**********************************************************/
void delay(uint x)
{
uchar y,z;
for(y=x;y>0;y--)
for(z=250;z>0;z--);//該步運行時間約為0.5ms
vtime++;
if(vtime==1000)
{
vtime=0;
addr++;
if(addr==3) //本例子一共有3個測量輸入值,輪流讀取這3個值并轉換顯示
addr=0;//以上語句實現測量地址位的改變
}
}
/**********************************************************/
//函數名:ADC()
//功能:數模轉換程序
//調用函數:
//輸入參數:
//輸出參數:
//說明:將轉換好的測定值保存在變量volt中
/**********************************************************/
void ADC()
{
EA=1;//開中斷
//確保進入正常AD轉換狀態?
START=0;
START=1;
START=0;//ad開始轉換
while(EOC==0); //等待轉換結束
OE=1; //輸出數據標志為真
EA=0;//關中斷
volt=P3;//獲取轉換值保存到volt中,(P3為轉換后數據)
volt=volt*196;//轉換值處理 (例子的滿量程為5V,轉換分辯率為8位即最大值是255,5/255=196mV,即1代表196mV)
OE=0;//輸出轉換結束 (要在獲取轉換值之后)
}
/**********************************************************/
//函數名:display()
//功能:4位數碼管顯示
//調用函數:delay(uint x)
//輸入參數:
//輸出參數:
//說明:將處理后的電壓值顯示在4位數碼管上
/**********************************************************/
void display()
{
P0=0xff;//消隱 (相當于全部滅燈,清除上次顯示效果)
LW1=0;
P0=~led[volt/10000]&0x7f;//帶小數點1伏顯示位
delay(2);
P0=0xff;
LW1=1;
LW2=0;
P0=~led[(volt/1000)%10];//100毫伏顯示位
delay(2);
P0=0xff;
LW2=1;
LW3=0;
P0=~led[(volt/100)%10];//10毫伏顯示位
delay(2);
P0=0xff;
LW3=1;
LW4=0;
P0=~led[(volt/10)%10];//1毫伏顯示位
delay(2);
P0=0xff;
LW4=1;
LW5=0;
P0=~led[addr+1];//顯示電壓測量位
delay(2);
LW5=1;//指示當前顯示的是第幾個轉換值
}
/**********************************************************/
//主程序
/**********************************************************/
void main()
{
EA=1;//開總中斷
TMOD=0x01;//設定定時計數工作方式
//為定時器初賦值
TH0=0XFF;
TL0=0XB4;
ET0=1;//開定時器0中斷
TR0=1;//開啟定時器0
while(1)
{
P1=addr;//裝入測量地址
LW5=1;
ADC();//調用模數轉換程序
display();//調用顯示程序
}
}
/**********************************************************/
//函數名:timer() interrupt 1
//功能:定時中斷0響應程序
//調用函數:
//輸入參數:
//輸出參數:
//說明:為ADC提供時鐘信號
/**********************************************************/
void timer() interrupt 1
{
//初值重置
TH0=0XFF;
TL0=0XF0;
CLK=~CLK;//取反 產生時鐘信號
}
復制代碼
仿真代碼51hei提供下載:
數字電壓表(ADC0809)-2.rar
(47.83 KB, 下載次數: 70)
2020-12-22 08:16 上傳
點擊文件名下載附件
數字電壓表
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1