电脑
主函数 #include 'stm32f10x.h'#include 'delay.h'#include 'gpio.h'#include 'key.h'#include 'led.h'#include 'Globel_Var.h'// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e funsigned char LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};int main (){ delay_init(); LED_Init();while(1) { keydown(); //调用按键判断检测程序 GPIO_Write(GPIOA,LED7Code[dis_buf%16]&0x7f); }}
gpio.c 独立键盘引脚电平设置 #include 'gpio.h'void GPIOB1_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Write(GPIOB,0XF0FF); }void GPIOB2_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Write(GPIOB,0X0FFF);}
key.c #include 'key.h'#include 'delay.h'#include 'gpio.h'#include 'Globel_Var.h' void keyscan(void) { temp = 0; GPIOB1_Configuration(); delay_ms(100); temp=(GPIO_ReadInputData(GPIOB))>>8&0xF0; temp=~((temp>>4)|0xF0); if(temp==1) key=1; else if(temp==2) key=2; //第2个按键值 else if(temp==4) key=3; //第3个按键值 else if(temp==8) key=4; else key=16; GPIOB2_Configuration(); delay_ms(100); //延时 temp=(GPIO_ReadInputData(GPIOB)>>8)&0x0F; temp=~(temp|0xF0); if(temp==1) key=key+0; else if(temp==2) key=key+4; else if(temp==4) key=key+8; else if(temp==8) key=key+12; else key=16; dis_buf = key; dis_buf = dis_buf & 0x0f; } void keydown(void) { int retval; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Write(GPIOB,0XF0FF);retval = GPIO_ReadInputData(GPIOB); if(retval>>8!=0xF0) keyscan(); / } }
Globel_Var.c #include 'Globel_Var.h'uchar key; uchar temp;uchar dis_buf; Globel_Var.h #ifndef __GLOBAL_VAR_H #define __GLOBAL_VAR_H#define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char#define uint unsigned int //宏的定义变量类型 uint 代替 unsigned intextern uchar key; extern uchar temp;extern uchar dis_buf; #endif 之所以写了这个,是为了防止重复定义的问题,你也可以去掉,在main函数中定义。
led.c #include 'led.h'void LED_Init(void)//初始化{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); // GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //关闭调试 端口重新映射 使用仿真器调试时,不能用此语 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_Write(GPIOA,0XFFFF); }
其它的看我早先发的。
能力有限。