打印
[应用相关]

当这种时候,该如何写?

[复制链接]
804|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxmmi|  楼主 | 2019-3-13 19:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STM8库函数驱动1602,有一些GPIO和C语言的基础问题,请教:

1602的数据引脚共8个脚,网上找到的例子多数都是直接插在一个端口,这样的话使用库函数里定义就非常方便,当写数据时就可以:GPIO_Write(GPIOA, data); 这种方式简单方便。

但是我现在用的是STM8S003,一是引脚不多,且也没有完整的一个端口。另外,在未来的开发时,也不一定会有完整的一个端口供使用。
沙发
chuxh| | 2019-3-13 19:25 | 只看该作者


你的接法是?

使用特权

评论回复
板凳
xxmmi|  楼主 | 2019-3-13 19:29 | 只看该作者

RS --- PD6
RW --- PD5
EN --- PD4
DB01 --- PD3
DB02 --- PD2
DB03 --- PC6
DB04 --- PC5
DB05 --- PC4
DB06 --- PC3
DB07 --- PB4
DB08 --- PB5

使用特权

评论回复
地板
stly| | 2019-3-13 19:31 | 只看该作者
像你这样排引脚的话,没什么可以偷懒的,一个端口一个端口的改变状态吧。

使用特权

评论回复
5
renyaq| | 2019-3-13 19:34 | 只看该作者
LCD1602好像支持并口4位驱动的,速度要求不高的话,就这样用好了

使用特权

评论回复
6
xxmmi|  楼主 | 2019-3-13 19:38 | 只看该作者

void Lcd_Write_Port_Data(u8 data)
{
        if (data & 0x80)GPIO_WriteHigh(GPIOD, GPIO_PIN_3); else GPIO_WriteLow(GPIOD, GPIO_PIN_3);
        if (data & 0x40)GPIO_WriteHigh(GPIOD, GPIO_PIN_2); else GPIO_WriteLow(GPIOD, GPIO_PIN_2);
        if (data & 0x20)GPIO_WriteHigh(GPIOC, GPIO_PIN_6); else GPIO_WriteLow(GPIOC, GPIO_PIN_6);
        if (data & 0x10)GPIO_WriteHigh(GPIOC, GPIO_PIN_5); else GPIO_WriteLow(GPIOC, GPIO_PIN_5);
        if (data & 0x08)GPIO_WriteHigh(GPIOC, GPIO_PIN_4); else GPIO_WriteLow(GPIOC, GPIO_PIN_4);
        if (data & 0x04)GPIO_WriteHigh(GPIOC, GPIO_PIN_3); else GPIO_WriteLow(GPIOC, GPIO_PIN_3);
        if (data & 0x02)GPIO_WriteHigh(GPIOB, GPIO_PIN_4); else GPIO_WriteLow(GPIOB, GPIO_PIN_4);
        if (data & 0x01)GPIO_WriteHigh(GPIOB, GPIO_PIN_5); else GPIO_WriteLow(GPIOB, GPIO_PIN_5);
}

那就只能这样写了么?

使用特权

评论回复
7
xxrs| | 2019-3-13 19:40 | 只看该作者
觉得好笨的写法。

使用特权

评论回复
8
xxmmi|  楼主 | 2019-3-13 19:43 | 只看该作者

现在还不是做产品,只是学习。
所以想找到8线的最佳写法。

使用特权

评论回复
9
liuzaiy| | 2019-3-13 19:48 | 只看该作者

没什么好的方法,基本思路都一样,只不过有更好的处理方法,网上有的你需要自己动手找找

使用特权

评论回复
10
yinxiangh| | 2019-3-13 19:51 | 只看该作者

直接 每个端口&ox1/2/4/8 就可以了, 不需要后面的else了吧

使用特权

评论回复
11
pangb| | 2019-3-13 19:54 | 只看该作者

我看到别人也有驱动1602 是用4位数据口驱动的。

使用特权

评论回复
12
ousj| | 2019-3-13 19:57 | 只看该作者

没别的,把原来整个端口赋值的语句用几句来代替。

使用特权

评论回复
13
ousj| | 2019-3-13 20:01 | 只看该作者
602如果完整接线的话要用掉11个IO,太浪费IO了,完成可以用四线制的

使用特权

评论回复
14
zyf部长| | 2019-3-13 20:04 | 只看该作者
嗯,只要6个IO就行了,而且速度上没什么多大区别。

使用特权

评论回复
15
jiahy| | 2019-3-13 20:06 | 只看该作者
1602,四线能驱动,还有两线也能驱动的,节省IO资源

使用特权

评论回复
16
xxmmi|  楼主 | 2019-3-13 20:12 | 只看该作者


好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

评论回复
17
huzi2099| | 2019-3-14 08:42 | 只看该作者
即便不能有完整的port也尽量对齐,这样好写,比如PC3456->db3456

使用特权

评论回复
18
wakayi| | 2019-4-2 12:39 | 只看该作者
只要有效就可以

使用特权

评论回复
19
wowu| | 2019-4-2 12:41 | 只看该作者
唯一的办法就是最好的办法

使用特权

评论回复
20
xiaoqizi| | 2019-4-2 12:45 | 只看该作者
挂在总线上可以吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

369

主题

4278

帖子

2

粉丝