找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5660|回复: 10
收起左侧

数码管段选不在同一组单片机IO口怎么办?

[复制链接]
ID:466652 发表于 2019-4-7 18:46 | 显示全部楼层 |阅读模式
请教各位,数码管不在同一组IO口,怎么定义数组, 1554633771(1).png

回复

使用道具 举报

ID:466652 发表于 2019-4-7 19:02 | 显示全部楼层
想写一个0一100的倒计时
回复

使用道具 举报

ID:164602 发表于 2019-4-8 07:55 | 显示全部楼层
思路是这样的:
第一:像其它的在同一IO口的程序一样,先赋值。
第二:专门编写一个函数,通过刚才的赋值,再分别对对应的IO口赋值,一般就是位赋值了
第三:对位赋值完成后,就可以显示了。
回复

使用道具 举报

ID:213173 发表于 2019-4-8 12:01 | 显示全部楼层
给你一个异组端口的4*4矩阵键盘程序,读、写函数同样适用于异组端口组成的数码管段码驱动程序
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit code0=P2^2;                                        //定义4*4键盘端口
  5. sbit code1=P2^4;
  6. sbit code2=P3^2;
  7. sbit code3=P3^3;
  8. sbit code4=P3^4;
  9. sbit code5=P3^5;
  10. sbit code6=P3^6;
  11. sbit code7=P3^7;       
  12. uchar key=0xff;                                                //键值变量初始值

  13. void PX(uchar i)                                        //写入8位数据
  14. {   
  15.     code0=i&0x01;i>>=1;       
  16.     code1=i&0x01;i>>=1;
  17.     code2=i&0x01;i>>=1;
  18.     code3=i&0x01;i>>=1;
  19.     code4=i&0x01;i>>=1;
  20.     code5=i&0x01;i>>=1;
  21.     code6=i&0x01;i>>=1;
  22.     code7=i&0x01;
  23. }

  24. uchar PD()                                                        //读取8位数据
  25. {
  26.         uchar i;
  27.         i=code7;
  28.         i=(i<<1)|code6;
  29.         i=(i<<1)|code5;
  30.         i=(i<<1)|code4;
  31.         i=(i<<1)|code3;
  32.         i=(i<<1)|code2;
  33.         i=(i<<1)|code1;
  34.         i=(i<<1)|code0;
  35.         return i;
  36. }

  37. void key_scan()                                                //矩阵键盘扫描函数
  38. {
  39.         uchar num;                                                //临时变量
  40.         static bit sign=0;                                //按键自锁标志
  41.         static uint count=0;                        //消抖计数变量
  42.         PX(0xf0);                                                //先给矩阵端口赋一个初值0xf0
  43.         if(PD()!=0xf0)                                         //判断矩阵端口不等于所赋初值,说明有健按下
  44.         {
  45.                 count++;                                        //消抖计数
  46.                 if((count>=100)&&(sign==0))//如果按键自锁标志为0
  47.                 {
  48.                         sign=1;                                        //按键自锁标志置1,键不抬起,按其他键无效
  49.                         num=PD();                                //读PD()值保存 xxxx 0000,x为0或1
  50.                         num|=0x0f;                                //num按位或0x0f值xxxx 1111
  51.                         PX(num);                                //num代入PX
  52.                         num=PD();                                //再读PD()值保存xxxx xxxx
  53.                         key=num;                                //输出键值
  54.                 }
  55.         }
  56.         else                                                         //按键抬起
  57.         {
  58.                 sign=0;                                                //按键自锁标志清0
  59.                 count=0;                                        //消抖计数清0
  60.         }
  61. }
  62. void main()
  63. {        
  64.         while(1)               
  65.         {
  66.                 key_scan();                                        //键盘扫描
  67.                 P1=key;                                                //LED低电平亮显示键值
  68.         }                                                                               
  69. }
复制代码



回复

使用道具 举报

ID:388197 发表于 2019-4-8 12:47 | 显示全部楼层
写个函数,n为段码表里的元素.把n的各位分别赋值给对应IO口就好了.
seg_a = (n>>0)&0x01;
seg_b = (n>>1)&0x01;
....
seg_g = (n>>6)&0x01;
seg_h = (n>>7)&0x01;

dig_x = x;
回复

使用道具 举报

ID:504803 发表于 2019-4-8 13:50 | 显示全部楼层
单个也可以控制
回复

使用道具 举报

ID:401564 发表于 2019-4-8 17:37 | 显示全部楼层
你不是会因为这样好画板才把数码管的脚位放这又放那吧?
PE端口不是可以的吗?
不在同一个端口的话,你这一个位一个位的去操作高电平还是低电平
还是在同一个端口的好
回复

使用道具 举报

ID:322939 发表于 2019-12-13 21:19 | 显示全部楼层
cjm82 发表于 2019-4-8 12:47
写个函数,n为段码表里的元素.把n的各位分别赋值给对应IO口就好了.
seg_a = (n>>0)&0x01;
seg_b = (n>>1)& ...

这位大神能详细点说下吗?谢谢!
回复

使用道具 举报

ID:525068 发表于 2019-12-14 13:10 | 显示全部楼层
直接对单个的IO口进行控制就行呀
回复

使用道具 举报

ID:607312 发表于 2019-12-14 16:44 | 显示全部楼层
位操作或者先赋值再写操作,我通常是怎么处理的
回复

使用道具 举报

ID:322939 发表于 2019-12-21 13:13 | 显示全部楼层
哦,知道了,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表