IIC-1602驱动

硬件:STM32103C8T6、LCD1602(带转接板)

软件:STTM32MX、HAL库、硬件IIC

 CUBEMX的配置很简单,但是注意要在SYS-Debug中选择调试方式,不然会出现下载一次程序后板子变成砖的情况,如果不小心变成砖,点此解决办法

配置硬件IIC也很简单,按照如下配置即可,然后生成代码:

生成的代码中有一项需要注意的,切记,切记,在调用 HAL_I2C_Master_Transmit 这个函数写IIC-1602的时候,第二个参数是目标设备地址,就是我们使用的1602的地址。这个按具体情况而定。

比如地址是0X27,但是你不能直接传入0X27,否则会写从机地址失败。这个函数上面的描述写了这么一句话

 DevAddress Target device address: The device 7 bits address value

  *         in datasheet must be shifted to the left before calling the interface

意思就是说,在传入地址之前,一定要将地址先左移一位再传参,传入0X4E,就可以达到我们的目的。

附上我写的代码链接,是可用的

IIC_LCD1602STM32-HAL驱动程序-硬件IIC_STM32HALIIC-嵌入式文档类资源-优快云下载

#include <reg51.h> //51敵湔恅璃 #include <intrins.h> #include"1602.h" /****************晊奀滲杅************************/ void delay1(int ms) { //晊奀赽最唗 int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); //諾硒俴 _nop_(); _nop_(); _nop_(); } } } /****************耜疆滲杅************************/ BOOL lcd_bz() { BOOL result; LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); //潰聆P0郔詢弇岆瘁峈1 LCD_EP = 0; return result;//殿隙耜疆賦彆 } /****************迡韜鍔滲杅************************/ void lcd_wcmd_8bit(int cmd) { // 迡硌鍔杅擂善LCD while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); P0 = cmd; //蔚詢4弇弇硌鍔籵徹P0諳換跤1602 _nop_(); _nop_(); //蚚衾莉汜珨跺闕喳遵僅 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; } void lcd_wcmd(int cmd) { // 迡硌鍔杅擂善LCD while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); P0 = cmd; //蔚詢4弇弇硌鍔籵徹P0諳換跤1602 _nop_(); _nop_(); //蚚衾莉汜珨跺闕喳遵僅 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; P0 = (cmd&0x0f)<<4; //蔚腴4弇硌鍔籵徹P0諳換跤1602 _nop_(); _nop_(); //蚚衾莉汜珨跺闕喳遵僅 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; } void lcd_pos(BYTE pos) { //扢隅珆尨弇离 lcd_wcmd(pos | 0x80); } /****************迡杅擂滲杅************************/ void lcd_wdat(BYTE dat) { //迡趼睫珆尨杅擂善LCD while(lcd_bz()); LCD_RS = 1; LCD_RW = 0; LCD_EP = 0; P0 = dat ; //蔚詢4弇杅擂籵徹P0諳換跤1602 _nop_(); _nop_(); //蚚衾莉汜珨跺闕喳遵僅 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; LCD_RS = 1; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); _nop_(); _nop_(); P0 = (dat&0x0f)<<4; //蔚腴4弇弇杅擂籵徹P0諳換跤1602 _nop_(); _nop_(); //蚚衾莉汜珨跺闕喳遵僅 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; } void lcd_init() //LCD場宎趙扢隅 { lcd_wcmd_8bit(0x38); //16*2珆尨ㄛ5*7萸淝ㄛ8弇杅擂 delay1(1); lcd_wcmd_8bit(0x38); //16*2珆尨ㄛ5*7萸淝ㄛ8弇杅擂 delay1(1); lcd_wcmd_8bit(0x28); //16*2珆尨ㄛ5*7萸淝ㄛ8弇杅擂 delay1(1); lcd_wcmd(0x28); delay1(1); lcd_wcmd(0x0c); //珆尨羲ㄛ壽嫖梓 delay1(1); lcd_wcmd(0x02); //珆尨羲ㄛ壽嫖梓 delay1(1); lcd_wcmd(0x01); //壺LCD腔珆尨囀 delay1(1); /* lcd_wcmd(0x38); //16*2珆尨ㄛ5*7萸淝ㄛ8弇杅擂 delay(1); lcd_wcmd(0x08); //珆尨羲ㄛ壽嫖梓 delay(1); // lcd_wcmd(0x04); //痄雄嫖梓 delay(1); lcd_wcmd(0x02); // 4弇恁寁 delay(1); lcd_wcmd(0x01); //壺LCD腔珆尨囀 delay(1); */ }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值