完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
程序如下 #include "stm8s.h" //#include "STM32f10x.h" /*********************define and global variables*********************************************/ //#define GPIO_Pin_TypeDef GPIO #define STB GPIO_PIN_0 //chip-select line #define CLK1 GPIO_PIN_1 //clock line #define DIO GPIO_PIN_2 //data line #define Set(x) GPIO_WriteHigh(GPIOB,(x)) //Sets the selected data port bits #define Reset(x) GPIO_WriteLow(GPIOB,(x)) //Resets the selected data port bits #define Get(x) GPIO_ReadInputPin(GPIOB,(x))==SET //Read the specified input port pin uint16_t const tm_dat[2][14]={{'0','1','2','3','4','5', //the char and its segment code '6','7','8','9','.','-','_',' '}, {0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F,0x80,0x40, 0x08,0x00}}; /*********************************************************************************************** *Function Name: RCC_Config *Purpose : Configration Clock ***********************************************************************************************/ void RCC_Config(){ CLK_HSECmd(ENABLE); } /*********************************************************************************************** *Function Name: GPIO_Config *Purpose : Configration GPIO ***********************************************************************************************/ void GPIO_Config(){ GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST); } /*********************************************************************************************** *Function Name: Write_Byte *Purpose : Write one byte to the data port *params : byte -------8-bits byte *return : none ***********************************************************************************************/ void Write_Byte(uint8_t byte){ uint8_t i=0; for(i=0;i<8;i++){ Reset(CLK1); if(byte&0x01){ Set(DIO); }else{ Reset(DIO); } Set(CLK1); byte>>=1; } } /*********************************************************************************************** *Function Name: Read_Byte *Purpose : Read one byte from data port *params : none *return : the 8-bits byte which is read from data port ***********************************************************************************************/ int8_t Read_Byte(){ uint8_t i=0; uint8_t temp=0x00; Reset(STB); for(i=0;i<8;i++){ Reset(CLK1); temp>>=1; if(Get(DIO)){ temp|=0x80; } Set(CLK1); } return temp; } /*unsigned char TM1638_Read(void) //?áêy?Yoˉêy { unsigned char i; unsigned char temp=0; Set(DIO); //éè???aê?è? for(i=0;i<8;i++) { temp>>=1; Reset(CLK1); if(DIO) temp|=0x80; Set(CLK1); } return temp; }*/ /*********************************************************************************************** *Function Name: Write_Cmd *Purpose : Write a conmand to the data port *params : cmd -------8-bits byte,the conmand,check the data sheet to find the conmand *return : none ***********************************************************************************************/ void Write_Cmd(uint8_t cmd){ Set(STB); Reset(STB); Write_Byte(cmd); } /*********************************************************************************************** *Function Name: Read_Key *Purpose : Read the key number which has been pressed *params : none *return : the number of the key. 0-8. "return 0" represents no key has been pressed. ***********************************************************************************************/ int8_t Read_Key(){ uint8_t i=0; uint8_t key1=0x00; uint16_t key2=0x00; Write_Cmd(0x42); Set(DIO); //this is obligatory, check the data sheet,GPIO for(i=0;i<4;i++){ key1=Read_Byte(); key2|=(key1< key2>>=1; for(i=0;i<8;i++){ if(0x01< } return 0; } /*unsigned char Read_key(void) { uint8_t c[4],i,key_value=0; Reset(STB); Write_Cmd(0x42); for(i=0;i<4;i++) c=TM1638_Read(); Set(STB); for(i=0;i<4;i++) key_value|=c< for(i=0;i<8;i++) if((0x01< break; return i; }*/ /*********************************************************************************************** *Function Name: Write_Dat *Purpose : Write data to the location specified *params : addr ------the address,0x00 to 0x0f dat ------the data,segment code *return : none ***********************************************************************************************/ void Write_Dat(uint8_t addr,uint8_t dat){ Write_Cmd(0x44); Write_Cmd(0xc0|addr); Write_Byte(dat); } /*********************************************************************************************** *Function Name: TM1638_SendData *Purpose : Write data to the location specified *params : i ------the bit code of digtal tube,0 to 7 str ------the string,the char which was not in tm_data will be replace with "''". *return : none ***********************************************************************************************/ void TM1638_SendData(uint8_t i,char * str){ int j=0,k=0; unsigned char chr; for(;i<8;i++){ k=0; for(j=0;j<14;j++){ if(*str==tm_dat[0][j]){ chr=tm_dat[1][j]; k=1; break; } } if(k==0){ chr=0x00; } if(*(str+1)=='.'){ chr|=0x80; Write_Dat(i*2,chr); str++; }else{ Write_Dat(i*2,chr); } str++; if(*str==' |