📄 led8.c
字号:
/*01数码管的显示,动态显示,数码管显示两位以上,从这个例子我们可以学习多位数码管的显示技术,
这里也可以让我们知道为什么P2的输出用74HC245,而不用销存器的原因了*/
#include "reg51.h"
#include <intrins.h>
/********************/
unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9 表
/********************/
sbit LHJ_A = P1^0; //管脚定义 74HC138(3-8)译码器输入控制信号线
sbit LHJ_B = P1^1;
sbit LHJ_C = P1^2;
/********************/ //宏定义 ,定义数码管显示第几位
#define SMG_1 LHJ_C=0;LHJ_B=0;LHJ_A=0 //译码器的输入脚,全0选择第一位数码管。
#define SMG_2 LHJ_C=0;LHJ_B=0;LHJ_A=1 //译码器的输入脚,001选择第二位数码管。
#define SMG_3 LHJ_C=0;LHJ_B=1;LHJ_A=0 //同上类推
#define SMG_4 LHJ_C=0;LHJ_B=1;LHJ_A=1
#define SMG_5 LHJ_C=1;LHJ_B=0;LHJ_A=0
#define SMG_6 LHJ_C=1;LHJ_B=0;LHJ_A=1
#define SMG_7 LHJ_C=1;LHJ_B=1;LHJ_A=0
#define SMG_8 LHJ_C=1;LHJ_B=1;LHJ_A=1
/******************************/
void delay(void);
//延时子函时,
/***************/
void main(void)
{
unsigned char i; //定义循环变量
unsigned int j;
while(1)
{
for(i=0;i<10;i++) //一位数码管循环显示0-9
{
j=5000; //这个是用来显示一次数的时间长短
while(j--){
SMG_8; //选择第八位数码管
P2=table[i]; //P2,查表输出定义好的数码管段时,显示相应的0-9
delay(); //延时
P2=0; //显示一位时,这里可要可不要,
}
}
//显示完一位,接着显示两位
for(i=0;i<10;i++) //两位数码管循环显示0-9
{
j=3500; //这个怎么跟上面的少了,是的,因为这里显示两位,要保持时间差不多,所以把显示量相应减去
while(j--){
SMG_8; //选择第八位数码管
P2=table[i]; //P2,查表输出定义好的数码管段时,显示相应的0-9
delay(); //延时
P2=0; //这里先关闭数码管不显示,为下一位显示做准备,否则就会有拖影像现,
//因此这里不用锁存器的原因就在此了,以下都类同。
SMG_7;
P2=table[i];
delay();
P2=0;
}
}
////显示完两位,接着显示三位
for(i=0;i<10;i++) //三位数码管循环显示0-9
{
j=2800; //以上面相同
while(j--){
SMG_8; //选择第八位数码管
P2=table[i]; //P2,查表输出定义好的数码管段时,显示相应的0-9
delay(); //延时
P2=0;
SMG_7;
P2=table[i];
delay();
P2=0;
SMG_6;
P2=table[i];
delay();
P2=0;
}
}
////显示完三位,接着显示四位
for(i=0;i<10;i++) //四位数码管循环显示0-9
{
j=2500; //以上面相同
while(j--){
SMG_8; //选择第八位数码管
P2=table[i]; //P2,查表输出定义好的数码管段时,显示相应的0-9
delay(); //延时
P2=0;
SMG_7;
P2=table[i];
delay();
P2=0;
SMG_6;
P2=table[i];
delay();
P2=0;
SMG_5;
P2=table[i];
delay();
P2=0;
}
}
////显示完四位,接着隔位显示四位
for(i=0;i<10;i++) //四位数码管循环显示0-9
{
j=2500; //以上面相同
while(j--){
SMG_8; //选择第八位数码管
P2=table[i]; //P2,查表输出定义好的数码管段时,显示相应的0-9
delay(); //延时
P2=0;
SMG_6; //隔位,不用7,跳到6
P2=table[i];
delay();
P2=0;
SMG_4;
P2=table[i];
delay();
P2=0;
SMG_2;
P2=table[i];
delay();
P2=0;
}
}
}
}
/*******************************/
//延时子函数
//参数范围 0-65536
void delay(void) //延时子函数
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -