單片機(jī)C語(yǔ)言程序設(shè)計(jì):ADC0809 數(shù)模轉(zhuǎn)換與顯示
掃描二維碼
隨時(shí)隨地手機(jī)看文章
/* 名稱:ADC0809 數(shù)模轉(zhuǎn)換與顯示
說明:ADC0809 采樣通道 3 輸入的
模擬量,轉(zhuǎn)換后的結(jié)果顯示在數(shù)碼管上。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//各數(shù)字的數(shù)碼管段碼(共陰)
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit CLK=P1^3; //時(shí)鐘信號(hào)
sbit ST=P1^2; //啟動(dòng)信號(hào)
sbit EOC=P1^1; //轉(zhuǎn)換結(jié)束信號(hào)
sbit OE=P1^0; //輸出使能
//延時(shí)
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//顯示轉(zhuǎn)換結(jié)果
void Display_Result(uchar d)
{
P2=0xf7; 第 4 個(gè)數(shù)碼管顯示個(gè)位數(shù)
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfb; 第 3 個(gè)數(shù)碼管顯示十位數(shù)
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfd; 第 2 個(gè)數(shù)碼管顯示百位數(shù)
P0=DSY_CODE[d/100];
DelayMS(5);
}
//主程序
void main()
{
TMOD=0x02; //T1 工作模式 2
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f; //選擇 ADC0809 的通道 3(0111)(P1.4~P1.6)
while(1)
{
ST=0;ST=1;ST=0; //啟動(dòng) A/D 轉(zhuǎn)換
while(EOC==0); //等待轉(zhuǎn)換完成
OE=1;
Display_Result(P3);
OE=0;
}
//T0 定時(shí)器中斷給 ADC0808 提供時(shí)鐘信號(hào)
void Timer0_INT() interrupt 1
{
CLK=~CLK;
}
拓展閱讀:用ADC0808控制PWM輸出程序