打印
[STM32]

数码管段选不在同一组IO口,如何驱动?

[复制链接]
6494|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pidan678|  楼主 | 2014-12-3 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2014-12-3 17:06 | 只看该作者
那有什么问题吗,先关掉位选信号,再输出段信号,最后再开位信号

使用特权

评论回复
板凳
pidan678|  楼主 | 2014-12-3 17:11 | 只看该作者
ayb_ice 发表于 2014-12-3 17:06
那有什么问题吗,先关掉位选信号,再输出段信号,最后再开位信号

比如,像STM8S003 一组IO没有八个,段选接在不同的组的IO口,该如何操作?

使用特权

评论回复
地板
pidan678|  楼主 | 2014-12-3 17:18 | 只看该作者
突然间我又明白了~

使用特权

评论回复
5
wujh| | 2014-12-3 22:49 | 只看该作者
哈哈,还是先输出段信号,再输出位信号,不在同一IO组无非就是一个Byte不能解决的问题

使用特权

评论回复
6
ningling_21| | 2014-12-4 09:19 | 只看该作者
原理都一样...

使用特权

评论回复
7
samlianxing| | 2015-9-15 09:13 | 只看该作者
你的方法巳找了好几个师傅,他们试了一会都说不行,能给个实例吗?

使用特权

评论回复
8
457344370| | 2015-9-15 10:28 | 只看该作者
数码管刷新一般是放在中断里的,假如数码管有3个,定义个3字节的数组做buff,然后在1ms中断里逐个对IO赋值就行了,第一次进中断把buff[0]逐位赋给IO,第二次进用buff[1],依次循环

使用特权

评论回复
9
457344370| | 2015-9-15 10:51 | 只看该作者
更好看点的可以这样
typedef union
{
unsigned char bytes;
struct
{6
unsigned char bit0:1;
unsigned char bit1:1;
...
unsigned char bit7:1;
}bits;
}BITS_STRUCT;
BITS_STRUCT bits_buff[3];


使用:
bits_buff[0].bytes=0x55;
led0= bits_buff[0].bits.bit0;
led1= bits_buff[0].bits.bit1;
...

led7= bits_buff[0].bits.bit7;
呼。。。手机打字真累。。。

使用特权

评论回复
10
转基因西瓜| | 2017-7-14 22:21 | 只看该作者
本帖最后由 转基因西瓜 于 2017-7-14 22:24 编辑
sbit SEG1 = P2^3;
sbit SEG2 = P2^4;
sbit SEG3 = P2^5;
sbit SEG4 = P2^6;
sbit SEG5 = P1^3;
sbit SEG6 = P1^6;
sibt SEG7 = P1^7;
sbit SEG8 = P0^5;


void Set_SEG(unsigned char dat)
{
     SEG1 = dat & 0x01;
     dat >>= 1;
     SEG2 = dat & 0x01;
     dat >>= 1;
     SEG3 = dat & 0x01;
     dat >>= 1;
     SEG4 = dat & 0x01;
     dat >>= 1;
     SEG5 = dat & 0x01;
     dat >>= 1;
     SEG6 = dat & 0x01;
     dat >>= 1;
     SEG7 = dat & 0x01;
     dat >>= 1;
     SEG8 = dat & 0x01;
}

使用特权

评论回复
11
yoyodw123456| | 2019-12-17 22:59 | 只看该作者
试试,这样的情况实际使用的时候会经常碰到!!!

使用特权

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

本版积分规则

223

主题

404

帖子

5

粉丝