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

[复制链接]
7727|15
 楼主| pidan678 发表于 2014-12-3 16:57 | 显示全部楼层 |阅读模式
比如,char []={0x3f,......}
P0=char[0];
P0口接数码管段选

假如一组IO口不足八位,段选接在不同组的IO,该如何驱动?
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 | 显示全部楼层
突然间我又明白了~
wujh 发表于 2014-12-3 22:49 | 显示全部楼层
哈哈,还是先输出段信号,再输出位信号,不在同一IO组无非就是一个Byte不能解决的问题
ningling_21 发表于 2014-12-4 09:19 | 显示全部楼层
原理都一样...
samlianxing 发表于 2015-9-15 09:13 | 显示全部楼层
你的方法巳找了好几个师傅,他们试了一会都说不行,能给个实例吗?
457344370 发表于 2015-9-15 10:28 来自手机 | 显示全部楼层
数码管刷新一般是放在中断里的,假如数码管有3个,定义个3字节的数组做buff,然后在1ms中断里逐个对IO赋值就行了,第一次进中断把buff[0]逐位赋给IO,第二次进用buff[1],依次循环
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;
呼。。。手机打字真累。。。

转基因西瓜 发表于 2017-7-14 22:21 | 显示全部楼层
本帖最后由 转基因西瓜 于 2017-7-14 22:24 编辑
  1. sbit SEG1 = P2^3;
  2. sbit SEG2 = P2^4;
  3. sbit SEG3 = P2^5;
  4. sbit SEG4 = P2^6;
  5. sbit SEG5 = P1^3;
  6. sbit SEG6 = P1^6;
  7. sibt SEG7 = P1^7;
  8. sbit SEG8 = P0^5;


  9. void Set_SEG(unsigned char dat)
  10. {
  11.      SEG1 = dat & 0x01;
  12.      dat >>= 1;
  13.      SEG2 = dat & 0x01;
  14.      dat >>= 1;
  15.      SEG3 = dat & 0x01;
  16.      dat >>= 1;
  17.      SEG4 = dat & 0x01;
  18.      dat >>= 1;
  19.      SEG5 = dat & 0x01;
  20.      dat >>= 1;
  21.      SEG6 = dat & 0x01;
  22.      dat >>= 1;
  23.      SEG7 = dat & 0x01;
  24.      dat >>= 1;
  25.      SEG8 = dat & 0x01;
  26. }
yoyodw123456 发表于 2019-12-17 22:59 | 显示全部楼层
试试,这样的情况实际使用的时候会经常碰到!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

404

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部