51单片机数码管
共阳极原理图
code存储器不直接存储到单片机的内存(IM存储器)当中,存储在code存储器当中。调用内容时需要将需要调用的内容先转到单片机的存储器(IM存储器)当中再执行操作。
code存储器使用方法:数据类型+code+名称
IM存储器执行操作要快于code存储器执行操作
静态数码管
静态数码管单个原理图
一个数码管是由a、b、c、d、e、f、g、dp八个二极管组成,八个LED一端接在一起,另一端引脚引出来。二极管如果阳极连在一起,就是共阳极数码管,阴极连在一起,就是共阴极数码管。
要使数码管显示不同的数字,只需点亮对应LED即可。比如说想要输出数字8就让a、b、c、d、e、f、g点亮。使用16进制数表示:0X80。
二极管如果阳极连在一起,就是共阳极数码管,阴极连在一起,就是共阴极数码管。
共阳极二极管提供低电位时进行工作;共阴极二极管提供高电位时进行工作。这个可以理解为通路:若二极管为共阳极时,需要提供低电位才可以构成通路;而当二极管为共阴极时,需要提供高电位才可以构成通路。
//1、将数码管第一个位置显示为数字8
#include<stc15.h>
typedef unsigned char uchar;//typedef重定义->将unsigned char重新定义为uchar
typedef unsigned int uint;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
void delay_ms(uchar tm);
void main()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //LED灯初始化:将LED灯全部关闭
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF; //LED数码管初始化:将LED数码管灯全部关闭
while(1)
{
P2 = 0XC0; P0 = 0X01; //0XC0第一个573(位锁存器)
P2 = 0XFF; P0 = 0X80; //0XFF第二个573(段锁存器)
delay_ms(1); //延时函数
}
}
void delay_ms(uchar tm)
{
uint i ,j;
for(i = 853; i > 1; i--)
{
for(j = tm; j > 1; j--);
}
}
//2、将数码管第一个数码管显示为0第二个数码管显示为1
#include<stc15.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
void delay_ms(uchar tm);
void main()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
while(1)
{
P2 = 0XC0; P0 = 0X01;
P2 = 0XFF; P0 = 0XC0;
delay_ms(1);
P2 = 0XC0; P0 = 0X02;
P2 = 0XFF; P0 = 0XF9;
delay_ms(1);
}
}
void delay_ms(uchar tm)
{
uint i ,j;
for(i = 853; i > 1; i--)
{
for(j = tm; j > 1; j--);
}
}
//3、使用数组将数码管的不同位置表示为不同数字
#include<stc15.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
void delay_ms(uchar tm);
void main()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
while(1)
{
P2 = 0XC0; P0 = 0X01;
P2 = 0XFF; P0 = tab[0];
delay_ms(1);
P2 = 0XC0; P0 = 0X02;
P2 = 0XFF; P0 = tab[1];
delay_ms(1);
P2 = 0XC0; P0 = 0X04;
P2 = 0XFF; P0 = tab[2];
delay_ms(1);
P2 = 0XC0; P0 = 0X08;
P2 = 0XFF; P0 = tab[3];
delay_ms(1);
P2 = 0XC0; P0 = 0X10;
P2 = 0XFF; P0 = tab[4];
delay_ms(1);
P2 = 0XC0; P0 = 0X20;
P2 = 0XFF; P0 = tab[5];
delay_ms(1);
P2 = 0XC0; P0 = 0X40;
P2 = 0XFF; P0 = tab[6];
delay_ms(1);
P2 = 0XC0; P0 = 0X80;
P2 = 0XFF; P0 = tab[7];
delay_ms(1);
}
}
void delay_ms(uchar tm)
{
uint i ,j;
for(i = 853; i > 1; i--)
{
for(j = tm; j > 1; j--);
}
}
LED数码管显示数字的代码如下:
显示数字0:0XC0
显示数字1:0XF9,
显示数字2:0XA4,
显示数字3:0XB0,
显示数字4:0X99,
显示数字5:0X92,
显示数字6:0X82,
显示数字7:0XF8,
显示数字8:0X80,
显示数字9:0X90,
显示横杠” - “:0XBF,
关闭数码管:0XFF