数码管静态显示
六位8段数码管(共阴极)第一位循环显示“0,1234,5678,9AbC,dEF无.”
2021-01-20,51单片机学习笔记
六位 8段共阴极数码管 原理图:
代码:
/************************************************************
六位8段数码管(共阴极)第一位循环显示“0,1234,5678,9AbC,dEF无.”
*************************************************************/
/*共阴极数码管,则位显接高电平,段显接低电平时,数码管点亮*/
#include <reg52.h>
//#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;//段显
sbit wela=P2^7;//位显
/*共阴极数码管 段 字形 真值表:0,1234,5678,9AbC,dEF无.*/
uchar code duan[]={0x3f, //0
0x06,0x5b,0x4f,0x66, //1234
0x6d,0x7d,0x07,0x7f, //5678
0x6f,0x77,0x7c,0x39, //9AbC
0x5e,0x79,0x71,0x00, //dEF无
0x80}; //.
uint i;
void delayms(uint);
void main()
{
while(1)
{
P0=0xfe;//1111 1110,送入位显
/*P0的前六位中只有第一位是0,故仅LED1会亮*/
wela=1;//位显通过
wela=0;//位显保持
//依次显示"0123456789AbCdEF无."
for(i=0;i<18;i++)
{
P0=duan[i];//段 字形 数据的编码
dula=1;//段显通过
dula=0;//段显保持
delayms(502);//延时500ms
}
}
}
void delayms(uint ms) //延时函数,参数ms=100时,单次延时约100ms
{
uchar k;
while(ms--)
{
for(k = 0; k < 90; k++);
}
}
写在最后:
本文仅为个人学习笔记,纰漏之处,欢迎斧正!