完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
程序设计目标及程序运行结果说明
本程序是动态扫描所有的数码管,从左到右8个数码管分别显示1、2、3、4、5、6、7、8。 程序相关电路及工作原理说明 1.LED数码管电路 段选信号:P0[7…0] 位选信号:P2[2…0] 译码使能:P2.3非 2.LED数码管引脚定义 3.工作原理 P0口的8位输出分别控制1个LED数码管的7段和一个小数点;而P2.3经反相器U4C控制74HC138的使能信号E3,结合P2.0、P2.1、P2.2这3个位选控制信号确定8个LED数码管中的哪个被点亮;电阻R15~R22为限流电阻。当段选为高、使能信号有效时,对应的LED管将会发光。通过以一定频率扫描位选信号,修改段选信号进行数码管点亮一段时间,从而给人视觉上几个数码管几乎同时显示的效果。 控制信号 段选信号:一位数码管包含8个二极管,a-g,如图: 8个二极管共阴极,以位选信号作为使能信号 位选信号 位选信号为SEL P2[2…0],如果位选信号为101,结果译码器译码得到0001 0000(单热点编码方式),选择第五位数码管 点亮一位数码管 通电:每一位数码管的8个二极管阳极P0[7…0],共阴极,P0置1 使能:位选信号有效,3-8译码器使能有效,即P2.3=1 模式:I/O模式设置为推挽输出模式(设置P0M1、P0M0、P2M1和P2M0) 扫描频率:8位数码管不可能同时亮起来,我们需要设置扫描频率,使数码管类似流水灯诸葛亮起,知识此时扫描频率很高,我们可以定义一个空循环,在主函数中设置n值来得到合适的扫描频率。 代码如下: #include #define uint unsigned int #define uchar unsigned char //定义位选段选信号的十六进制常量 uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f};//段选信号 uchar weixuan[]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};//位选信号 void Init() { P2M0=0xff; P2M1=0x00; P0M0=0xff; P0M1=0x00; } void Delay(int n) //延时函数 { while(n--); } uint i=0; void main() { Init(); while(1) { for(i=0;i<8;i++) { P0=0; P2=weixuan;//位选信号P2[2..0],下一周期扫描下一个数码管 P0=duanxuan[i+1];//段选,设置下一个数码管显示的数值 Delay(600); } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3326 浏览 9 评论
3007 浏览 16 评论
3503 浏览 1 评论
9081 浏览 16 评论
4098 浏览 18 评论
1208浏览 3评论
619浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
607浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2348浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1910浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-3 03:17 , Processed in 0.987350 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号