实验五 静态数码管显示
一、实验目的
1.充分理解数码管显示原理。
2.能够利用延迟循环函数使数码管值连续变化。
二、实验要求
下载程序后,静态数码管流动显示数字0~9
三、实验内容
1、静态显示接口
一个并行I/O口接一个数码管。特点:编程较简单,但占用I/O口线多,一般用于显示位数较少的场合。
图5-1静态数码管显示结构
2、实验程序设计
通过KEIL软件进行程序设计如下:
显示段与段码位对应表
段码位 D7 D6 D5 D4 D3 D2 D1 D0 25
显示段 h g f
e d c b a #include
void Delay10ms(unsigned int c); //误差 0us
unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; void main(void) { }
void Delay10ms(unsigned int c) //误差 0us {
unsigned char a, b;
for (;c>0;c--) {
for (b=38;b>0;b--)
26
unsigned char i = 0; while(1) { }
GPIO_DIG = ~DIG_CODE[i]; i++; if(i == 16) { }
Delay10ms(50);
i = 0;
}
{
for (a=130;a>0;a--);
}
}
3.3实验现象
将程序下载到单片机中,可以看到静态数码管从0~F连续循环变化,实验正确。
图
静态数码管
27
实验六 动态数码管显示
一、实验目的
1.充分理解多位数码管应用于某一系统时的“位选”与“段选”。 2.通过程序加深对数码管的动态扫描显示的理解。
二、实验要求
设计编写程序出现以下现象:第一个数码管显示0,间隔一段时间关闭它,立即让第二个数码管显示1……一直到最后一个数码管显示8,再间隔一段时间后关闭它,立即让第一个数码管显示,一直这样循环下去。
三、实验内容
1、动态显示方式
1) 所有数码管的a~h段同名端连在一起,每一个数码管的公共极COM各自独
立地受I/O线控制。
2) 任一时刻只有一位显示,依次循环扫描,轮流显示。由于人眼的视觉滞留效
应,看起来与静态的效果基本一样。
3) 特点:占用I/O端口线少,电路较简单,但扫描过程不能停, 占用CPU的时
间长,适合显示位数较多的场合。 2、实验程序设计
显示原理:设待显的6个数放在内部RAM的mDS[0:5]中。从左至右一位一位地显示。P1.x=0 :x段亮。P2.y=1: y位选通。通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。 3、程序: #include
28
sbit LSC=P2^4;
unsigned char code DIG_CODE[17]={
//--定义全局变量--//
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; void DigDisplay(); //动态显示函数 void main(void) { }
void DigDisplay() {
unsigned char i; for(i=0;i<8;i++) { } while(1) { }
DigDisplay();
DisplayData[i]=DIG_CODE[i];
unsigned char i; unsigned int j; for(i=0;i<8;i++) {
switch(i) {
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
29
//位选,选择点亮的数码管,