完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
论坛首问!!!求助大神!!!
本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。 但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!! 程序一: #include #include void delay(int i) { while(i--); } ***it SRCLK=P3^6; ***it RCLK=P3^5; ***it SER=P3^4; unsigned char ledwei[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code ledduan1[]={ 0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00, 0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,}; void Hc595SendByte(char dat1,char dat2,char dat3,char dat4) { int i; for(i=0;i<8;++i) { SER=dat1>>7; dat1=dat1<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat2>>7; dat2=dat2<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat3>>7; dat3=dat3<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat4>>7; dat4=dat4<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } RCLK=0; _nop_(); _nop_(); RCLK=1; } void main() { int i; while(1) { for(i=0;i<16;i++) { Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[i+16],ledduan1[i]); delay(10); } } } 程序二: #include #include void delay(int i) { while(i--); } ***it SRCLK=P3^6; ***it RCLK=P3^5; ***it SER=P3^4; unsigned char ledwei[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code ledduan1[]={ 0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00, 0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,}; void Hc595SendByte(char dat1,char dat2,char dat3,char dat4) { int i; for(i=0;i<8;++i) { SER=dat1>>7; dat1=dat1<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat2>>7; dat2=dat2<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat3>>7; dat3=dat3<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(i=0;i<8;++i) { SER=dat4>>7; dat4=dat4<<1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } RCLK=0; _nop_(); _nop_(); RCLK=1; } void main() { int i; for(i=0;i<16;i++) { Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[i+16],ledduan1[i]); delay(10); } }
|
|
相关推荐
16个回答
|
|
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。 既然锁存了,就算不进行while(1)循环,也是一直亮着的。 在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所以才一直亮。
最佳答案
|
|
|
|
自己顶一下
|
|
|
|
我觉得我应该介绍一下这个程序
通过四个74HC595芯片来控制16x16点阵的四个管脚 函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。 数组ledwei充当位选的作用 |
|
|
|
你这16X16的点阵是什么样的接口啊?最好贴出原理图
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下? |
|
|
|
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口
|
|
|
|
gniquhs 发表于 2017-2-8 20:47 可能我没有表达清楚 我预测的效果是程序一一直亮着,程序二只闪一下 but 实际上是两个程序的效果一样 |
|
|
|
跟我想的差不多 不过你有注意到74HC595的12脚是锁存脚吗? 这个脚你不用是不会锁存数据的,所以只是闪一下 |
|
|
|
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
如此串行转并行之后的数据就能锁住不变,而不是一闪而逝 要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码 RCLK=0; _nop_(); _nop_(); RCLK=1;
|
|
|
|
这个好资料呀 感谢分享
|
|
|
|
gniquhs 发表于 2017-2-8 21:59 如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了 |
|
|
|
不不不。。。两个程序都是一直亮着 我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着 |
|
|
|
楼主记得选择最佳答案啊
|
|
|
|
|
|
|
|
感觉好强大的样子。
|
|
|
|
你现在的程序可以实现显示移动的汉字吗?
|
|
|
|
高通中外文字库IC,支持全世界170多国家的语言,全国唯一字库IC原厂,可加Q2850929208黄工索取资料
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11794 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 12:01 , Processed in 1.019628 second(s), Total 110, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号