51单片机(静态数码管)基于51STC15F2K61S2系列

本文详细介绍了51单片机中code存储器与IM存储器的区别,以及如何使用共阳极数码管显示数字的方法。通过代码示例展示了如何通过数组操作控制数码管的不同位置显示不同数字,包括延时函数的使用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值