数码管基础:
- 数码管由八个发光二极管组成成“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 P0uchar code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};//显示0-9的值void Delay(uchar);void main(){ uchar i; while(1) { for(i=0;i<10;i++) //依次显示0-9 { GPIO_DIG=~DIG_CODE[i]; Delay(800); //延时处理 } }}void Delay(uchar x){ uint a,b; for(a=x;a>0;a--) { for(b=2000;b>0;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 charuchar code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制uint code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f, //0、1、2、3 0x66,0x6d,0x7d,0x07, //4、5、6、7 0x7f,0x6f,0x77,0x7c, //8、9、A、B 0x39,0x5e,0x79,0x71};//C、D、E、Fuchar DisplayDate[8]=0; //存放要显示的8位数字void DigDisplay();void main(){ uchar i; for(i=0;i<8;i++) { DisplayDate[i]=DIG_CODE[i]; } while(1) { DigDisplay(); }}void DigDisplay(){ uchar i; uint j; for(i=0;i<8;i++) { GPIO_PLACE = DIG_PLACE[i]; //发送位选,控制要亮的数码管 GPIO_DIG = DisplayDate[i]; //发送段码,显示相应的数字 j = 10; //扫描间隔时间设定 while(j--); GPIO_DIG = 0x00; //消隐 }}
版权声明:本文为博主原创文章,未经博主允许不得转载。