蓝桥单片机_03共阳数码管的静态显示
程序员文章站
2022-06-08 20:56:23
...
1. 题目
2. 有关电路图及分析
Y6C通过译码器控制com1-8; Y7C通过译码器控制a-g+dp段码。
1-F及.:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f。
3. 代码
#include "reg52.h"
unsigned char code SMG_duanma[18]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f
}; //0-15和.-
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitHC138(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)
{
InitHC138(6);
P0=0x01<<pos; //数码管的位置
InitHC138(7);
P0=dat; //数码管的内容
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++){ //8个数码管依次显示
for(j=0;j<10;j++){ //第一个数码管1-9显示
ShowSMG_Bit(SMG_duanma[j],i);
Delay(60000);
Delay(60000);
}
Delay(60000);
Delay(60000);
} //每个数码管0-9的显示
for(j=0;j<16;j++){
InitHC138(6);
P0=0xff; //打开所有的com端
InitHC138(7);
P0=SMG_duanma[j]; //0-F显示
Delay(60000);
Delay(60000);
} //所有数码管0-15的显示
}
void main()
{
while(1){
SMG_Static();
}
}
4. 部分代码解释
case 4:
P2=(P2&0x1f)|0x80;
break;
4是100,即P2端的567端为100,与00011111相与,再与10000000相或;
相与是让P2端除567端外不变,567端先取0;
相或是让P2端除567端外不变,567端取100;
同理:5是101,567端取101,相或的就是10100000为a0;
6是110,567端取110,相或的就是11000000为c0;
7是111,567端取111,相或的就是11100000为e0;
5.注
本博客是学习完B站某视频后所写,如有错误,欢迎指正;如有侵权,删除。
学习网址:https://www.bilibili.com/video/av41275873?p=4。
下一篇: Python判断变量是否已经定义的方法