完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如何能让点阵显示的数字在外部中断中闪烁起来,我编写了程序,但烧录之后是瞬间闪一下,而且亮度很低,求大神帮助
d#include #include "74HC595.H" ***it k1=P3^2; unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code digittab[11][8]={ //字模取模方式 阴码 逆向 逐列式 点阵显示为从下往上看 {0x00,0x00,0x3E,0x41,0x41,0x3E,0x00,0x00},/*"0",0*/ }; unsigned int timecount; unsigned char cnta; unsigned char cntb; void delay1ms(unsigned int i) {unsigned char j; while(i--) { for(j=0;j<115;j++) //1ms基准延时程序 { ; } } } void main(void) { EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=0; //选择低电平来触发外中断 while(1) { for(cnta=0;cnta<8;cnta++) { Ser_IN(tab[cnta]);//8X8点阵列扫描 Ser_IN(digittab[cntb+1][cnta]);//8X8点阵行送扫描数据 +1与-1视显示而定 Par_OUT(); } }//74HC595输出显示 } void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 { if(k1==0) { delay1ms(30); if(k1==0) { for(cnta=0;cnta<8;cnta++) { Ser_IN(tab[cnta]);//8X8点阵列扫描 Ser_IN(digittab[cntb+10][cnta]);//8X8点阵行送扫描数据 +1与-1视显示而定 Par_OUT(); delay1ms(2500); for(cnta=0;cnta<8;cnta++) { Ser_IN(tab[cnta]);//8X8点阵列扫描 Ser_IN(digittab[cntb+1][cnta]);//8X8点阵行送扫描数据 +1与-1视显示而定 Par_OUT(); delay1ms(2500); } } } //底下部分是.H文件,主要是上面的程序如何修改,请大神给与帮助// //Note: 74HC595驱动 // __ __ //Note: MR 主复位接电源正极, OE 使能端,输出有效接电源负极 /*--------------------------------------------*/ #ifndef __74HC595_H__ #define __74HC595_H__ /*--------------------------------------------*/ ***it SD = P1^0; //串行数据输入 ***it ST_CK = P1^1; //存储寄存器时钟输入 ***it SH_CK = P1^2; //移位寄存器时钟输入 /*--------------------------------------------*/ //数码管断码和位码的定义 //unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff}; //0 1 2 3 4 5 6 7 8 9 a b c d e f 8 无 //unsigned char code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //1 2 3 4 5 6 7 8 /*--------------------------------------------*/ //函数声明 void Ser_IN(unsigned char Data); //串行数据输入 void Par_OUT(void); //串行数据输出 //void Ser_Par(unsigned char Data); //串行输入,并行输出 /*--------------------------------------------*/ //串行数据输入 void Ser_IN(unsigned char Data) { unsigned char i; for(i = 0; i < 8; i++) { SH_CK = 0; //CLOCK_MAX=100MHz SD = Data & 0x80; Data <<= 1; SH_CK = 1; } } /*--------------------------------------------*/ //并行数据输出 void Par_OUT(void) { ST_CK = 0; ST_CK = 1; } /*--------------------------------------------*/ //串行输入,并行输出 /*void Ser_Par(unsigned char Data) { Ser_IN(Data); Par_OUT(); } */ /*--------------------------------------------*/ #endif 补充内容 (2018-6-29 16:41): delay1ms(2500)就是延时,但是跑板子还是瞬间闪烁一下,而且亮度很暗,不知如何修改 |
|
相关推荐
7个回答
|
|
给点延时啊
|
|
|
|
***:嵌入式软件工程师 工作地点:深圳 面议 职位描述: 任职资格: 1、产品定义期间,负责对公司产品软件需求进行评估与评审; 2、根据公司产品软件功能和项目进度需求,实现软件程序单元和功能; 3、负责开发模块的自测、测试中BUG优化; 4、负责公司产品开发、推广和使用过程中,客户软件问题的技术支持; 5、负责产品生命周期内的软件升级和维护,完成和维护产品软件相关的开发文档。 任职要求: 1、计算机应用、软件工程相关专业; 2、具有基于嵌入式linux系统下的QT图形界面应用程序开发经验者***; 3、了解 C/C++ 等编程语言; 4、了解数据结构、软件工程、计算机网络基础知识,了解硬件接口原理,总线控制系统相关知识; 5、做事踏实认真,有较好的团队协作精神和较强的产品质量意识,可承担较大的项目压力。 T +86-755-26913559 P:***(微信) E:yx043@yaxunhr.com Q: 1837513343 |
|
|
|
|
|
|
|
需要改动电路了,增大电流,需要减小电阻
|
|
|
|
|
|
|
|
是吗,这个不好调节
|
|
|
|
不太明白你的要求,不过个人认为显示程序还是应该放在定时器里,除非你的外部中断可以周期的被触发,看中断程序,似乎只是显示了两次,那么如果显示两次后不再进入中断的话,那也就是不再显示了。
闪烁的话应该是在定时器中断里加多一个比扫描显示间断更长一些的定时时间,这个时间就是来确定闪烁时亮和暗的时间,可以根据闪烁效果来改变这个时间,也就是闪烁的过程中,亮是正常显示,暗则是关闭显示。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
795 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
668 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
845 浏览 0 评论
1508 浏览 3 评论
由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常?
2409 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
3681 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-28 17:51 , Processed in 0.393892 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号