xzf586 发表于 2018-9-21 17:53 有没有动态显示的 |
会飞的大象 发表于 2018-9-19 08:15 有没有动态显示的啊 |
zl2168 发表于 2018-9-21 10:58 兄弟,没有程序。。。。。。怎么参考 |
谢谢大家 |
会飞的大象 发表于 2018-9-19 08:15 #include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit SH=P2^0; sbit DS=P2^1; sbit ST=P2^2; uchar tab[6][8]={ {0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00}, {0x00,0x10,0x18,0x10,0x10,0x10,0x38,0x00}, {0x00,0x18,0x24,0x20,0x10,0x08,0x3C,0x00}, {0x00,0x18,0x24,0x20,0x10,0x20,0x24,0x18}, {0x00,0x10,0x18,0x14,0x3C,0x10,0x10,0x00}, {0x00,0x38,0x08,0x18,0x20,0x20,0x18,0x00} }; void delay(uchar i) { uchar j; for(j=100;j>0;j--) { for(;i>0;i--) ; } } void main() { uchar n,i,j,k,t; //SH=0; while(1) { // n=0x00; n=0; for (i=0;i<8;i++) { ST=0; P0=i; // for(j=0;j<8;j++) { for(k=0;k<5;k++) { t=tab[k][n]; for(j=0;j<8;j++) { SH=0; _nop_(); if(t&0x80) DS=1; else DS=0; SH=1; t<<=1; _nop_(); } //n++ ; } } ST=1; delay(10); n++; if(n==8) n=0; } } } |
1.png (5.49 KB, 下载次数: 51)
会飞的大象 发表于 2018-9-21 10:22 最后加上for(n==8)n=0;效果如图 |
1.png (20.36 KB, 下载次数: 52)
zl2168 发表于 2018-9-21 10:43 DS SHCP接一起,Q7'悬空,用STCP当选通也是可以的,只要以SHCP位时钟,在DS上发一个8位的数据,用STCP当选通,可以指定哪片595更新,而没被选通的则保持,这样灵活性更高,当然缺点是IO口占多点. |
本帖最后由 zl2168 于 2018-9-21 15:30 编辑 给你几个595应用案例,自己对照琢磨查错吧! ![]() 74LS595为串行移位寄存器,功能表如表3-21所示,引脚图如图3-46所示。DS为串行输入端,QS为串行输出端,Q0~Q7为并行输出端,CLK为移位脉冲输入端,CLR为并行输出清0端。 74HC595与74HC164功能相仿,区别是595串入并出分二步操作,第一步在CLK信号有效条件下移入595片内缓冲寄存器,第二步由595 RCK端(#12)输入一个触发正脉冲,片内缓冲寄存器中的数据进入输出寄存器。而74HC164是直接串入输出寄存器,串入中间过程有可能在并行输出端产生误动作。 另外,74HC595有禁止输出(高阻态)控制端OE,OE=0时,输出熄灭。若用一个引脚控制它,可以方便地产生闪烁效果。 实例44 74HC595串入并出控制8/16循环灯 ![]() ![]() ![]() 实例56 74LS595串行扩展3位LED数码管静态显示 ![]() ![]() 实例77 74HC595+165扩展8×8键盘 ![]() ![]() ![]() 先Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。 |
cjm82 发表于 2018-9-20 20:48 错!不要瞎指导。 |
现在情况是显示两个‘5’两个交错了一行,stcp好多 资料里都是并在一起的, |
stcp引脚不能串一起,需要单独分开 |
这个很简单的。。。。 |
#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit SH=P2^0; sbit DS=P2^1; sbit ST=P2^2; uchar tab[6][8]={{0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00}, {0x00,0x10,0x18,0x10,0x10,0x10,0x38,0x00}, {0x00,0x18,0x24,0x20,0x10,0x08,0x3C,0x00}, {0x00,0x18,0x24,0x20,0x10,0x20,0x24,0x18}, {0x00,0x10,0x18,0x14,0x3C,0x10,0x10,0x00}, {0x00,0x38,0x08,0x18,0x20,0x20,0x18,0x00}}; void delay(uchar i) { uchar j; for(j=100;j>0;j--) { for(;i>0;i--) ; } } void main() { uchar n,i,j,k,t; //SH=0; while(1) { // n=0x00; n=0; for (i=0;i<8;i++) { ST=0; P0=i; // for(j=0;j<8;j++) { for(k=0;k<5;k++) { t=tab[5][n]; for(j=0;j<8;j++) { SH=0; _nop_(); if(t&0x80) DS=1; else DS=0; SH=1; t<<=1; _nop_(); } //n++ ; } } ST=1; delay(10); n++; } } } |
情况不明,程序与电路都有可能出问题。 |