51单片机74hc595汇编问题

[复制链接]
1930|10
 楼主| 玫瑰少年 发表于 2021-5-19 13:53 | 显示全部楼层 |阅读模式
就是代码中测试为是么会重复显示两个数字,如何让六个数码管显示各个不同的数字,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
wh6ic 发表于 2021-5-19 13:59 | 显示全部楼层
你只设定了一次 0x43,它怎么可能显示其它数值?

评论

那为是么他会重复显示43,我明明只让两个数码管显示43  发表于 2021-5-19 14:05
tyw 发表于 2021-5-19 14:48 | 显示全部楼层
本帖最后由 tyw 于 2021-5-19 15:16 编辑

既然是串入并出级联,那6字节数据就得首尾衔接,排队左移到串口才行,先弄个16进转10进子程序,把待显数据准备好.





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gx_huang 发表于 2021-5-19 15:17 | 显示全部楼层
1、基本的软件知识
2、基本的逻辑电路知识,也就是数字电路,总要知道595的原理
henangongda123 发表于 2021-5-19 18:16 | 显示全部楼层
移位+锁存,八层是你的软件没写好,没有控制好移位的次数
 楼主| 玫瑰少年 发表于 2021-5-19 19:05 | 显示全部楼层
henangongda123 发表于 2021-5-19 18:16
移位+锁存,八层是你的软件没写好,没有控制好移位的次数

大哥,这是我重新写的,直接准备显示6位,但是错码,如果显示两位不循环的话就没问题,急救

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
henangongda123 发表于 2021-5-20 08:40 | 显示全部楼层
玫瑰少年 发表于 2021-5-19 19:05
大哥,这是我重新写的,直接准备显示6位,但是错码,如果显示两位不循环的话就没问题,急救 ...

汇编语言N年没用了,基本看不懂。。。
写程序要搞懂原理先,595是典型的串行操作,要按时序来,你数码管是7段显示,而595串行是8位数据,所以你要先搞明白数码管显示的0-9对应的595数据字库,然后按时序写数据再锁存就行了。乱码一般是你的字库跟实际显示数据对应不上。参考一下我之前写的C语言吧

评论

tyw
LZ说只显示2位是对的,估计七段译码没问题,6位显示乱码,估计是环移时出的毛病,多移或少移了.可根据显示的内容,倒译码,还原成2进码,再把数据2进码并排在下面,看看有什么差异.  发表于 2021-5-20 08:50
henangongda123 发表于 2021-5-20 08:41 | 显示全部楼层
  1. //数码管显示字库
  2. [url=home.php?mod=space&uid=592560]@near[/url] uchar table[]=
  3. {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
  4. /****** 74HC595驱动 ******/
  5. /***********************************************************
  6. 函数名:Write_Byte()
  7. 功  能:向74HC595芯片数据寄存器写入一字节数据
  8. 参  数:byte --- 欲写入的一字节数据内容
  9. 返回值:无
  10. /**********************************************************/
  11. void  Write_Byte(uchar byte)
  12. {
  13.   uchar  i;
  14.   for(i=0;i<8;i++)
  15.   {
  16.    if(byte & 0x01)            //若数据目前位为1
  17.           {
  18.             PA_ODR |= 0x08;         //写入1(14管脚)
  19.           }
  20.    else                       //若数据目前位为0
  21.           {
  22.                         PA_ODR &= (~0x08);      //写入0(14管脚)
  23.           }
  24.    PC_ODR &= (~0x08);         //拉低SCK(11管脚)
  25.    PC_ODR |= 0x08;     //拉高SCK(11管脚),595上升沿读入数据位
  26.    byte>>=1;                                  //数据右移1位,为送出新数据位做准备
  27.   }
  28. }
  29. /***********************************************************
  30. 函数名:Latch_595()
  31. 功  能:锁存并输出595读入的数据
  32. 参  数:无
  33. 返回值:无
  34. /**********************************************************/
  35. void  Latch_595(void)
  36. {
  37.   PC_ODR &= (~0x10);      //拉低RCK(12管脚),准备锁存脉冲信号
  38.   PC_ODR |= 0x10;     //拉高RCK,送出锁存脉冲信号(上升沿有效)
  39.   PD_ODR &= (~0x10);      //拉低RCK(12管脚),结束锁存脉冲信号
  40. }
  41. /***********************************************************
  42. 函数名:Disp_Light_Number()
  43. 功  能:数码管显示一个3位DMX512地址
  44. 参  数:number --- 欲显示的数内容
  45. 返回值:无
  46. /**********************************************************/
  47. void Disp_Light_Number(uchar number)
  48. {
  49.         uchar bai,shi,ge;           //定义百十个位
  50. //取得各位数字
  51.         bai = number/100;           //百位
  52.         shi = (number/10)%10;       //十位
  53.         ge = number%10;             //个位
  54. //动态显示
  55.         Write_Byte(0x20);
  56.         Write_Byte(table[ge]);      //显示个位
  57.         Latch_595();
  58.         Write_Byte(0x40);
  59.         Write_Byte(table[shi]);     //显示十位
  60.         Latch_595();
  61.         Write_Byte(0x80);
  62.         Write_Byte(table[bai]);     //显示百位
  63.         Latch_595();
  64. }


chineseboyzxy 发表于 2021-5-20 14:03 | 显示全部楼层
YIWEI:
MOV R1,#8
YW1:
RLC A
MOV DSA,C
CLR CLK
SETB CLK
DJNZ R1,YW1
RET
74164的移位程序,做的简易电子钟。应该跟595类似。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

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