1. 静态数码管显示
点亮数码管需要用到P0端口和P2部分端口,P0端口负责显示要输出的数字,P2部分端口负责让哪个数码管点亮,具体的去看电路图,这次还包含了74HC245和74HC138芯片
现在让单片机数码管区域第三位的数码管显示数字5,程序如下
#include"reg52.h"
//定义P2端口
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//用数组来表示数码管上每个数字输出对应的相关电平输入
int str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
void Display(int Location,int Number)
{
//利用case语句将8个数码管显示的位置一一列举
switch(Location)
{
case 1: LSC=0;LSB=0;LSA=0; break;
case 2: LSC=0;LSB=0;LSA=1; break;
case 3: LSC=0;LSB=1;LSA=0; break;
case 4: LSC=0;LSB=1;LSA=1; break;
case 5: LSC=1;LSB=0;LSA=0; break;
case 6: LSC=1;LSB=0;LSA=1; break;
case 7: LSC=1;LSB=1;LSA=0; break;
case 8: LSC=1;LSB=1;LSA=1; break;
}
P0=str[Number];
}
int main()
{
Display(3,5); //参数1表示数码管位置,参数2表示要输出的0-9的数字
while(1)
{
}
}
实验现象如下
2.动态数码管显示
这部分主要是注意延时和消除残影的问题,如不加延时的,两个数字切换的非常快,可能会导致篡位,程序如下
#include"reg52.h"
//定义P2端口
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//用数组来表示数码管上每个数字输出对应的相关电平输入
int str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
void Delay(int time)
{
while(time--) //while循环一次需要10us
{
}
}
void Display(int Location,int Number)
{
//利用case语句将8个数码管显示的位置一一列举
switch(Location)
{
case 1: LSC=0;LSB=0;LSA=0; break;
case 2: LSC=0;LSB=0;LSA=1; break;
case 3: LSC=0;LSB=1;LSA=0; break;
case 4: LSC=0;LSB=1;LSA=1; break;
case 5: LSC=1;LSB=0;LSA=0; break;
case 6: LSC=1;LSB=0;LSA=1; break;
case 7: LSC=1;LSB=1;LSA=0; break;
case 8: LSC=1;LSB=1;LSA=1; break;
}
P0=str[Number];
//延时一段时间,等待显示稳定,如果不加延时,就可能上一个数字和下一下篡位
Delay(100);
//消除数码管残影
P0=0x00;
}
int main()
{
//参数1表示数码管位置,参数2表示要输出的0-9的数字
while(1)
{
Display(1,1);
Display(2,2);
Display(3,3);
}
}
实验现象如下
上一篇:51单片机:定时器与中断系统的运用
下一篇:51单片机:LED灯流水灯
推荐阅读最新更新时间:2024-11-08 10:31
设计资源 培训 开发板 精华推荐
- AC182015-1,带 2.4GHz MRF24J40 射频收发器的 ZENA 无线适配器
- LT6654BMPS6-5、16 位 ADC 电压基准的典型应用
- 使用 ADA4077-4ARZ-RL 双电源高精度放大器用于低功耗线性化 RTD 电路的典型应用电路
- TC264D核心板(仿逐飞方案)
- FolderShell便携折叠模块化键盘
- LTM4631EV 4 相、1.2V、40A 输出降压型稳压器的典型应用电路
- 使用 NXP Semiconductors 的 PK40DX256VMD10 的参考设计
- NCP10970BGEVB:NCP10970B 评估板
- ADP2102-0.8-EVALZ 用于降压型 DC 至 DC 转换器解决方案的评估板
- LT1021BMH-5 用于处理更高负载电流的电压基准的典型应用