数码管显示.docx

上传人:b****3 文档编号:11154462 上传时间:2023-05-29 格式:DOCX 页数:19 大小:286.82KB
下载 相关 举报
数码管显示.docx_第1页
第1页 / 共19页
数码管显示.docx_第2页
第2页 / 共19页
数码管显示.docx_第3页
第3页 / 共19页
数码管显示.docx_第4页
第4页 / 共19页
数码管显示.docx_第5页
第5页 / 共19页
数码管显示.docx_第6页
第6页 / 共19页
数码管显示.docx_第7页
第7页 / 共19页
数码管显示.docx_第8页
第8页 / 共19页
数码管显示.docx_第9页
第9页 / 共19页
数码管显示.docx_第10页
第10页 / 共19页
数码管显示.docx_第11页
第11页 / 共19页
数码管显示.docx_第12页
第12页 / 共19页
数码管显示.docx_第13页
第13页 / 共19页
数码管显示.docx_第14页
第14页 / 共19页
数码管显示.docx_第15页
第15页 / 共19页
数码管显示.docx_第16页
第16页 / 共19页
数码管显示.docx_第17页
第17页 / 共19页
数码管显示.docx_第18页
第18页 / 共19页
数码管显示.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数码管显示.docx

《数码管显示.docx》由会员分享,可在线阅读,更多相关《数码管显示.docx(19页珍藏版)》请在冰点文库上搜索。

数码管显示.docx

数码管显示

第二讲数码管显示

一、硬件电路

图1数码管与单片机连接电路

图1为与实验板配套的数码管电路,该电路使用时要先用短路帽接上CON2,以便给74HC573锁存器供电。

数码管显示实验电路有两种核心器件:

数码管和锁存器。

74HC573锁存器可以锁存数据,当锁存器的C为高电平时,锁存器的输出随输入变化,输入为高电平,输出也为高电平,输入为低电平时,输出跟着也会低电平。

当锁存器C为低电平时,输出状态保存其最后一次C使能时的状态。

数码管按段数可分为七段数码管和八段数码管,每段为一个发光二极管单元。

八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)。

按发光二极管单元连接方式可分为共阳数码管和共阴数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共阴极COM端接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段不亮。

本实验使用的F5361AH三位数码管是共阴数码管。

二、数码管的外形及引脚排列

1、1位数码管

(a)(b)

图2

图2中(a)为1位数码管的外形图,(b)为其对应的引脚图,小数点端为引脚5,与之同排的第1个引脚为引脚1。

提示:

如不知道数码管共阴或共阳,可用数字万用表电阻档的200欧档测量,用黑表笔接公共端,红表笔接公共端之外的任何一引脚,如有二极管段点亮,则为共阴数码管,否则为共阳数码管。

引脚排列亦按此方法判断。

2、本实验所使用的三位数码管5361的外形及引脚定义

三位数码管引脚定义:

正面观看(此时小数点在右下角),引脚排布如下

121110987

123456

各引脚定义如下:

121110987654321

DIG1AFDIG2DIG3B不用GCDPDE

其中DIG1~3分别为正面观看时从左到右的三个数码管的公共端。

对于共阴数码管,如需点亮对应的二极管位,则此公共端必须为低电平。

三、程序示例一:

用第一个数码管显示数字8

分析:

要想显示8,第一个数码管的各段位应为

HGFEDCBA

01111111

其中H可为0可为1。

设置各段位的步骤:

1、设置该数码管公共端低电位:

将控制各数码管公共端的锁存器573B的LE端(图1的C段)置高电平,P00置低电平,由于锁存器573的LE为高电平时其输出与输入同步,故此时第一个数码管的公共端WE1也为低电平。

2、点亮第一个数码管对应的二极管段位:

将控制数码管各段位的锁存器573A的LE端置高电平,由于此时锁存器的输入输出同步,故要想显示8,只需将十六进制数0X7F送入P0口,在输出端即可使得第一个数码管对应的段位为01111111。

