基于單片機的AD轉換的數碼管顯示程序
*本例程采用AD0804芯片,硬件電路:cs片選端接P2.3,WR寫(xiě)數據端寫(xiě)P3.6,RD讀數據端接P3.7,鎖存端接P2.6腳,數碼管位選端分別接P3.2 ,P3.3,P3.4,段選端接P1口*/
#includereg52.h>//頭文件
#define uint unsigned int//宏文件
#define uchar unsigned char//宏文件
uchar num;//變量
void delay3(uint z);//延時(shí)定義
void dissy();//延時(shí)函數定義
sbit ge=P3^2;//個(gè)位定義
sbit shi=P3^3;//十位定義
sbit bai=P3^4;//百位定義
sbit ad_cs=P2^3;//片選端
sbit ad_wr=P3^6;//寫(xiě)數據端
sbit ad_rd=P3^7;//讀數據端
sbit pian=P2^6;//鎖存器片選
void add();//ad轉換子函數
void delay(uint i);//延時(shí)子函數申明
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e
};//數組
/************主函數**********/
void main()
{
while(1)
{
add();//調用AD轉換子函數
dissy();//數碼管顯示子函數
}
}
/************AD轉換子函數**********/
void add()//AD轉換子函數
{
uchar i;
ad_cs=1;//將片選關(guān)閉
ad_cs=0;//將片選打開(kāi)
ad_wr=1;//寫(xiě)數上升沿
ad_wr=0;//寫(xiě)數下降沿
ad_wr=1;//寫(xiě)數上升沿
P1=0xff;//送數到P0口
ad_rd=1;//讀數上升沿
delay(25);//延時(shí)一會(huì )兒
ad_rd=0;//讀數下降沿
//////**************因為AD轉換時(shí)間周期長(cháng),我現在的數碼管沒(méi)有采用鎖存器,AD轉換時(shí)間大于顯示時(shí)間,所以顯示時(shí)會(huì )閃爍,解決此問(wèn)題方法是,連續調用了顯示子程序七次,這樣顯示時(shí)就和AD轉換時(shí)一至,顯示出來(lái)的數就不閃了********************//////
for(i=0;i7;i++) //調用7次,相當于delay(255)
void dissy();
//////**********************************//////
num=P1;//將數給計數器num
}
/************顯示子函數**********/
void dissy()//顯示子函數
{
P0=table[num/100];//百位顯示數據
bai=0;//百位打開(kāi)
delay(14);//延時(shí)一會(huì )
bai=1;//關(guān)閉百位
P0=table[num%100/10];//十位顯示數據
shi=0;//十位打開(kāi)
delay(14);//延時(shí)一會(huì )
shi=1;//關(guān)閉十位
P0=table[num%10];//百位顯示數據
ge=0;//關(guān)閉十位
delay(14);//延時(shí)一會(huì )
ge=1;//關(guān)閉十位
}
/**************延時(shí)子函數*************/
void delay(uint i)//延時(shí)函數
{
uint j,k;//定義變量
for(j=i;j>0;j--)//外循環(huán)
for(k=30;k>0;k--);//內循環(huán)
}
評論