|
这是全部程序
#include "stm8s.h"
#include "OLED12864.h"
void GPIO_int(void)//初始化按键,指示灯
{
GPIOG->DDR=GPIOG->DDR&0x3f;//PG6,PG7按键配置为输入模式
GPIOG->CR1=GPIOG->CR1|0xC0;//PG6,PG7按键配置为上拉输入
GPIOA->DDR=GPIOA->DDR|0x30;//PA4,PA5指示灯配置为输出模式
GPIOA->CR1=GPIOA->CR1|0x30;//PA4,PA5指示灯d配置为推挽模式
GPIOA->ODR=0x00;//点亮指示灯
}
void Clock_init(void)//时钟配置 内部16M
{
CLK->CKDIVR=0;
}
void AD_int(void)//电位器 PF5 初始化 AIN13
{
u8 value;
u16 ADC_TDR_tmp;
ADC2->CSR = 13; //AIN13通道选择
//select 4MHz clock based on 16MHz fMaster (div4), single mode
ADC2->CR1 = 0x20;
ADC2->CR2 = 0x08;//数据右对
ADC2->TDRH=0x20;//AIN13 禁止施密特触发
ADC2->CR1 |= 0X01;//使能ADC,,CR1=0000 0001
value=30;
while(value--); //等待ADC稳定.
ADC2->CSR &= 0x7f;//清EOC标志
ADC2->CR1 |= 0x01;//启动AD
}
main()
{
unsigned int tem_c=0;
unsigned char B_k1=0,B_k2=0;
unsigned int ADConverValue=0;
for(tem_c=0;tem_c<50000;tem_c++);
Clock_init();
GPIO_int();
LCD_Init();
LCD_Fill(0);
LCD_P8x16Str(12,0,"U-EASYTECH");
LCD_P8x16Str(30,3,"AD test:");
AD_int();
while (1)
{
if((GPIOG->IDR&0x80)==0x80)B_k1=0; //PG7为高电平,未有按键
else if(B_k1==0)//PG6按下时,指示灯亮
{
for(tem_c=0;tem_c<500;tem_c++);
if((GPIOG->IDR&0x80)==0x00)
{
B_k1=1;
GPIOA->ODR=0x30;
}
}
if((GPIOG->IDR&0x40)==0x40)B_k2=0; //PG6为高电平,未有按键
else if(B_k2==0)//PG7按下时,指示灯灭
{
for(tem_c=0;tem_c<500;tem_c++);
if((GPIOG->IDR&0x40)==0x00)
{
B_k2=1;
GPIOA->ODR=0x0;
}
}
if(ADC2->CSR&0x80)
{
ADC2->CSR &= (u8)(~0x80);//清除EOC标志
ADConverValue=ADC2->DRH*256+ADC2->DRL;
ADC2->CR1 |= 0x01;//启动AD
Display_data(12,6,ADConverValue,0);//将采集到的值显示
}
}
} |
|