?? adc0832.c
字號:
#include<reg52.h>//包含相應的頭文件
#include<stdio.h>
#include<intrins.h>
sbit CS=P3^4;//定義數模轉換器硬件對應引腳
sbit CLK=P3^5;
sbit DO=P3^6;
sbit DI=P3^7;
bit ADFlag;
unsigned int ADtemp;//定義中間變量
extern char data TimeNum[];
unsigned char code DIS[]={0xfd,0xfb,0xf7}; //定義數碼管位碼
unsigned char code Datatab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段數碼管段碼表
data unsigned char Display[3];//定義臨時存放數碼管數值
void disp (void);
void DelayMs(unsigned char ms);//delay Ms
void InitLcd();
void Init_Timer1(void)
{
TMOD |= 0x10;
TH1=0xff; /* Init value */
TL1=0x00;
//PT1=1; /* 優先級 */
EA=1; /* interupt enable */
ET1=1; /* enable timer1 interrupt */
TR1=1;
}
unsigned char ReadADC(unsigned char channel)
{
unsigned char i,j;
unsigned char Temp=0;
channel <<=3;
channel |=3;
CS =0; //按照資料進行時序操作
for(i=0;i<3;i++) //輸入指令,包含通道選擇
{
CLK=0;
_nop_();
DI=channel;
channel>>=1;
_nop_();
CLK=1;
DI=0;
}
CLK=0;
_nop_();
CLK=1;
for(j=0;j<8;j++) //處理讀入8位數據
{
CLK=0;
_nop_();
Temp=(Temp<<1)|DO;
_nop_();
CLK=1;
}
CS=1;
return(Temp); //返回轉換值
}
void Timer1_isr(void) interrupt 3 using 1//定時器1執行數碼管動態掃描
{
static unsigned char j;
TH1=0xfb; /* Init value */
TL1=0x00;
j++;
if(j==200) {j=0;ADFlag=1;}
}
main()
{
// unsigned char temp;
Init_Timer1();
InitLcd();//
DelayMs(15);
while(1)
{
if(ADFlag) //定時采集輸入模擬量
{
ADFlag=0;
ADtemp=ReadADC(0);
ADtemp *=20;
//TimeNum[12]=Datatab[((ADtemp-5)/50)];//處理電壓顯示
//TimeNum[14]=Datatab[((ADtemp-5)%50)/10];
//TimeNum[15]=Datatab[((ADtemp-5)%50)%10];
disp ();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -