main.c
来自「STM8S105S4程序」· C语言 代码 · 共 73 行
C
73 行
/******************** 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 + =
减小字号Ctrl + -
显示快捷键?