完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
八位数码管原理图如下:
通过原理图,我们可以知道,数码管和led灯存在公用的线路。要使led灯能发亮,P2.3引脚就要置“1”,但是P2.3引脚为“1”时,数码管是不能正常显示的,所以要使数码管正常显示,要对P2.3引脚置“0”。 同时P2.0、P2.1和P2.2引脚对数码管显示也很重要(位置选择),三个引脚的状态(0或1)对应的三位二进制数可以表示0~7(分别对应从左到右的数码管) 。 与led灯一样,只要通过对P0口赋不同的值就可以显示不同的字符。 不同的段(A、B、C、D、E、F、G、DP)对应不同的引脚 A:P0^0 B:P0^1 C:P0^2 D:P0^3 E:P0^4 F:P0^5 G:P0^6 DP:P0^7 置“0”该段不亮,置“1”该段亮。如想要显示一个“1”,需要B段和C段亮,其他段不亮,所以P0口赋值为0x06。 DP/P0^7 G/P0^6 F/P0^5 E/P0^4 D/P0^3 C/P0^2 B/P0^1 A/P0^0 二进制 0 0 0 0 0 1 1 0 0x 0 //前四位转换16进 6 //后四位转换16进制 同理要想显示“7”,P0口就赋值为0x07(0000 0111)。 以下显示代码(效果为从左至右显示0~8) #include #define uint unsigned int #define uchar unsigned char uint i=0; 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--); } void main() { Init(); while(1) { for(i=0;i<8;i++) { P0=0; P2=weixuan; P0=duanxuan; Delay(600); } } } 虽然8个数码管都亮了,但并不是同时亮的,而是快速地选择不同的数码管(位选)点亮熄灭,也就是动态扫描。 |
|
|
|
只有小组成员才能发言,加入小组>>
3318 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9063 浏览 16 评论
4088 浏览 18 评论
1185浏览 3评论
611浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
601浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2337浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1897浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:50 , Processed in 1.321784 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号