完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
店家给的是51或者arduino的,花了点时间移植一下;
IIC协议这里就不多说了; 使用模拟IIC口 定义B12 B13 #define AnalonSDA_Pin GPIO_PIN_12 #define AnalonSDA_GPIO_Port GPIOB #define AnalonSCL_Pin GPIO_PIN_13 #define AnalonSCL_GPIO_Port GPIOB IO配置为输出 /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : PBPin PBPin */ GPIO_InitStruct.Pin = AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 驱动程序 void displayData(uint8_t iData,uint8_t tab) { int i; int itemp; itemp = iData; for(i=2;i》=0;i--) { { Write_DATA(0x68+2*i,tabForDisplay[itemp%10]|0x80); //显示小数点 } itemp = itemp/10; } } void TM1650_start() { { HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_RESET); HAL_Delay(1); } } void TM1650_stop() { { HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_RESET); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_SET); HAL_Delay(1); } } void TM1650_ACK() { GPIO_InitTypeDef GPIO_InitStruct; { HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_SET); GPIO_InitStruct.Pin = AnalonSDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_RESET); HAL_Delay(1); GPIO_InitStruct.Pin = AnalonSDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_Delay(1); } } void TM1650_Write(unsigned char DATA) //写数据函数 { GPIO_InitTypeDef GPIO_InitStruct; unsigned char i; GPIO_InitStruct.Pin = AnalonSDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_RESET); for(i=0;i《8;i++) { if(DATA&0X80) HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(AnalonSDA_GPIO_Port, AnalonSDA_Pin, GPIO_PIN_RESET); DATA《《=1; HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_RESET); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(AnalonSCL_GPIO_Port, AnalonSCL_Pin, GPIO_PIN_RESET); HAL_Delay(1); } } void Write_DATA(unsigned char add,uint8_t DATA) //指定地址写入数据 { TM1650_start(); TM1650_Write(add); TM1650_ACK(); TM1650_Write(DATA); TM1650_ACK(); TM1650_stop(); } 因为博主使用freertos 所以在测试任务里面调用 void StartDefaultTask(void const * argument) { /* USER CODE BEGIN StartDefaultTask */ unsigned char i,j; Write_DATA(0x48,0x31); /* Infinite loop */ for(;;) { //根据发送来的数值在数码管显示 for(i=0;i《16;i++) { for(j=0;j《4;j++) { Write_DATA(0x68+2*j,tabForDisplay[(j+i)%10]|0x80); } HAL_Delay(500); } osDelay(1); } /* USER CODE END StartDefaultTask */ } 依次显示1234 2345 4567。。。 |
|
|
|
只有小组成员才能发言,加入小组>>
4523个成员聚集在这个小组
加入小组3339 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4268 浏览 1 评论
4295 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 16:26 , Processed in 0.828892 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号