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 + -
显示快捷键?