说明:

由于两个573锁存器共用P0口,故在进行第2步时需要将控制各数码管公共端的锁存器573B的LE置为低电平。

此时573B的输出不随输入变化,故WE1的状态不随P00的电平变化而变化。

又由于锁存器的锁存作用使得此时的WE1的状态不变,在执行第2步时仍为低电平。

#include

voidmain()

{

P2=0X80;//P2=00000000P27为高电平,P26为低电平

P0=0XFE;//P0=11111110

P2=0X40;

P0=0X7F;//dpgfedcba01111111

}

程序示例二:

/************************************************************************

数码管实验,需要将CON2引脚短接以便给数码管供电

P2.6控制573B,也即控制数码管的位选端的使能,具体位选为P0.0~P0.5:

WE1~WE6

P2.7控制573A的使能,也即数码管的段选端的使能,段选端具体对应关系如下:

P0.0~P0.7:

ABCDEFGH(DP)

************************************************************************/

#include

#include

sbitE_573B=P2^7;//P2^6控制数码管573B的使能位,P2^7控制数码管573A的使能位

sbitE_573A=P2^6;

sbitWE1=P0^0;

sbitWE2=P0^1;

sbitWE3=P0^2;

sbitWE4=P0^3;

sbitWE5=P0^4;

sbitWE6=P0^5;

voidmain()

{P2=0X10;//00010000,第三位为1主要是为了防止蜂鸣器响

P0=0XFF;

while

(1)

{

E_573B=1;//P2=00000000P27为高电平,P26为低电平

WE2=0;//如果需要其他数码管显示同样的字符,只需改此处为WE2等即可

E_573B=0;

E_573A=1;

P0=0XFf;//dpgfedcba01111111

}

}

提高篇

编程实现数码管与定时器结合显示时间。

#include

#defineucharunsignedchar

sbitHC573A=P2^6;//段控制锁存器的使能端

sbitHC573B=P2^7;//位控制锁存器的使能端

sbitWE1=P0^0;

sbitWE2=P0^1;

sbitWE3=P0^2;

sbitWE4=P0^3;

sbitWE5=P0^4;

sbitWE6=P0^5;

ucharString_Dot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xe7};

ucharString[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};

ucharcount;

ucharhour=22,minute=38,second=30;//设置时间初值,这里为11点56分57秒

voidSecond_Display(uchar);

voidMinute_Display(uchar);

voidHour_Display(uchar);

voidTime0_Init();

//定义延时函数

voidDelay(uchari)

{

ucharj,k;

for(j=i;j>0;j--)

for(k=10;k>0;k--);

}

//主函数

voidmain()

{

Time0_Init();

P2=0x10;//对P2口进行初始化

P0=0xFF;//对P0口进行初始化

while

(1)

{

if(count==20)//满50ms*20=1s,second++

{

second++;

count=0;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

hour++;

minute=0;

if(hour==24)

{

hour=0;

}

}

}

}

Second_Display(second);

Minute_Display(minute);

Hour_Display(hour);

}

}

//用数码管5和6显示秒的函数

voidSecond_Display(ucharsecond)

