芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写

首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表

DDR决定输入输出方向,CR1 CR2决定输入输出模式,上拉,下拉,推挽,开漏等

主要依靠这几个寄存器

还有一个控制寄存器2,懒得传了

按照这张表,输出写输出寄存器,输入读输入寄存器,就能完成GPIO的操作了

以下是操作代码

#include "key.h"

u8 keyValue = 0;
#define KEY1_IN (GPIOD->IDR&0X80)
#define KEY2_IN (GPIOE->IDR&0X08) static void Delay(u16 nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
} } void KeyInit(void)
{
//D7初始化
GPIOD->DDR &= ~(1<<7);//设置为输入
GPIOD->CR1 |= (1<<7);
GPIOD->CR2 &= ~(1<<7);//10 上拉输入 //E3初始化
GPIOE->DDR &= ~(1<<3);//设置为输入
GPIOE->CR1 |= (1<<3);
GPIOE->CR2 &= ~(1<<3);//10 上拉输入
} u8 KeyScan(void)
{
if(KEY1_IN == 0)
{
Delay(16000);
if(KEY1_IN == 0)
{
keyValue = KEY_VALUE1;
return KEY_VALUE1;
}
}
if(KEY2_IN == 0)
{
Delay(16000);
if(KEY2_IN == 0)
{
keyValue = KEY_VALUE2;
return KEY_VALUE2;
}
}
return 0;
}
#ifndef __KEY_H_
#define __KEY_H_
#include "stm8s.h" //按键使用D7 E3
//按键按下低电平,按键松开高电平 #define KEY_VALUE1 1
#define KEY_VALUE2 2 extern u8 keyValue; void KeyInit(void); u8 KeyScan(void); #endif
#include "led.h"

void LedInit(void)
{ //D1初始化
GPIOD->DDR |= (1<<1);//设置为输出
GPIOD->CR1 |= 1<<1;
GPIOD->CR2 &= ~(1<<1);//10 推挽输出 //d0
GPIOD->DDR |= (1<<0);//设置为输出
GPIOD->CR1 |= 1<<0;
GPIOD->CR2 &= ~(1<<0);//10 推挽输出 //c3
GPIOC->DDR |= (1<<3);//设置为输出
GPIOC->CR1 |= 1<<3;
GPIOC->CR2 &= ~(1<<3);//10 推挽输出
LedSet(1,1);
LedSet(2,1);
LedSet(3,1);
} void LedSet(u8 ch,u8 value)
{ switch(ch)
{
case 1:
if(value)GPIOD->ODR |= 1<<1;
else GPIOD->ODR &= ~(1<<1);
break;
case 2:
if(value)GPIOD->ODR |= 1<<0;
else GPIOD->ODR &= ~(1<<0);
break;
case 3:
if(value)GPIOC->ODR |= 1<<3;
else GPIOC->ODR &= ~(1<<3);
break;
}
}

#ifndef __LED_H_
#define __LED_H_
#include "stm8s.h" //led1 PD1 swim
//led2 pd0
//led3 pc3 d12_cs void LedInit(void); void LedSet(u8 ch,u8 value); #endif

最新文章

  1. Spket在Eclipse下的安装和配置(图文教程)
  2. Qt界面中嵌入其他exe程序的界面,使用Qt5
  3. “设计之变”--从iPhone应用到iPad应用
  4. 解决在android开发中ViewPager中Gallery无法滑动问题
  5. c# webbrowser 错误捕获
  6. TCO 2014 Round 1C 概率DP
  7. android82 文件下载框架xUtils
  8. Java 8 与 .Net的平台发展
  9. PHP 苹果消息推送
  10. 在VS中生成后拷贝文件
  11. 一个web应用的诞生--美化一下
  12. 深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念
  13. wireshark抓包,安装及简单使用
  14. JavaAndroid项目结构
  15. ajax解决跨域
  16. How To Use the AWK language to Manipulate Text in Linux
  17. DS二叉树--左叶子数量
  18. 5. ASP.NET MVC 中的Areas【区域】是什么
  19. EBS 系统当前完成请求时间监测
  20. libevent 入门教程:Echo Server based on libevent(转)

热门文章

  1. NSIndexPath 延伸
  2. Android中图片占用内存的计算
  3. 基础-Ajax,json
  4. Problem H: 小火山的围棋梦想 多校训练2(小火山专场)
  5. [转]Linux下CodeBlocks的交叉编译
  6. hdu_5616_Jam&#39;s balance(暴力枚举子集||母函数)
  7. 设计模式---Manager(管理器)
  8. HTML5来了:5个好用的混合式App开发工具
  9. regress_partition.sql
  10. div定位