完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
#include
#include #define uint unsigned int #define uchar unsigned char uchar temp; uint i; void delay(uint); void WR_5951(); void OUT_5951(); ***it SH_CP=P0^0; ***it ST_CP=P0^2; ***it DS=P0^1; uchar code TB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*将数据输入移位寄存器*/ void WR_5951() { SH_CP=0; for(i=0;i<8;i++) {temp=temp<<1; DS=CY; SH_CP=1; SH_CP=0; } } /*将数据输入寄存器并输出*/ void OUT_5951() { ST_CP=0; ST_CP=1; delay(1); ST_CP=0; delay(1); } /*延时子程序delay(100)约延时1S*/ void delay(uint z) { uint x,y; for(x=1760;x>0;x--) for(y=z;y>0;y--); } /*主程序*/ void main() { for(i=0;i<8;i++) { temp=TB[i]; WR_5951(); OUT_5951(); delay(1000); } }
|
|
相关推荐
19个回答
|
|
|
这是图 仿真开始8个LED一起亮 并不是逐一亮 并延时10秒
|
|
|
|
|
|
#include
#include #define uint unsigned int #define uchar unsigned char ***it SH_CP=P0^0; ***it ST_CP=P0^2; ***it DS=P0^1; uchar code TB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*延时子程序delay(100)约延时1S*/ void delay(uint z) { uint x,y; for(x=1760;x>0;x--) for(y=z;y>0;y--); } /*将数据输入移位寄存器*/ void WR_5951(uchar temp) { for(i=0;i<8;i++) { SH_CP=0; DS=CY&0x01; temp>>=1; SH_CP=1; } } /*将数据输入寄存器并输出*/ void OUT_5951() { ST_CP=0; _nop_(); ST_CP=1; } /*主程序*/ void main() { uchar i; whlie(1) { for(i=0;i<8;i++) { WR_5951(TB[i];); OUT_5951(); delay(1000); } } } 试下看行不! |
|
|
|
|
|
P0口要上拉电阻才行!换其端口试一下!
|
|
|
|
|
|
那个CY不知道会不会有问题,你试试不用CY先
|
|
|
|
|
|
上拉电阻会不会是一个因素呢?
|
|
|
|
|
|
不用声明 WR_5951 和 OUT子函数么? 除了这些 还有些小错误 我刚刚编译仿真了 和我原来的那个结果是一样的 一下全亮了 |
|
|
|
|
|
|
|
|
|
|
|
不行 还是一样的结果 刚刚想学单片机就遇到解决不了的问题 |
|
|
|
|
|
|
|
|
|
|
|
/*主程序*/ void main() { temp=0xfe; WR_5951(); OUT_5951(); delay(1000); }用您说的方法,我只设定第一个LED亮,但是仿真的结果是 开始8个全亮,然后7个熄灭 只有第一个亮,会不会单片机上电之后P2口默认为高电平使SHPC=H STCP=H OE=L所以 74HC595自己输出一个0000 0000 使8个灯亮 单片机执行指令后使第一个亮。 注: 我单独的使74HC595复位 它也能点亮8个灯 |
|
|
|
|
|
谢谢帮顶 ,可以帮忙解决这个问题吗? |
|
|
|
|
|
ds=cy cy是什么?mobile_fromtype_android
|
|
|
|
|
|
CY是PSW程序状态字的D7位,移位类指令temp=temp<<1被移除来的 最高位 会存放在CY里面 所以DS=CY就是将TEMP被移除的哪一位送给DS然后串行输入给74HC595 |
|
|
|
|
|
子涵数在主涵数前面不用声明! |
|
|
|
|
|
#include
#include #define uint unsigned int #define uchar unsigned char ***it SH_CP=P0^0; ***it ST_CP=P0^2; ***it DS=P0^1; uchar code TB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void Delay100us() //@12.000MHz { unsigned char i; _nop_(); i = 47; while (--i); } /*延时子程序约延时1S*/ void Delay1000ms() //@12.000MHz { unsigned char i, j, k; _nop_(); i = 8; j = 154; k = 122; do { do { while (--k); } while (--j); } while (--i); } /*将数据输入移位寄存器*/ void WR_5951(uchar temp) { unsigned char i; for(i=0;i<8;i++) { SH_CP=0; Delay100us(); DS=temp&0x01; temp>>=1; SH_CP=1; Delay100us(); } SH_CP=0; } /*将数据输入寄存器并输出*/ void OUT_5951() { ST_CP=0; Delay100us(); ST_CP=1; } /*主程序*/ void main() { uchar i; while(1) { for(i=0;i<8;i++) { WR_5951(TB[i]); OUT_5951(); Delay1000ms(); } } } //试下看行不!
|
|
|
|
|
|
可以流水只是顺序不对 ,为什么是右移temp>>=1 为了让第一个灯亮 我们不是要将0XFE(1111 1110)左移8位吗? 这样Q7Q6Q5Q4Q3Q2Q1Q0才是(1111 1110)啊 |
|
|
|
|
|
好哇,继续努力
|
|
|
|
|
|
看自己的要求而定嘛!举一反三啦! |
|
|
|
|
|
我也是遇到这个问题,一上电全部都亮
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
384 浏览 0 评论
398 浏览 0 评论
405 浏览 0 评论
780 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
741 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16998 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-11 20:07 , Processed in 1.245227 second(s), Total 113, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1797