{

//个位数据送P0口

HC573A=1;

P0=String[second%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE6=0;

HC573B=0;

Delay(10);

//十位数据送P0口

HC573A=1;

P0=String[second/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE5=0;

HC573B=0;

Delay(10);

}

//用数码管3和4显示分的函数

voidMinute_Display(ucharminute)

{

//个位数据送P0口

HC573A=1;

P0=String_Dot[minute%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE4=0;

HC573B=0;

Delay(10);

//十位数据送P0口

HC573A=1;

P0=String[minute/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE3=0;

HC573B=0;

Delay(10);

}

//用数码管1和2显示小时的函数

voidHour_Display(ucharhour)

{

//个位数据送P0口

HC573A=1;

P0=String_Dot[hour%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE2=0;

HC573B=0;

Delay(10);

//十位数据送P0口

HC573A=1;

P0=String[hour/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE1=0;

HC573B=0;

Delay(10);

}

//初始化定时器0

voidTime0_Init()

{

TMOD=0X01;

TH0=0X3C;

TL0=0XB0;

ET0=1;

EA=1;

TF0=0;

TR0=1;

}

//定时器中断函数,每次中断计时50ms

voidTime0()interrupt1//50ms

{

TH0=0X3C;

TL0=0XB0;

count++;

}

三、按键调节时间

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitHC573A=P2^6;//段控制锁存器的使能端

sbitHC573B=P2^7;//位控制锁存器的使能端

sbitWE1=P0^0;

sbitWE2=P0^1;

sbitWE3=P0^2;

sbitWE4=P0^3;

sbitWE5=P0^4;

sbitWE6=P0^5;

sbitKEY1=P3^2;//KEY1用于设定小时

sbitKEY2=P3^3;//KEY2用于设定分钟

sbitKEY3=P3^4;//KEY3用于设定秒

ucharString_Dot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

ucharString[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcount;

ucharhour=8,minute=15,second=50;//设置时间初值,这里为11点56分57秒

voidSecond_Display(uchar);

voidMinute_Display(uchar);

voidHour_Display(uchar);

voidTime0_Init();

//定义延时函数

voidDelay2us(uinti)

{

while(--i);

}

//主函数

voidmain()

{

Time0_Init();

P2=0x10;//对P2口进行初始化

P0=0xFF;//对P0口进行初始化

KEY1=1;

KEY2=1;

KEY3=1;

while

(1)

{

if(!

KEY1)

{

Delay2us(5000);

if(!

KEY1)//单片机上电后所有IO口都为高电平,由于按键另一端接地,故按下按键对应引脚肯定为低电平

{

hour++;

if(hour==24)

{

hour=0;

}

}

while(KEY1==0);

}

if(!

KEY2)

{

Delay2us(5000);

if(!

KEY2)

{

minute++;

if(minute==60)

{

minute=0;

}

}

while(KEY2==0);

}

if(!

KEY3)

{

Delay2us(5000);

if(!

KEY3)

{

second++;

if(second==60)

{

second=0;

}

}

while(KEY3==0);

}

if(count==20)//满50ms*20=1s,second++

{

second++;

count=0;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

hour++;

minute=0;

if(hour==24)

{

hour=0;

}

}

}

}

Second_Display(second);

Minute_Display(minute);

Hour_Display(hour);

}

}

//用数码管5和6显示秒的函数

voidSecond_Display(ucharsecond)

{

//个位数据送P0口

HC573A=1;

P0=String[second%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE6=0;

HC573B=0;

Delay2us(80);

//十位数据送P0口

HC573A=1;

P0=String[second/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE5=0;

HC573B=0;

Delay2us(80);

}

//用数码管3和4显示分的函数

voidMinute_Display(ucharminute)

{

//个位数据送P0口

HC573A=1;

P0=String_Dot[minute%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE4=0;

HC573B=0;

Delay2us(80);

//十位数据送P0口

HC573A=1;

P0=String[minute/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE3=0;

HC573B=0;

Delay2us(80);

}

//用数码管1和2显示小时的函数

voidHour_Display(ucharhour)

{

//个位数据送P0口

HC573A=1;

P0=String_Dot[hour%10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE2=0;

HC573B=0;

Delay2us(80);

//十位数据送P0口

HC573A=1;

P0=String[hour/10];//秒的个位,送第六个数码管显示

HC573A=0;

P0=0XFF;

//打开位使能端

HC573B=1;

WE1=0;

HC573B=0;

Delay2us(80);

}

//初始化定时器0

voidTime0_Init()

{

TMOD=0X01;

TH0=0X3C;

TL0=0XB0;

ET0=1;

EA=1;

TF0=0;

TR0=1;

}

//定时器中断函数,每次中断计时50ms

voidTime0()interrupt1//50ms

{

TH0=0X3C;

TL0=0XB0;

count++;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2