第一篇:数码管简介
(注:此文档内容均复制:数码管_百科名片,仅供下载方便。)
数码管
百科名片
数码管是一种半导体发光器件,其基本单元是发光二极管。
一 产品分类 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
二 驱动方式 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
1)静态显示驱动的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
2)动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
三 主要参数
1)8字高度
8字上沿与下沿的距离。比外型高度小。通常用英寸来表示。范围一般为0.25-20英寸。
2)长*宽*高
长——数码管正放时,水平方向的长度;宽——数码管正放时,垂直方向上的长度;高——数码管的厚度。
3)时钟点
四位数码管中,第二位8与第三位8字中间的二个点。一般用于显示时钟中的秒。数码管使用的电流与电压
4)电流
静态时,推荐使用10-15mA;动态时,16/14-5mA值电流50-60mA。
5)电压
1.9V乘以每段的芯片串联的个数;当绿色/蓝色时,使用3.1V乘以每段的芯片串联的个数。
四 数码管应用
通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数。
由于它的价格便宜 使用简单特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。
五 常见问题
恒流驱动与非恒流驱动对数码管的影响
1)显示效果
并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电流,且不能受温度及其它因素的影响。另外,当温度变化时驱动芯片还要能够自动调节输出电流 的大小以实现色差平衡温度补偿。
2)安全性
即使是短时间的电流过载也可能对发光管造成永久性的损坏,采用恒流驱动电路后可防止 由于电流故障所引起的数码管的大面积损坏。
峰电压对发光二极管的损害。
超大规模集成电路还具有热保护功能,当任何一片的温度超过一定值时可自动关断,并且可在控制室内看到故障显示。
3)为什么数码管亮度不均匀?
关于亮度一致性的问题是一个行业内的常见问题。
有二个大的因素影响到亮度一致性。
一是使用原材料芯片的选取,一是使用数码管时采取的控制方式。
原材料--芯片的VFVF和亮度和波长已在一个很小的范围了,生产出来的产品还是在一个范围内,结果就是亮度不一致。
要保证数码管亮度一样,在控制方式选取上也有差别。最好的办法是恒流控制,流过每一个发光二极管的电流都是相同的,这样发光二极管看起来亮度就是一样的了。如恒压控制,则导致VF不相同的发光二极管分到的电流不相同,所以亮度也不同。
当然以上二个条件是相辅相成的。
4)怎样测量数码管引脚,分共阴和共阳?
3到5伏)和1个1K(几百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的,找到一个就够了,然后GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极。
5)LED全彩数码管的效果控制系统
a 防水LED、电路板都是裸露的,由于昼夜温差大,外罩的端头与外罩热胀冷缩不同,导致热熔胶或硅胶密封处出现缝隙,下雨后雨水渗进内部,造成电路短路而烧毁LED。要解决这个问题,一定要求对内部电路和LED进行灌胶处理。接头单用热熔胶或硅胶密封固然简单,但可靠性达不到在户外应用的要求。
b LED护栏管由于要求混光防雨,外面都会有外罩,外罩的材料选择是很多不规范公司降低成本的又一个手段,质量好的产品都会使用增加了抗紫外线的材料。如GE、拜尔等材料,而质量不好的LED护栏管很多使用混合了水口料的材料,谈不上抗紫外线,太阳光比较大的地方,不到一个月,外罩就变成黄色的了,从而出光效果变差,透光率也大大减小。
c 线损有色金属涨价很多,采用劣质材料和减小线径是一些厂家节省成本的方法,一般好的生产厂家都会在内部使用1mm以上的导线,而且导线材料使用的是符合国标的产品。如果导线面积不够或材料的杂质太多,电阻值就较大,前面的护栏管和后面的护栏管就有较大的电压差,为了让后面的LED也能正常工作,就需要增加输入电压,这样无形中就增加了功耗,很多电能不是用于驱动驱动LED,而是浪费在导线和恒流芯片上。现在通用的恒流芯片都有功耗要求,电压高功耗就大,如果功耗太大,热量散不出去就会导致芯片烧毁。这就是为什么很多LED护栏管都是前面损坏得多的原因了。
d 散热一般LED护栏管外罩和低座完全是一体的,都是塑胶材料。当LED排布很密时,在通电热平衡后,LED的结温已经很高了,就将造成LED的寿命急剧减少。实力强的LED护栏管公司肯定会有热设计人员,在设计护栏管外罩时就会想法把LED的热量和恒流芯片的热量有效的传导到大气中去。底座使用铝材是比较好的方法。另外在设计时要尽量将PCB靠近铝底座。
e 供电护栏管的供电有两种方式:220V的高压和48V以下的低压。220V直接供电是一种危险而又不经济的方式,低压的做法是用电容或电阻降压后供给。这种方式首先是安全性就存在很大的问题;其次是太耗电并对电网有极大的损害,供电部门是坚决反对的。由于突然在线路上加接了大量的容性负载,使供电线路失配形成了自激震荡,就可能出大事故。
第二篇:数码管简介
(注:此文档内容均复制:数码管_百科名片,仅供下载方便。)
数码管
百科名片
数码管是一种半导体发光器件,其基本单元是发光二极管。
一 产品分类
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
二 驱动方式
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
1)静态显示驱动
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
2)动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
三 主要参数
1)8字高度
8字上沿与下沿的距离。比外型高度小。通常用英寸来表示。范围一般为0.25-20英寸。
2)长*宽*高
长——数码管正放时,水平方向的长度;宽——数码管正放时,垂直方向上的长度;高——数码管的厚度。
3)时钟点
四位数码管中,第二位8与第三位8字中间的二个点。一般用于显示时钟中的秒。数码管使用的电流与电压
4)电流
静态时,推荐使用10-15mA;动态时,16/1动态扫描时,平均为4-5mA,值电流50-60mA。
5)电压
查引脚排布图,看一下每段的数量是多少?当红色与黄绿色时,使用1.9V乘以每段的芯片串联的个数;当绿色/蓝色时,使用3.1V乘以每段的芯片串联的个数。
四 数码管应用
数码管是一类 通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数。
由于它的价格便宜 使用简单 在 特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。
五 常见问题
恒流驱动与非恒流驱动对数码管的影响
1)显示效果
由于发光二极管基本上属于电流敏感,其正向压降的分散性很大,并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电流,且不能受温度及其它因素的影响。另外,当温度变化时驱动芯片还要能够自动调节输出电流 的大小以实现色差平衡温度补偿。
2)安全性
即使是短时间的电流过载也可能对发光管造成永久性的损坏,采用恒流驱动电路后可防止 由于电流故障所引起的数码管的大面积损坏。
另外,我们所采用的还具有级联延时开关特性,可防止反向尖峰电压对发光二极管的损害。
超大规模集成电路还具有热保护功能,当任何一片的温度超过一定值时可自动关断,并且可在控制室内看到故障显示。
3)为什么数码管亮度不均匀?
关于亮度一致性的问题是一个行业内的常见问题。
有二个大的因素影响到亮度一致性。
一是使用原材料芯片的选取,一是使用数码管时采取的控制方式。
原材料--芯片的VF和亮度和是一个正态分布,即使筛选过芯片,VF和亮度和波长已在一个很小的范围了,生产出来的产品还是在一个范围内,结果就是亮度不一致。
要保证数码管亮度一样,在控制方式选取上也有差别。最好的办法是恒流控制,流过每一个发光二极管的电流都是相同的,这样发光二极管看起来亮度就是一样的了。如恒压控制,则导致VF不相同的发光二极管分到的电流不相同,所以亮度也不同。
当然以上二个条件是相辅相成的。
4)怎样测量数码管引脚,分共阴和共阳?
找公共共阴和公共共阳:首先,我们找个(3到5伏)和1个1K(几百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的,找到一个就够了,然后GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极。
5)LED全彩数码管的效果控制系统
a 防水一般是在外罩接口处用热熔胶或硅胶密封,内部LED、电路板都是裸露的,由于昼夜温差大,外罩的端头与外罩热胀冷缩不同,导致热熔胶或硅胶密封处出现缝隙,下雨后雨水渗进内部,造成电路短路而烧毁LED。要解决这个问题,一定要求对内部电路和LED进行灌胶处理。接头单用热熔胶或硅胶密封固然简单,但可靠性达不到在户外应用的要求。
b 防LED护栏管由于要求混光防雨,外面都会有外罩,外罩的材料选择是很多不规范公司降低成本的又一个手段,质量好的产品都会使用增加了抗紫外线的材料。如GE、拜尔等材料,而质量不好的LED护栏管很多使用混合了水口料的材料,谈不上抗紫外线,太阳光比较大的地方,不到一个月,外罩就变成黄色的了,从而出光效果变差,透光率也大大减小。
c 线损有色金属涨价很多,采用劣质材料和减小线径是一些厂家节省成本的方法,一般好的生产厂家都会在内部使用1mm以上的导线,而且导线材料使用的是符合国标的产品。如果导线面积不够或材料的杂质太多,电阻值就较大,前面的护栏管和后面的护栏管就有较大的电压差,为了让后面的LED也能正常工作,就需要增加输入电压,这样无形中就增加了功耗,很多电能不是用于驱动驱动LED,而是浪费在导线和恒流芯片上。现在通用的恒流芯片都有功耗要求,电压高功耗就大,如果功耗太大,热量散不出去就会导致芯片烧毁。这就是为什么很多LED护栏管都是前面损坏得多的原因了。
d 散热一般LED护栏管外罩和低座完全是一体的,都是塑胶材料。当LED排布很密时,在通电热平衡后,LED的结温已经很高了,就将造成LED的寿命急剧减少。实力强的LED护栏管公司肯定会有热设计人员,在设计护栏管外罩时就会想法把LED的热量和恒流芯片的热量有效的传导到大气中去。底座使用铝材是比较好的方法。另外在设计时要尽量将PCB靠近铝底座。
e 供电护栏管的供电有两种方式:220V的高压和48V以下的低压。220V直接供电是一种危险而又不经济的方式,低压的做法是用电容或电阻降压后供给。这种方式首先是安全性就存在很大的问题;其次是太耗电并对电网有极大的损害,供电部门是坚决反对的。由于突然在线路上加接了大量的容性负载,使供电线路失配形成了自激震荡,就可能出大事故。
第三篇:LED数码管介绍范文
供应LED数码管
LED-3006 LED数码管
灯体尺寸:L1000*W50*H95MM mm
净重: 1.0 Kg
分类: LED数码管系列LED
LED 光源:48红/48绿/48蓝(1000mm long)
高度智能化产品,特别适应高楼大厦外墙及高级娱乐场所使用,效果可实时设定。
专为大厦、酒店、桥梁轮廓装饰而设计的最具灯光效果的灯具,以超高亮LED为光源,PC管材,防紫外线、抗老化、防水、防潮。色彩艳丽,具有流水扫描等千变万化效果,同时也可根据用户实际需求进行效果设计。
型号与技术参数:
灯体尺寸:L1000*W50*H95MM mm
净重: 1.0 Kg
LED 光源:48红/48绿/48蓝(1000mm long)
材料: 乳白色聚碳酸酯(抗紫外线)
控制模式:DMX 512
电压: AC 90-240V/50-60HZ(开关电源, 90V-240V 自动转换)
操作温度::-20℃ ~ +45℃
Net/Gross Weight:1.0kg/1.5kg
Size: L 1000*W50 *H 95MM
IP:44
型号: LED 3006C LED数码管控制器
带DMX 512通信功能
自动走灯模式25种
有单独可调走灯模式29种
最少可以控制4000跟LED数码管
自动存储模式参数
预置参数设置模式
全彩六段护栏管,采取进口PC 材料,可以根据客户要求设计各种LED程序变化,以实现美化效果,产品广泛应用于户可以根据客户要求设计各种LED程序变化,以实现美化效果外工程、城市景观、娱乐场所。是采用进口台湾超高亮度LED芯片及进口PC管材,其基本特性是以RGB三基色及PCB电路板串(并)联混合连接,内置微处理器,执行主机传送的各种程序命令,能使众多光源组合时产生色彩和动态上的变化,有纵向分层追逐扫描、流水、扩张、渐变、同步等几十种变化程序,灯光效果有单色(红,黄,蓝,绿,白)、三色变化、七色变化、三段变化、六段变化、九段变化、十二段变化等循环切换,除了推荐的几十种变化程序外,还可以根据客户的要求随机进行变幻花样的设计,七彩流水型护拦灯是通过新型的电
脑编程控制,使其变化多达几十种,还可以根据客户需求而设定或自动变化。每米功率不超过12W,电压12V,PC管材直径可以为26mm,30mm,50mm,80mm,110mm, 灯泡粒数可以为96粒、108粒、120粒、144粒,150粒,亮度高、寿命长达100000小时。广泛适用于桥梁、广场、大楼轮廓、跨街空中走廊、建筑物轮廓、道路灯饰、各种灯光广告牌、橱窗、舞台、大厦、酒店等场所装饰,是城市亮化工程的主导产品,夜晚效果格外醒目,并能引导车辆行进方向,可有效的防治交通事故的发生,并且对美化城市、塑造景观有着特别重要的意义
LED护栏管——介绍:
以RGB三基色及PCB电路板串(并)联混合连接,内置微处理器,执行主机传送的各种程序命令,能使众多光源组合时产生色彩和动态上的变化,有纵向分层追逐扫描、流水、扩张、渐变、同步等几十种变化程序,灯光效果有单色、三色变化、七色变化、三段变化、六段变化、八段变化、十二段、十六段变化等循环切换,除了推荐的几十种变化程序外,还可以根据客户的要求随机进行变幻花样的设计,七彩流水型护拦灯是通过新型的电脑编程控制,使其变化多达几十种,还可以根据客户需求而设定或自动变化。
LED护栏管——用途:
主要应用于桥梁栏杆,楼体轮廓,招牌,酒吧KTV等场所。广泛应用于舞台、酒吧、酒店、的士高、KTV歌舞厅、桥梁、花园、沟道河岸、各交通立交桥、建筑物轮廓、建筑物的装饰及轮廓勾勒。是取代传统霓虹灯和荧光灯的新一代照明解决案。
LED护栏管——技术参数:
光源:采用进口台湾超高亮度LED芯片
材质:进口PC管材
功率:每米功率不超过12W
电压:12V
PC管材直径:50mm,80mm,110mm
灯泡粒数:108粒、120粒、144粒,150粒
工作寿命:长达100000小时。
LED护栏管——其它说明:
包装方式:每件LED护栏管都是独立环保包装
品质保证:本产品严格按照ISO9001:2000国际质量管理体系标准进质量 控制,确保LED护栏管质量符合国家标准,完全达到设计要求。
2.LED护栏管需要解决的可靠性问题
2.1防水
以前的LED护栏管是在外罩接口处用硅胶密封,内部LED、电路都是裸露的,由于昼夜温差大,外罩的端头与外罩热胀冷缩不同,导致硅胶密封处出现缝隙,下雨后雨水渗进内部,可想而知结果会怎么样。要解决这个问题,一定要求对内部电路和LED灌胶处理,外面外罩硅胶密封固然简单,但可靠性达不到在户外大规模应用的要求。
另一个问题就是电气连接的接头问题。很多厂家为了便宜往往选择塑胶接头,或者选择质量较差的金属接头,短时间的测试和使用,塑胶还没有变形,防水是没有问题,但是经过太阳的照射和昼夜温差变化,四季气候变化,塑胶就会变形,从而导致防水胶圈失效,雨水渗进接头内部导致电线短路,特别在带电状态,电线的腐蚀比不带电状态下高若干个数量级。本人曾经做的实验,信号线接触水后在8个小时通电状态下就已经腐蚀的象铁锈一样。较差的金属接头的价格只有正规厂家的几分之一,由于表面处理和本身材料问题,也容易被雨水腐蚀,导致信号短路。
2.2防紫外线
LED护栏管由于要求混光,在外面都会加上外罩,外罩的材料选择是很多不规范公司降低成本的又一个手段,质量好的产品都会使用增加了抗紫外线的材料,如GE,拜尔等材料,而质量不好的LED护栏管很多使用混合了水口料的材料,谈不上抗紫外线,太阳光比较大的地方,不到一个月,外罩就变成$的了,从而出光效果变差,透光率也大大减小。
2.3防开裂
这个问题,还是外罩的问题,如果选择的是带水口料的材料,材料内应力很难去除,导致材料开裂。即使选择比较好的材料,如果设计,生产工艺不合理,也会产生很多内应力,有经验的公司都会在注塑时选择恒温保护,尽量减少内应力,还有一个去除内应力很好的办法,如果对此有兴趣的读者可以咨询材料方面的专家。
2.4线损
铜是一些厂家节省成本的地方,大家都知道,一般好的生产厂家都会在内部使用1mm2以上的导线,而且导线使用的是符合国标的产品。如果导线面积不够,电阻较大,前面的护栏管和后面的护栏管就有较大的电压差,为了让后面的LED电流与前面的一致,一定需要增加输入电压,这样无形中就增加了功耗,很多电能不是驱动LED,而是浪费在导线和恒流芯片上。一般来说如果设计的产品前后电压超过15%,问题就很严重了,因为现在通用的恒流芯片都是有功耗要求的,如果功耗太大,热量散不出去就会导致芯片烧毁。大家现在应该明白为什么很多级连的LED护栏管都是前面坏的多了。
2.5散热
这个问题不仅体现的成本问题上,更多的是体现一个厂家的技术实力上,现在有些LED护栏管外罩和低座完全是一体的,都是塑胶材料,而且LED排布很密,这样当达到热平衡时,LED的结温已经很高了,如果工作时的环境温度较高,LED的寿命会急剧减少。实力强的LED护栏管公司肯定会有热设计人员,在设计护栏管时要将LED的热量和恒流芯片的热量有效的导到大气中去。大家应该想到使用铝材是比较好的解决方案,铝的导热系数高,可以有效的将内部热量导出。另外在设计时也要尽量将PCB靠近铝底座,从而减少灌封胶部分产生的热阻。这个问题又涉及到另一个问题,即灌封胶的选择上,好的灌封胶不仅要求硬度适中,也要求有比较高的导热系数,目前很多护栏管厂家借鉴LED大屏的经验,使用韩国的灌封胶,这是个不错的选择,本人综合的比较后发现某家德国公司的灌封胶在综合性能上更胜一筹。
一、LED外控和内控护栏管安装方法及常见问题
主要材料:
LED护栏灯;护栏灯安装卡子,防水变压器,LED护栏灯主控器,LED护栏灯分控器,辅助材料:
公母插头,超五类网线,两芯电源线,自攻螺丝,胶粒等
LED外控护栏灯安装步骤:
第一步:先将LED护栏灯安装到墙体上:在墙体上打孔,装膨胀螺钉,再装LED护栏灯,用自攻螺丝锁住;护栏灯之间的距离根据客户的要求而定;一般是1CM到3CM之间。
第二步:检查接头上是否有防水胶圈,一般为白色或红色硅胶圈.然后将LED护栏灯的信号线、电源线对接起来,一定要对接紧密,然后把螺母扭紧.(最好外面再打上玻璃胶或黑色胶布绕一下,这样对防水更有好处.)不要因为马虎或难扭紧而没有扭紧,造成进水,给后来维护带来不少麻烦.信号线公司采用的一般两芯的小公母插头;电源线是两芯的大公母插;
第三步:安装电源(变压器或开关电源);
根据变压器的功率以及护栏灯的功率来计算每台变压器可以带多少条护栏灯;比如108灯的LED七彩护栏灯是10W/M;144灯的LED护栏灯是12W/M;若用400W的防水变压器,则可以带108灯36M管;144灯的则带32 M管。若变压器可以带36M管;变压器则放在第18和19条中间,接两条线出来,再接几个分接口,每边各带18条。
注:1.变压器一般只用到80%到90%的功率;
2.不管变压器的功率再大,每边接的管最好不要超过8M;高压220V的连接最好不要超过10米;因为电源导线有功率损耗;越到后面的LED护栏灯亮度越低;而且电流过大对线路板,灯珠,线头都会有影响。
第四步:LED护栏灯控制器的安装;
先装分控器,直接将分控器接在LED护栏灯上;分控器两端一般有三个出线头,一端一条的一般是电源线接24V或12V,注意这个电源线只是分控器的供电,护栏管的供电要另外联接,另外一端两条接线头一条是从主控器输入的信号线,一条是接护栏管的输出的信号线,分控器上会标出哪条接主控哪条接分控!
信号接信号(目前公司主要采用两芯公母插小头),电源接电源(两芯公母插大头);然后将分控器与主控器的信号对接,如果分控与主控的距离将远时可以用超五类网线连接起来,这样信号比较好;每个分控只能带固定数量的LED数码管,一般可以带到100M;现在公司用的两芯数码管数据线,可控制1000米,也可订做到2000米,信号强.易安装.做楼体轮廓时,每一个分控带一路;具体的情况根据LED效果图安装(公司会帮您算好要多少分控,每个分控带哪一路,一般会有安装图纸)。分控与主控之间亦采用超五线网线连接;网线都是八条线的,采用公母信号插与网线对接起来,先接到分控上;不同回路的数码管之间的信号线需要断开。
第五步:通电,通信号。
将变压器全部接到一条220V主电源上,然后采用一个空气开关和时间开关;控制LED数码管(LED护栏灯)统一通电;然后将主控器上的变压器插头插在220V的电源上。
LED内控,单色常亮护栏管的安装:
单色护栏管直接按护栏管的电压接电就行了,内控护栏灯的安装,直接接在对应的电源上就行了;这里还要提到就是内控编号LED护栏灯的安装:内控编号护栏灯的安装必须按管的顺序一个一个安装;如果不按顺序安装最后会出现整体不同步现像。内控和内控编号护栏管必须同时通电,才能保证变化效果同步!低压的必须接变压器或开关电源,变压器或开关电源装在护栏管的中间,这样护栏管的效果才会更统一!
二、常见问题:
1.若LED数码管不能正常走程序,如果为外控管,首先确认此管是否信号线有问题,请把不能运作的管换下,还有一个问题,这条管的可能信号线只有输入没有输出,导致后面的管变化效果不能同步,这种情况下可以把装在最后一条护栏管装在这里,把这条护栏管装在最后面那边,可以恢复正常!若恢复正常,就确认是此管问题,若不行可以换个分控试试,若无法解决安装中出现的问题请与厂家联系。如果为内控管,首先确定公母接头有没有接反,现在经过改良后的新管子和程序,一般公母接头的顺序,根据公司配的接头接就行了。然后把电断开几分钟,再送电,看是否正常。也可及时与公司联系,分析是什么问题。
2. LED护栏灯一般安装要的楼体上,安装成本比较高,具有一定的危险性;如果
有坏管了,需要吊人或架手脚架上去拆换;所以公司把品质放到第一位,请各位客户和朋友放心,公司出厂产品都是经过老化,检验合格才出厂的,若安装时仍有不良品,请及时给公司联系,我们会用最快的速度解决问题。
3.最后再提醒安装时,一定检查是否有防水胶圈,要把公母接头对紧,把螺母扭紧接好。工程主管要培训,监督做好。
第四篇:数码管万年历实习报告
河南机电高等专科学校
综合实训报告
系 部: 专 业: 班 级: 学生姓名: 学 号:
2013年 6月 28日
实训任务书
1.时间:2013年6月15日~2013年6月28日 2.实训单位:河南机电高等专科学校 3.实训目的:深入学习电子产品设计制作的全过程 4.实训任务:
①加深学习电路图绘制软件的相关常识及其特点; ②以51单片机为核心设计出一个LED万年历;
③万年历具有年份、月、日、时、分、秒、周、温度、整点报时等功能; ④自己独立完成设计电路图,生成PCB,转印、腐蚀电路板,焊接等硬件制作工作;
⑤会使用keil软件编写程序,并完成烧写过程; ⑥学会调试程序,敢于发现问题,解决问题; ⑦参考相关的的书籍、资料,认真完成实训报告。
综合实训报告
前言:
万年历是我们经常见到和使用的计时工具,使用方便,功能多。但自己做一个让人满意的万年历,就不一定有那么轻而易举了,本次实训的任务就是自己亲手做一个万年历。利用本学期学过的单片机知识,设计出具有显示年、月、日、时、分、秒、周、温度功能,同时有整点报时的功能的万年历。
一、实训器件
1.温度传感器DS18B20 采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。因此,本设计DS18B20温度传感器作为温度采集模块。
2.时钟芯片DS1302 采用DS1302时钟芯片实现时钟,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。具有主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。因此,本设计中采用DS1302提供时钟。
3.74LS154 74LS154 为 4 线-16 线译码器,其主要电特性的典型值如下:
当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。若将G1和G2中的一个作为数据输入端,由ABCD对输出寻址,54/74154 还可作4线-16线数据分配器。
引出端符号: A、B、C、D 译码地址输入端(低电平有效)G1、G2 选通端(低电平有效)0-15 输出端(低电平有效)可用此种芯片作为数码管的选址芯片。4.74HC573 74HC573是八进制3态非反转透明锁存器,是高性能硅门CMOS器件。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。输出能直接接到 CMOS,NMOS和 TTL接口上操作电压范围:2.0V~6.0V×低输入电流: 1.0uA。本实训采用此芯片作为数码管的驱动芯片。
5.数码管
本实训使用共阴极数码管作为显示器件,采用 LED 数码管动态扫描,LED 数 主电路PCB: 码管价格适中,对于显示数字也最合适。
综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89S51作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;74LS154作为选址芯片;74HC573作为数码管的驱动芯片;共阴极数码管显示数字;S8550驱动扬声器。
二、实训原理
为了使万年历在包装美化时简单化及布线的方便,我将万年历分为两部分,一部分是主体部分含有年份、月、日、时、分、秒,另一部分是小模块包含周、温度。
电路图如下:
主电路图:
***9485*********2930******203919343338***61635***33212*********6545516251724***1 周,温度电路图: 周,温度PCB:
***061
三、程序编写
使用Keil软件编写程序。程序包括主函数、时间显示函数、温度显示函数、时间调整函数、DS18B20模块、DS1302模块和周计算函数等。
程序的编写使我熟练的掌握了Keil软件的应用。具体程序见附录。
四、程序的烧写与调试
程序烧写需要用专用的烧写软件将Keil软件声生成的.hex文件写进单片机里。经过多次的程序的改写与调试,最终制作出比较满意的成品。
五、成品展示:
心得体会: 经过此次实训我学到了很多,刚开始以为做万年历很难,着手开始做这个产品没有一点头绪,经过上网查资料,产生了最初的制作框架,然后就开始找芯片,查芯片资料,设计电路图,又请同学帮忙指点,修改原理图。接着买元器件,做封装,生成PCB,制作电路板,焊接元器件,最后完成了整个硬件部分的制作。完成了硬件制作后,我又编了测试软件测试硬件是否有问题,发现数码管不亮,经过问题排查及资料查询,发现单片机P0口缺少了上拉电阻,接上后,解决了问题。
编程也是比较困难的,由于掌握的知识不够多,借鉴了别人的程序,并加入自己的想法,经过调试,程序编写成功。最终完成了产品的制作。在实习的过程中我得到了别人的帮助,同时也主动帮助别人,得到了很多经验,为以后学习提供了方便。实习就是学习的过程,本次实习是最成功的一次,也是学到最多的一次。参考文献:
《单片机C51程序设计教程与实验》 北京航空航天大学出版社 《单片机原理及应用(C51语言)》 清华大学出版社 《数字电子技术》 黄河水利出版社 《Protel DXP 2004电路设计与仿真教程》 北京航空航天大学出版社 附录: 程序
万年历.c #include
uchar mode,TH,TL,TN,seconds,minutes,hours,years,months,days,WEEK,n;
uchar count=0;sbit SET=P3^4;
sbit ADD=P3^5;//增加
sbit RED=P3^6;//减小
sbit CANL=P3^7;sbit le=P2^6;sbit oe=P2^7;sbit en=P1^4;
sbit beep=P2^4;
uchar GetWeekFromDay(uchar years,uchar months,uchar days);
void WriteSet1302(uchar cmd,uchar date);
uchar ReadSet1302(uchar cmd);
void ReadyreadDS18B20(void);
uchar ReadDS18B20(void);void IntDS1302(void);
void delay1ms(uint x){ uchar i,j;for(i=x;i>0;i--)for(j=124;j>0;j--);} void delaynus(uchar n)//延时若干微秒
{
while(n--);} void display_Year(year)//显示年
{
uchar i,j;i=year/10;j=year%10;P0=digit[2];P1=8;delay1ms(2);P0=digit[0];P1=9;delay1ms(2);P0=digit[i];P1=10;delay1ms(2);P0=digit[j];P1=11;delay1ms(1);} void display_Month(month)//显示月
{ uchar i,j;i=month/10;j=month%10;P0=digit[i];P1=6;delay1ms(2);P0=digit[j];P1=7;delay1ms(1);} void display_Day(day)//显示日
{ uchar i,j;i=day/10;j=day%10;P0=digit[i];P1=4;delay1ms(2);
P0=digit[j];P1=5;delay1ms(1);} void display_Hour(hour)//显示时
{ uchar i,j;
i=hour/10;j=hour%10;P0=digit[i];P1=2;delay1ms(2);P0=digit[j]+n*0x80;P1=3;delay1ms(1);}
void display_Minute(minute)//显示分
{ uchar i,j;i=minute/10;j=minute%10;P0=digit[i];P1=0;delay1ms(2);P0=digit[j];P1=1;delay1ms(1);} void display_Week(void)//显示周{ WEEK=GetWeekFromDay(years,months,days);
P1=12;switch(WEEK){
case 1:P0=digit[1];
delay1ms(2);
break;
case 2:P0=digit[2];
delay1ms(2);
break;
case 3:P0=digit[3];
delay1ms(2);
break;
case 4:P0=digit[4];
delay1ms(2);
break;
case 5:P0=digit[5];
delay1ms(2);
break;
case 6:P0=digit[6];
delay1ms(2);
break;
case 7:P0=digit[8];
delay1ms(2);
break;
} }
void display_Time(void)//显示实时时间
{ uchar value;value=ReadSet1302(0x83);minutes=(((value&0x70)>>4)*10+(value&0x0f));display_Minute(minutes);value=ReadSet1302(0x85);hours=(((value&0x70)>>4)*10+(value&0x0f));display_Hour(hours);value=ReadSet1302(0x87);days=(((value&0x70)>>4)*10+(value&0x0f));display_Day(days);value=ReadSet1302(0x89);months=(((value&0x70)>>4)*10+(value&0x0f));display_Month(months);value=ReadSet1302(0x8D);years=(((value&0xf0)>>4)*10+(value&0x0f));display_Year(years);display_Week();} /*****************时间调整部分*********************/
void hourset(void)//调时
{ uchar timevalue,hour;
delay1ms(500);//防止多次触发
WriteSet1302(0x8e,0x00);//将写保护去掉,确保能正常将调整后的数值写入DS1302
timevalue=ReadSet1302(0x85);//读取此时的数值
hour=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));while(1){
if(ADD==0)
{
delay1ms(20);
if(ADD==0)
{
hour++;
delay1ms(100);
while(ADD==0);
}
}
if(RED==0)
{
delay1ms(20);
if(RED==0)
{
hour--;
delay1ms(100);
if(hour==0)hour=23;
while(RED==0);
}
}
if(hour>=24)hour=0;
timevalue=(((hour)/10)<<4|(hour%10));
WriteSet1302(0x84,timevalue);
delay1ms(2);
display_Hour(hour);
delay1ms(10);
if(CANL==0)
{
mode=0;
break;
}
if(SET==0)break;} WriteSet1302(0x8e,0x80);} void minuteset(void)
//调分
{ uchar timevalue,minute;delay1ms(500);WriteSet1302(0x8e,0x00);timevalue=ReadSet1302(0x83);minute=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));while(1){
if(ADD==0)
{
delay1ms(20);
if(ADD==0)
{
minute++;
if(minute>=60)timevalue=0;
while(ADD==0);
}
}
if(RED==0)
{
delay1ms(10);
if(RED==0)
{
minute--;
if(minute==0)minute=59;
delay1ms(300);
while(RED==0);
}
}
if(minute>=60)minute=0;
timevalue=((minute/10)<<4|(minute%10));
WriteSet1302(0x82,timevalue);
delay1ms(2);
display_Minute(minute);
delay1ms(10);
if(CANL==0)
{
mode=0;
break;
}
if(SET==0)break;} WriteSet1302(0x8e,0x80);}
void yearset(void)
//调年
{ uchar datevalue,year;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x8d);year=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){
if(ADD==0)
{
delay1ms(20);
if(ADD==0)
{
year++;
while(ADD==0);
}
}
if(RED==0)
{
delay1ms(20);
if(RED==0)
{
year--;
delay1ms(100);
while(RED==0);
}
}
datevalue=((year/10)<<4|(year%10));
WriteSet1302(0x8c,datevalue);
delay1ms(5);
display_Year(year);
delay1ms(5);
if(CANL==0)
{
mode=0;
break;
}
if(SET==0)break;} WriteSet1302(0x8e,0x80);} void monthset(void)
//调月
{ uchar datevalue,month;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x89);month=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){
if(ADD==0)
{
delay1ms(20);
if(ADD==0)
{
month++;
if(month>12)month=1;
while(ADD==0);
}
}
if(RED==0)
{
delay1ms(20);
if(RED==0)
{
month--;
delay1ms(100);
if(month==0)month=12;
while(RED==0);
}
}
datevalue=((month/10)<<4|(month%10));
WriteSet1302(0x88,datevalue);
delay1ms(5);
display_Month(month);
delay1ms(5);
if(CANL==0)
{
mode=0;
break;
}
if(SET==0)break;} WriteSet1302(0x8e,0x80);} void dayset(void)
//调日
{ uchar datevalue,day;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x87);day=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){
if(ADD==0)
{
delay1ms(10);
if(ADD==0)
{
day++;
if(day>31)day=1;
while(ADD==0);
}
}
if(RED==0)
{
delay1ms(10);
if(RED==0)
{
if(day==0)day=31;
day--;
delay1ms(300);
while(RED==0);
}
}
datevalue=((day/10)<<4|(day%10));
WriteSet1302(0x86,datevalue);
delay1ms(5);
display_Day(day);
delay1ms(5);
if(CANL==0)
{
mode=0;
break;
}
if(SET==0)break;} WriteSet1302(0x8e,0x80);} void TimeSet(void)
//时间调整函数
{ if(SET==0){
delay1ms(20);
if(SET==0)
{ while(!SET);
mode++;
delay1ms(20);
switch(mode)
{
case 1:{yearset();delay1ms(20);}
break;
case 2:{monthset();delay1ms(20);} break;
case 3:{dayset();delay1ms(20);}
break;
case 4:{hourset();delay1ms(20);} break;
case 5:{minuteset();delay1ms(20);} break;
}
if(mode==5)mode=0;
} } } /***************显示温度模块********************/ uchar flag;/*********************显示温度整数部分*************************/ void Display_Integer(unsigned char x){
uchar s,g;s=x%100/10;g=x%10;P0=digit[s];P1=13;delay1ms(3);P0=digit[g]+0x80;P1=14;delay1ms(3);P0=digit[10];P1=15;delay1ms(1);}
void display_Temperature(void){
ReadyreadDS18B20();
TL=ReadDS18B20();
TH=ReadDS18B20();
if((TH&0XF8)!=0X00)
{
flag=1;
TL=~TL;
TH=~TH;
TL+=1;
if(TL>255)TH+=1;
TN=TH*16+TL/16;
}
TN=TH*16+TL/16;
Display_Integer(TN);} /**************** 设置模块 ******************/
void Set(void){ if(SET==0){
delay1ms(5);
if(SET==0)
{
delay1ms(50);
while(1)
{
TimeSet();
if(CANL==0)
{
break;
}
}
} } } void InitTimer0(void){
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0x0B0;
EA = 1;
ET0 = 1;
TR0 = 1;} /***************主函数**********************/
void main(){ int i;P0=0;InitTimer0();IntDS1302();
//初始化DS1302 delay1ms(5);le=1;oe=0;en=0;delay1ms(200);beep=1;while(1){
for(i=1000;i>0;i--)
{
Set();
display_Time();
Display_Integer(TN);
if(hours==7||hours==8||hours==9||hours==10||hours==11||hours==12
||hours==14||hours==15||hours==16||hours==17||hours==18||hours==19
||hours==20||hours==21||hours==22)
{
if(minutes==0x00)
{
uchar value,w,k;
value=ReadSet1302(0x81);
seconds=(((value&0x70)>>4)*10+(value&0x0f));
if(seconds>0&&seconds<2)
{
for(k=5;k>=0;k--)
{
for(w=100;w>0;w--)
{
beep=0;
delay1ms(3);
beep=1;
delay1ms(3);
}
delay1ms(1000);
}
}
else beep=1;
}
}
}
display_Temperature();
}
} void t0()interrupt 1 { TH0 = 0x3C;
TL0 = 0x0B0;count++;
if(count==10){n=0;
} if(count==20){ count=0;
n=1;
} } /*******DS1302模块*************/ sbit SCLK=P2^0;//DS1302时钟输入
sbit DATE=P2^1;//DS1302数据输入
sbit REST=P2^2;//DS1302复位端口
void Write1302(uchar date)//向1302写数据 {
uchar i;SCLK=0;delaynus(2);for(i=0;i<8;i++){
DATE=date&0x01;
SCLK=1;
delaynus(2);
SCLK=0;
delaynus(2);
date>>=1;} } void WriteSet1302(uchar cmd,uchar date)//根据相应的命令输入相应的数据
{
REST=0;
SCLK=0;
REST=1;
Write1302(cmd);
delaynus(5);
Write1302(date);
SCLK=1;
REST=0;} uchar Read1302(void)//读取1302数据
{
uchar i,date;delaynus(2);for(i=0;i<8;i++){
date>>=1;
if(DATE==1)
date|=0x80;
SCLK=1;
delaynus(2);
SCLK=0;
delaynus(2);} return date;
} uchar ReadSet1302(uchar cmd)//根据命令读取1302相应的值 { uchar date;REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1;REST=0;return date;} void IntDS1302(void)//DS1302初始化 {
uchar flag;
flag= ReadSet1302(0x81);if(flag&0x80)
//判断时钟芯片是否关闭
{
WriteSet1302(0x8E,0x00);
//根据写状态寄存器命令字,写入不保护指令
WriteSet1302(0x80,((0/10)<<4|(0%10)));
//根据写秒寄存器命令字,写入秒的初始值
WriteSet1302(0x82,((0/10)<<4|(0%10)));
//根据写分寄存器命令字,写入分的初始值
WriteSet1302(0x84,((0/10)<<4|(0%10)));//根据写小时寄存器命令字,写入小时的初始值
WriteSet1302(0x86,((0/10)<<4|(0%10)));//根据写日寄存器命令字,写入日的初始值
WriteSet1302(0x88,((0/10)<<4|(0%10)));//根据写月寄存器命令字,写入月的初始值
WriteSet1302(0x8c,((10/10)<<4|(10%10)));//根据写年寄存器命令字,写入年的初始值
WriteSet1302(0x90,0xa5);
//打开充电功能 选择2K电阻充电方式
WriteSet1302(0x8E,0x80);
//根据写状态寄存器命令字,写入保护指令
} } /**********************操作DS18B20模块***************************/ sbit DQ=P2^3;
uchar time;void delayms(uchar x){ uchar i,j;for(i=x;i>0;i--)for(j=124;j>0;j--);} /**********************DS18B20初始化****************************/ bit IntDS18B20(void){ bit temp;DQ=1;for(time=0;time<2;time++);DQ=0;for(time=0;time<200;time++);DQ=1;for(time=0;time<10;time++);temp=DQ;for(time=0;time<200;time++);return temp;} /**************************读DS18B20**********************/ uchar ReadDS18B20(void){ uchar dat,i;for(i=0;i<8;i++){
DQ=1;
_nop_();
DQ=0;
_nop_();
DQ=1;
for(time=0;time<2;time++);
dat>>=1;
if(DQ==1)
dat=dat|0x80;
else
dat=dat|0x00;
for(time=0;time<10;time++);} return dat;} /*********************向DS18B20写数据**************************/ void WriteDS18B20(uchar date){
uchar i;for(i=0;i<8;i++){
DQ=1;
_nop_();
DQ=0;
DQ=date&0x01;
for(time=0;time<10;time++);
DQ=1;
for(time=0;time<1;time++);
date>>=1;
} for(time=0;time<4;time++);} /*******************为读取温度做好准备************************/ void ReadyreadDS18B20(void){ IntDS18B20();WriteDS18B20(0XCC);WriteDS18B20(0X44);IntDS18B20();WriteDS18B20(0XCC);WriteDS18B20(0XBE);} // 计算2000~2099年任一天星期几
// year
: 00-99 // month: 01-12 // day
: 01-31
uchar GetWeekFromDay(uchar years,uchar months,uchar days){
if(months == 1 || months == 2)
{
months+=12;
if(years> 0)
years--;
else
years;
}
return(1+((days + 2*months + 3*(months+1)/5 + years + years/4)%7));//(星期一用1表示,而星期天用7表示)}
// 返回星期几
第五篇:《一位LED数码管显示0-9》
成都理工大学工程技术学院
单片微机原理及应用课程设计
《一位LED数码管显示0-9》
学生姓名:
学
号:
专
业:
班
级:
指导教师:
完成日期:
目
录
一 实验目的与任务…………………………………2 二 实验要求…………………………………………2 三 实验内容…………………………...……………2 四 元器件清单………………………………………2 五 LED数码管的结构及工作原理…………………2 六 关于PLC控制LDE介绍………………………4 七 原理图绘制说明…………………………………5 八 流程图绘制以及说明……………………………9 九 电路原理图与仿真………………………………10 十 源程序……………………………………………12 十一 心得体会………………………………………12 十二 参考文献………………………………………13
一、实验与任务
结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。
利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1,则数码管显示0)。
本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。
二、实验要求
1、了解七段LED数码管的结构、分类以及数码管的显示码。
2、学习1位LED数码管静态显示与动态显示的编程方法。
3、掌握可编程序控制器技术应用过程中的一些基本技能。
4、了解可编程控制器的装备、调试的全过程。
三、实验内容
1、练习设计、连接、调试控制电路;
2、学习PLC程序编程;
四、元器件清单
从PROTUES库中选择元器件(1)AT89C51;单片机。(2)RES、RX8;电阻、8排阻。
(3)7SEG-COM-CAT-BLUE;带公共端共阴极七段蓝色数码管。(4)CAP/CAP-ELEC;电容、电解电容。(5)CRYSTAL:晶振。
五、LED数码管的结构及工作原理 led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位0,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用LED数码管内部引脚图1
图1 10引脚的LED数码管
图2 LED数码管引脚定义
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
A、静态显示驱动:
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要5×8=40根I/O口来驱动,要知道一个89S51单片机可用的I/O口才32个呢。故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。B、动态显示驱动:
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp ”的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。
六、关于PLC控制LED介绍
PLC可编程控制器:它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、定时、计数与算数操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。
用PLC控制LED直接进行数据显示,可以降低成本,使得数据显示直观。传统数显有两种方法:
1、由PLC编制程序进行译码,来控制显示a-g段;
2、利用 译码组合电路产生a-g各段译码信号实现LED数码管显示。前一种方法逻辑译码关系复杂,后一种方法译码电路冗长,都不利于显示的实现。传统数显逻辑译码关系复杂,而用PLC的位组合元件和译码功能指令方法来实现LED数显.前一种方法将表示十进制数的4位BCD码的位元件成组使用,形成位组合元件数显;后一种方法用7段译码指令把指定元件的低4位对应的十六进制数译码后,驱动数显.这两种方法逻辑简单,易于理解,便于实现。
设计任务:LED数码管显示:0到9
七、原理图绘制说明
本次设计主要用到单片机AT89C51、晶振时序电路。AT89C51是一种带4KB闪烁可编程可擦出只读存储器的低电压、高性能CMOS微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微处理器,为很多嵌入式控制系统提供了一种灵活性高且廉价的方案,AT89C51的管脚分配(如图1)。
图1 AT89C51芯片及管脚图
AT89C51单片机主要由4个输入输出端口(P0口、P1口、P2口、P3口)及个控制引脚组成的,本次设计用到P1、P2的部分引脚,及18、19脚外接晶振电容为单片机提供时钟,9管脚为复位引脚,外接复位电路。
晶振时序电路:XTAL1和XTAL2分别为片内反相放大器的输入和输出端,当单片机采用外部时钟信号时,前者接地,后者引入外部输入信号,本次设计采用12M的石英晶体振荡器为单片机提供时钟(如图2)。
图2 AT89C51的晶振时序电路图
本次设计的原理图是在PROTEUS ISIS中绘制的,其工作界面分为原理图编辑窗口(Editing window)、预览窗口(Overview window)和工具栏。
1、新建*.dsn 打开绘图界面后,首先新建一个绘图文件,选择“【文件】——【新建设计】”,并保存成.dsn型文件。
2、绘制原理图
6(1)添加元器件:元件拾取共有两种办法,一种是按类别查找和拾取元件,另一种是直接查找和拾取元件。我采用的是前一种方法,元件通常以其英文名称或器件代号在库中存放。我们在取一个元件时,首先要清楚它属于哪一大类,然后还要知道它归属哪一子类,这样就缩小了查找范围,然后在子类所列出的元件中逐个查找,根据显示的元件符号、参数来判断是否找到了所需要的元件。双击找到的元件名,该元件便拾取到编辑界面中了。右侧列表中自上而下分别为元件图形和元件封装。具体如图3所示:
图3 分类拾取元件示意图
(2)元件的放置
在原理图编辑区的蓝色方框内,单击鼠标左键即完成元件的释放。具体如图4所示:
图4 元件的放置示意图
(3)电路连线
PROTEUS的连线是非常智能的,它会判断你下一步的操作是否想连线从而自动连线,而不需要选择连线的操作,只需用鼠标左键单击编辑区元件的一个端点拖动到要连接的另外一个元件的端点,先松开左键后再单击鼠标左键,即完成一根连线。如果要删除一根连线,右键双击连线即可。根据设计完成连线后即可得到完整的电路原理图,具体如图5:
图5 连线后的完整电路原理图
八、流程图绘制以及说明
主程序设计说明
主程序主要分为四部分,包括复位电路部分、独立按键的判别部分、单片机控制主程序部分和译码显示部分,模块流程图如图6所示:
图6 数码管显示程序流程图
九、电路原理图与仿真
1、Hex文件的导入过程
在仿真前,须先在KEIL4中生成.HEX文件。编译完源程序并且没有错误后,选择“Project-Options for Target ‘Target1’-Output”,在“Create HEX File”前面的空挑勾,再“确定”,即可生成HEX文件,如图7所示 :
图7 生成HEX文件示意图
在进入PROTEUS ISIS中,双击AT89C51芯片,出现如图8所示的对话框。在“Program File”一项中查找“seg.hex”文件的路径并加上该文件即可开始仿真,如图8所示:
图8 keil的seg.hex文件载入单片机的示意图
2.在导入hex文件后,便可运行该设计系统,打开仿真开关,显示如图
十、源程序清单
org 0000h
sjmp main
org 000bh
sjmp t0_isr
org 0030h main:clr a
mov dptr,#table
movc a,@a+dptr
mov p0,a
mov tmod,#01h
mov th0,#0d8h
mov tl0,#0efh
setb et0
setb ea
setb tr0 pd: cjne r0,#100,$
inc dptr
clr a
movc a,@a+dptr
cjne a,#00h,aaa
mov dptr,#table
;如果花样数据完应重新循环
clr a
movc a,@a+dptr aaa: mov p0,a
mov r0,#00h
sjmp pd t0_isr:
clr tr0
mov th0,#0d8h
mov tl0,#0efh
inc r0
setb tr0
reti table:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h
end
十一、心得体会
通过此次课程设计,使我更加扎实的掌握了有关单片机知识,用汇编语言在KEIL4中编程,在PROTEUS中绘制原理图并进行仿真,通过对这两个软件的学习,了解了其功能的强大,掌握了AT89C51的内部结构及工作原理,对于我们以后的 学习和实践有很大的指导意义,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。此次设计也让我明白了团队精神的重要性,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
十一、参考文献
[1]高钦和.可编程控制器应用技术与设计实例.北京:人民邮电出版社,2004 [2]虞鹤松编.可编程序控制器原理及应用.南京:东南大学出版社,1995 [3]田庭主编.常用可编程序控制器编程器及编程软件使用手册.北京:机械工业出版社,1994