1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【蓝桥杯单片机】共阳数码管

【蓝桥杯单片机】共阳数码管

时间:2021-07-03 00:32:52

相关推荐

【蓝桥杯单片机】共阳数码管

一、电路图

段选

位选

通过Y6选择八个数码管的一个或多个,再通过Y7进行数码管的显示。

段码:共阳数码管

数字1的显示:

dp=1 g=1 f=1 e=1 d=1 c=0 b=0 a=1(亮为0,灭为1)

1111 1001(二进制)

0xf9(十六进制)

其他类似,段码表为:

duanma[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}

二、实现代码

1.静态显示

例题:实现每一个数码管0-9的显示,再进行所有数码管0-15的显示。

#include "reg52.h"unsigned char code duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//code不会占用内存void Delay(t){while(t--);while(t--);}void selectHC573(unsigned char n){switch(n){case 4:P2=(P2 & 0x1f) | 0x80;break; case 5:P2=(P2 & 0x1f) | 0xa0;break;case 6:P2=(P2 & 0x1f) | 0xc0;break; case 7:P2=(P2 & 0x1f) | 0xe0;break; }}void showSMG_Bit(unsigned char dat,unsigned char pos){selectHC573(6); //数码管位置P0=0x01 << pos;selectHC573(7); //数码管内容P0=dat;}void smg_Static(){unsigned char i,j;for(i=0;i<8;i++){for(j=0;j<10;i++){showSMG_Bit(duanma[j],i);Delay(5000);Delay(5000);}}for(i=0;i<16;i++){selectHC573(6); //数码管位置P0=0xff;selectHC573(7); //数码管内容P0=duanma[i];Delay(5000);Delay(5000);}}void main(){while(1){smg_Static();}}

2.动态显示

例题:使八个数码管同时分别显示1-8。

#include "reg52.h"unsigned char code duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//code不会占用内存void selectHC573(unsigned char channel){switch(channel){case 4:P2=(P2 & 0x1f) | 0x80;break; case 5:P2=(P2 & 0x1f) | 0xa0;break;case 6:P2=(P2 & 0x1f) | 0xc0;break; case 7:P2=(P2 & 0x1f) | 0xe0;break; }}void diaplaysmg_bit(unsigned char value,unsigned char pos){selectHC573(6);P0 = 0x01 << pos;selectHC573(7);P0 = value;}void Delay(unsigned int t){while(t--);}void display(){diaplaysmg_bit(duanma[1],0);Delay(300);diaplaysmg_bit(duanma[2],1);Delay(300);diaplaysmg_bit(duanma[3],2);Delay(300);diaplaysmg_bit(duanma[4],3);Delay(300);diaplaysmg_bit(duanma[5],4);Delay(300);diaplaysmg_bit(duanma[6],5);Delay(300);diaplaysmg_bit(duanma[7],6);Delay(300);diaplaysmg_bit(duanma[8],7);Delay(300); //利用视觉残留的原理,只要切换的够快,在人眼中就是静止的。}void main(){while(1){display();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。