首页 > 编程知识 正文

stm32数码管显示,数码bcd管显示程序

时间:2023-05-06 11:10:30 阅读:158128 作者:288

STM 32TM1650控制程序(可移植)此代码已完成好几天了,现在#include'TM1650.h'voidsda_in ) void ) gpio _ inittypedefgpio _ id gpio _ initstructa.gpio _ mode=gpio _ mode _ IPU; Gpio_init(gpiob,GPIO_InitStructa ); }voidsda_out(void ) gpio _ inittypedefgpio _ initstructa; gpio _ initstructa.gpio _pin=TM 1650贪婪篮球_ pin; gpio _ initstructa.gpio _ mode=gpio _ mode _ out _ PP; gpio _ initstructa.gpio _ speed=gpio _ speed _ 50m Hz; Gpio_init(gpiob,GPIO_InitStructA ); } voidxxdjdelay _ us (unsignedshortj ) { unsigned short i,k; for(k=0; kj; k ) for(I=0; i1; I}{}}voidxxdjstart(void ) {SDA_OUT; TM1650贪婪的篮球_H; xxdjjSCL_H; xdjdelay_us(4); TM1650贪婪的篮球_L; xdjdelay_us(4); xxdjjSCL_L; }voidxxdjstop(void ) {SDA_OUT ); xxdjjSCL_L; TM1650贪婪的篮球_L; xdjdelay_us(4); xxdjjSCL_H; xdjdelay_us(4); TM1650贪婪的篮球_H; }unsignedcharxxdjwait_ack(void ) {unsigned char ucErrTime=0; SDA_IN (; TM1650贪婪的篮球_H; xdjdelay_us (; xxdjjSCL_H; xdjdelay_us (; wile (读贪婪的篮球) {ucErrTime; ucerrtime 250 (xxdjjstop ); 返回1; }}xxdjjSCL_L; 返回0; }voidxxdjack(void ) {xxdjjSCL_L; SDA_OUT (; TM1650贪婪的篮球_L; xdjdelay_us(4); xxdjjSCL_H; xdjdelay_us(4); xxdjjSCL_L; }voidxxdjnack(void ) {xxdjjSCL_L; SDA_OUT (; TM1650贪婪的篮球_H; xdjdelay_us(4); xxdjjSCL_H; xdjdelay_us(4); xxdjjSCL_L; } voidxxdjsend _ byte (unsignedcharonebyte ) { unsigned char t; SDA_OUT (; xxdjjSCL_L; for(t=0; t8; t ) if((onebyte0x80 )==0x80 ) TM1650贪婪的篮球_H; else TM1650贪婪的篮球_L; oneByte=1; xdjdelay_us(4); xxdjjSCL_H; xdjdelay_us(4); xxdjjSCL_L; xdjdelay_us(4); } unsignedcharxxdjread _ byte (void ) {unsigned char i,rekey=0; SDA_IN (; for(I=0; i8; I ) {xxdjjSCL_L; xdjdelay_us(4); xxdjjSCL_H; rekey=1; 读贪婪篮球密钥(if ); xdjdelay_us(4); }return rekey; } voidxxdjsendcommand (unsignedcharadd,unsigned char dat ) { xxdjjStart; xdjsend_byte(add; xxdjjWait_Ack (; xdjsend_byte(dat; xxdjjWait_Ack (; xxdjjStop (; } voidxxdjsenddigdata (uint 16 _ t index,uint16_t num ) {uint8_t indexAddr=0; uint8_t numValue=0; switch(index ) {case 1:indexAddr=0x68; 黑; case 2:indexAddr=0x6A; 黑; case 3:indexAddr=0x6C; 黑; case 4:indexAddr=0x6E; 黑; 默认: break;}numValue = s_7number[num]; xxdjjStart();xxdjjSend_Byte(indexAddr);xxdjjWait_Ack();xxdjjSend_Byte(numValue);xxdjjWait_Ack();xxdjjStop(); }void xxdjjSetDisplay(uint8_t brightness)//{xxdjjSendCommand(0x48,brightness*16 + 1*4 + 1);}void xxdjjInit(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStruct.GPIO_Pin = xxdjjSCL_pin|TM1650贪玩的篮球_pin;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(xxdjjGPIO_PORT,&GPIO_InitStruct);AFIO->MAPR|=0x02000000;//PB3,cxdrs???JATG?,??JATGxxdjjSCL_H;TM1650贪玩的篮球_H;xxdjjSetDisplay(brighting_2);}void DisplayNumber_4BitDig(uint16_t Num){uint16_t Numb;Numb = Num+10000;xxdjjSendDigData(1,Numb/1000%10);xxdjjSendDigData(2,Num/100%10);xxdjjSendDigData(3,Num/10%10);xxdjjSendDigData(4,Num%10);}unsigned char xxdjjRead_KEY(void){unsigned char temp; xxdjjStart();xxdjjSend_Byte(0x49);xxdjjWait_Ack();temp=xxdjjRead_Byte();xxdjjWait_Ack();xxdjjStop();return temp;}uint32_t xxdjjGte_KEY(void){unsigned char key;key=xxdjjRead_KEY();uint32_t key_name,i,j;for(i=0;i<7;i++)for(j=0;j<7;j++){if(key == key_numberH[i][j]){key_name = key_number[i][j];return key_name;}}return key_name;} 头文件 #ifndef __xxdjjH__#define __xxdjjH__#include "stm32f10x.h"#definebrighting_80x00#definebrighting_70x07#definebrighting_60x06#definebrighting_50x05#definebrighting_40x04#definebrighting_30x03#definebrighting_20x02#definebrighting_10x01static uint8_t s_7number[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//static uint8_t s_8number[10] = {0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};static uint32_t key_number[7][4] = {11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44,51,52,53,54,61,62,63,64,71,72,73,74};static uint8_t key_numberH[7][4] = {0x44,0x45,0x46,0x47,x4C,0x4D,0x4E,0x4F,x54,0x55,0x56,0x57,x5C,0x5D,0x5E,0x5F,x64,0x65,0x66,0x67,x6C,0x6D,0x6E,0x6F,x74,0x75,0x76,0x77,};#define xxdjjGPIO_PORT GPIOB#define xxdjjSCL_pin GPIO_Pin_3#define TM1650贪玩的篮球_pin GPIO_Pin_4#define xxdjjSCL_H GPIO_SetBits(xxdjjGPIO_PORT,xxdjjSCL_pin) #define xxdjjSCL_L GPIO_ResetBits(xxdjjGPIO_PORT,xxdjjSCL_pin) #define TM1650贪玩的篮球_H GPIO_SetBits(xxdjjGPIO_PORT,TM1650贪玩的篮球_pin)#define TM1650贪玩的篮球_L GPIO_ResetBits(xxdjjGPIO_PORT,TM1650贪玩的篮球_pin)#define READ贪玩的篮球 GPIO_ReadInputDataBit(GPIOB,TM1650贪玩的篮球_pin)void DisplayNumber_4BitDig(unsigned short num);unsigned char xxdjjRead_KEY(void);void xxdjjInit(void);void DisplayNumber_HexDig(unsigned short num);unsigned char xxdjjRead_KEY(void);uint32_t xxdjjGte_KEY(void);#endif 使用 #include "stm32f10x.h"#include "led.h"#include "tm1650.h"#include "sys.h"#include "delay.h"#include "usart.h"int main(void){LEN_GPIO_Config();xxdjjInit();//³õʼ»¯1650оƬDisplayNumber_4BitDig(0);delay_init();uint32_t Key_name;while(1){Key_name=xxdjjGte_KEY();if(Key_name == 11) break;} while (1) {LED_R(ON);DisplayNumber_4BitDig(1254);delay_ms(300);LED_R(OFF);DisplayNumber_4BitDig(1121);delay_ms(300); }} 我没有写注释,因为我的MDK中文是一堆问号,所以我就没加。

里面主要是库函数,也有寄存器。我这代码是达到了我的预期
1.输入想输出数字(四位内,多了就取后四位)
2.八种辉度已宏定义
3.4*7个按键可以全部识别(会返回按键“坐标”位置)
4.引脚已宏定义,方便移植
5.有部分还没弄懂,但是程序不影响使用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。