以下代码实现的功能为:数码管先单个从左到右显示0到9数字,再所有数码管共同显示0~9的数字
首先试试用存储进行代码编写吧
硬件知识:
数码管控制端口为高电平有效
单片机跳帽短接MM端哦
软件知识:
数码管段码表0~9不带小数点
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
编程思路为先向0xc000写入数据控制某个或某几个数码管通断,再利用数码管段码输入到0xe000中使得已接通的数码管显示相应的数字即可
具体代码如下
#include <reg52.h>
#include <absacc.h>
unsigned char code SMGduanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char j;
unsigned char k;
void delayms(unsigned char t)
{
unsigned char i;
while(t--)
{for(i=0;i<203;i++);
}
}
void displaynum()
{
for(j=0;j<=7;j++)
{ XBYTE[0xc000]=0x01<<j;//依次打通数码管
for(k=0;k<=9;k++)
{ XBYTE[0xe000]=SMGduanma[k];//单个数码管显示数字0~9
delayms(5000);
}
}
XBYTE[0xc000]=0xff;//打通所有数码管
for(k=0;k<=9;k++)
{ XBYTE[0xe000]=SMGduanma[k];
delayms(5000);
}
}
void main()
{
while(1)
{
displaynum();
}
}
下面一起来看看IO的写法
硬件准备:
1将J13的跳帽短接IO端
软件知识:
hc573的y6c为低电平时,P0控制数码段通断
hc573的y7c为低电平时,P0为写入数码管的数据
#include <reg52.h>
unsigned char code SMGduanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9段码
unsigned char j;
unsigned char k;
void sel573(unsigned char x)
{
switch(x)
{
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 delayms(unsigned char t)
{
unsigned char i;
while(t--)
{for(i=0;i<203;i++);
}
}
void displaynum()
{
for(j=0;j<=7;j++)
{ sel573(6);//依次打通数码管
P0=0x01<<j;
for(k=0;k<=9;k++)
{ sel573(7);//向数码管写入数据,此处可与存储写入的地方对比
P0=SMGduanma[k];
delayms(5000);
}
}
sel573(6);
P0=0xff;
for(k=0;k<=9;k++)
{ sel573(7);
P0=SMGduanma[k];
delayms(5000);
}
}
void main()
{
while(1)
{
displaynum();
}
}