?? main.c
字號:
/******************** 2011電子科技協會 ********************
;名稱 :AD鍵盤
;作者 : 鄭品洪
;日期 : 07/25/2011
;描述 : 利用STM8的AD轉換按下相應按鍵分別顯示1~4,AD鍵盤的優點在于可以用一個IO口控制多個按鍵
; 注 :由于轉接板把ADC9接到原51的P2.0,而AD鍵盤是接在P2.7
; 所以需要用一條杜邦線把P2.0和P2.7連接起來
;***********************************************************/
#include <stm8s105s4.h>
#define uchar unsigned char
uchar table[]={0xbf,0xf9,0xa4,0xb0,0x99};
uchar data,n=0;
void delay(uchar a)
{
uchar i;
for(a;a>0;a--)
for(i=0;i<250;i++);
}
void init(void)
{
PB_DDR=0XFF;
PB_CR1=0XFF;
PB_CR2=0X00;
PC_DDR=0XFF;
PC_CR1=0XFF;
PC_CR2=0X00;
PC_ODR=0x00;
ADC_CR2=0x00; //數據左對齊,先讀ADC_DRH,再讀ADC_DRL
ADC_CR1=0x00; //2分頻,單次轉換,暫時關閉AD轉換
ADC_CSR=0x09; //選擇通道9
ADC_TDRL=0x20; //禁止施密特觸發
}
//以下數字代表AD轉換結果,理論上第一個按鍵的值為0,第二個為128,第三個170,第四個為192
//考慮到一些不穩定因素,選擇一個范圍作為相應按鍵的AD值
void display(void)
{
if(data<220)
{
delay(60); //為了穩定電壓,提高準確性,這里延時較長,請按鍵時按鍵時按鍵時間稍長些
if(data<220)
{
if(data<100)
n=1;
if(data>100&&data<165)
n=2;
if(data>165&&data<188)
n=3;
if(data>185&&data<200)
n=4;
}
}
PB_ODR=table[n];
}
void main()
{
init();
while(1)
{
ADC_CR1=0x01; //將單片機從低功耗中喚醒
delay(1); //等待ADC模塊上電完成
ADC_CR1=0x01; //開啟AD轉換
while((ADC_CSR&0x80)==0); //等待轉換完成
data=ADC_DRH; //將數據賦給n
display();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -