慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
手把手教你学 51 单片机 C 语言教程 第 13 课
(1 位数码管与多位数码管显示)
3.1 学习目标
认识数码管是什么东西?用 HJ-1G 点亮第一个数码管,认识一个新的芯片 HJ573
集成电路的应用。
3.2 硬件电路
3.3 原理图
3.3.1 单个数码管原理图
如果需要显示“3”字符,则“E” “F” “DP”段都不显示,其
他段点亮
可以根据上图算出需要的 8位段码值:
共阴 16 进制:0x4F
共阳 16 进制:0xB0
本开发板使用共阴数码管
慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
3.3.2 开发板数码管模块原理图
3.4 源码编写
开始写程序之前认识一下锁存器(74HC573):顾名思义,就是把输入端的数
据锁存(或送)到输出端,请看下图中的 U3 元件,第 11 角(锁存端)为高电
平的时候,右边 D0-D7 的输入与左边 Q0-Q7 的输出是直通的,就是说,输入端
是什么电平,输出端就是什么电平,可以把它当作不存在。当第 11 角为低电平
的时候,左右两端就被断开了,无论输入端怎么变化,输出端都不会变化,当第
11 角由低电平变为高电平的一瞬间,输入端的数据立刻被传送到输出端,并且
在 11 角保持为高电平期间,输出端数据始终与输入端数据相同,如果此时我们
再次把第 11 角设置为低电平,那么以后当输入端无论再怎么变化,输出端都不
会变化而是保持刚才第 11 角在下降沿(由高电平到低电平跳变)之间时输入端
的值,这样就达到了锁存数据的目的,这也就是所谓的总线设计思路,一个 8 位
的数据线加一个锁存器后就可以扩接多个元件,当选通哪个元件的片选信号,就
送数据给那个元件。先说这个元件,以后用到别的元件我们再解释。
74HC573 11 脚接高电平,锁存不起作用,相当于直通。相应的段赋值“1”有
效。74HC138 A、B、C 赋值 0~7,则输出端分别是 Y0~Y7 置 “0”,如 P2=0,
则 Y0=0;P2=6;则 Y6=0;即选通第七个数码管。
程序如下
/*-----------------------------------------------
整理:慧净电子
编写:HJMCU
慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
日期:2008.8
修改:无
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
:数码管使用动态扫描显示,所以可以同时看到数码管同时显示数字或者
字符,扫描原理可以参
#include
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main(void) //每一个 C语言程序有且只有一个主函数,
{
while(1) //循环条件永远为真,以下程序一直执行下去。
{
dula=1;
P0=0x5b; //显示一个 2
dula=0;
wela=1;
P0=0xfe; //显示一位数码管?可以自己修改显示位数
wela=0;
delay(1);
}
}
考说明书或者视频教程。
源码编写
多个数码管同时显示
上一节讲述单个数码管显示,实际使用中单个数码管往往不能满足要求,这就需
要多个数码管组合使用,单个数码管一般用静态显示,占用 IO 口线较多,如果
使用普通的静态显示,单片机的 IO 口是不够用的。所以就需要使用动态扫描。
我们已经可以通过程序让任意一位数码管显示任意一种字符,这样我们可以以时
间为轴,循环显示每个数码管需要的数值,当循环显示的时间比较小时,眼睛就
不能分辨出闪烁,而是看到一个静态的数值显示,可以通过下载“数码管动态扫
描”和“数码管动态扫描演示”,可以深入了解这个原理,以后学习的使用数码
管显示的部分都是基于这个原理的。
详细程序请参“动态数码管扫描”和“动态数码管扫描演示”
慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
/********************************************************************
******************************
*** 慧净电子 1天入门、10 天学会、1年精通单片机与 C语言视频教程配套程序
源码 ***
*** 实 验 目 的 : HJ-1G HJ-3G 开 发 板
***
*** MCU: STC89C52/AT89C52 部分 C源码可以直接用于项目开发、欢迎复制共
享、功德无量、没有版权 ***
*** 作 者 : 慧 净 助 学 会 员
***
*** 编 译 器 : KEIL
***
*** 百 度交 流空 间: http://hi.baidu.com/HJMCU WWW.HJMCU.COM
***
*** 论坛交流:http://bbs.hjmcu.com 欢迎来论坛一分钱不要下载配套的仿
真电路 ***
*** 配 套 的 硬 件 学 习 板 网 址 : http://shop37031453.taobao.com/
***
*** 日 期 : 2008.8.8
***
*** 目标:用 C语言写程序就这么简单、慧争祝你 1天入门、10 天学会、1年精
通单片机与 C语言、找个好工作 ***
*********************************************************************
******************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,numdu,numwe;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//void delay(uint z);
void main()
{
numdu=0;
numwe=0;
aa=0;
慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
//delay(1000);
// temp=_crol_(temp,1);
// P1=temp;
if(aa==1)
{
aa=0;
numdu++;
if(numdu==7)
numdu=1;
dula=1;
P0=table[numdu];
dula=0;
wela=1;
P0=tablewe[numwe];
wela=0;
numwe++;
if(numwe==6)
numwe=0;
}
}
}
/*
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
aa++;
}
慧净电子----做人人都买得起的 51515151单片机开发板------------真诚为你服务,基于 HJ-1GHJ-1GHJ-1GHJ-1G开发板
慧净电子网:WWW.HLMCU.COM 慧净小店:http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/http://shop37031453.taobao.com/
3.5
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
数码管是最常用的显示输出模块,可以显示温度,时间,步进电机转速等,
数码管里面简单一点说是集成了 8个发光管,由点变成线,由 7条线 1个点组成
1个数码管,发光管我们会写程序控制它了,这个数码管一定难不到我们,原理
方法是一样的,这次不是单片机 IO 口直接驱动的,是加了 573 还有 138 共同来
控制数码管的点亮,主要是为了节省单片机 IO 口,一口多用,一个 8位 IO 口实
现多功能控制。
版权声明:(部分资料图片来源网络)
1、本教程为慧净电子会员整理作品,欢迎网上下载、转载、传播、免费共享给
各位单片机爱好者!
2、该教程可能会存在错误或不当之处,欢迎朋友们指正。
3、未经协商便做出不负责任的恶意评价(中评,差评),视为自动放弃一切售后服
务的权利!
4、我们的产品收入一部分是赠送给慈善机构的,以免影响到你的善心.大家好,
才是真的好(双方好评)。
下面是有缘人看的,谢谢理解
善有善报,恶有恶报,不是不报,时候未到。
从古至今,阴司放过谁,大家得多行善。
行善积德,爱护动物,哪怕小蚂蚁也是生命。
可改变命运,可心想事成,有利保佑子孙后代更昌盛。
学习弟子规,教我们如何做人,看和谐拯救危机,教我们看宇宙。
看为什么不能吃它们,教我们慈悲心,看因果轮回纪录,教我们懂得因果报应。
切勿造恶,种瓜得瓜种豆得豆,一切都有过程,待成熟之时,福德或果报自来找
你。
慧净
2008 年 8 月 8 日