数码管基础:
- 数码管由八个发光二极管组成成“8“字型,按极性分为共阴极数码管(阴极链接在一起)和共阳极数码管(阳极连接在一起)。本实验采用的是共阳极,若要亮,则相应位置0,即为低电平。
- 可以通过给数码管引脚置值来控制亮和灭,显示不同的图案,如下图所示 共阳极数码管再进行取反操作便可以显示相同的图案。
一.静态数码管实验
1.电路原理图
2.说明:实验中使用P0口控制,用排线接P0口和JP3.让数码管依次显示0-9。
3.源代码如下:
/***********************************************
> File Name: 静态数码管
> Author: pengshp
> Mail: [email protected]
> Date: 2015年 7 月 17 日
*************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_DIG P0
uchar code DIG_CODE[]={,,,,,
,,,,};//显示0-9的值
void Delay(uchar);
void main()
{
uchar i;
while()
{
for(i=;i<;i++) //依次显示0-9
{
GPIO_DIG=~DIG_CODE[i];
Delay(); //延时处理
}
}
}
void Delay(uchar x)
{
uint a,b;
for(a=x;a>;a--)
{
for(b=;b>;b--)
{
}
}
}
备注:程序中的code关键字表示将数据存储在程序存储空间(Flash)中,以节约RAM的空间,存储的数据只能读不能写入。
二.动态数码管(不带译码器)
1.电路原理图
2.说明
- 本实验通过控制八个数码管分别显示0-7个数字,使用的数码管为共阴极,即要亮时把相应位置1,输出高电平。接线为JP10(P0)接JP12,JP8接JP16右排(注意:有金属触电的一排朝右),再把JP165断开。
3.源代码如下
/**************************************
>File Name: 动态数码管显示
> Author: pengshp
> Mail: [email protected]
> Date: 2015年 7 月 17 日
***************************************/
#include<reg51.h>
#define GPIO_DIG P0 //段选
#define GPIO_PLACE P1 //位选
#define uchar unsigned char
#define uint unsigned char
uchar code DIG_PLACE[] = {,,,,
,,,};//位选控制 查表的方法控制
uint code DIG_CODE[] = {,,,, //0、1、2、3
,,,, //4、5、6、7
,,,, //8、9、A、B
,,,};//C、D、E、F
uchar DisplayDate[]=; //存放要显示的8位数字
void DigDisplay();
void main()
{
uchar i;
for(i=;i<;i++)
{
DisplayDate[i]=DIG_CODE[i];
}
while()
{
DigDisplay();
}
}
void DigDisplay()
{
uchar i;
uint j;
for(i=;i<;i++)
{
GPIO_PLACE = DIG_PLACE[i]; //发送位选,控制要亮的数码管
GPIO_DIG = DisplayDate[i]; //发送段码,显示相应的数字
j = ; //扫描间隔时间设定
while(j--);
GPIO_DIG = ; //消隐
}
}