文档库 最新最全的文档下载
当前位置:文档库 › 单片机多位数码管显示学号 身份证

单片机多位数码管显示学号 身份证

单片机多位数码管显示学号 身份证
单片机多位数码管显示学号 身份证

;多位数码管显示学号身份证

MOV P0,#00H ;p0初始输出低电平

MOV P2,#00H ;p2初始输出低电平

CPL P2.3 ;关闭蜂鸣器

MOV B,#0FEH ;数码管选择数B

CPL P2.7 ;p2.7引脚取反,变高电位,使锁存器2有效,可以开始选择

MOV P0,B ;选择数码管1

CPL P2.7 ;锁存器锁存,保持选择数码管1

CPL P2.6 ;p2.6引脚取反,变高电位,使锁存器1有效

MOV R3,#00H ;数码管计数位R3

MOV DPTR,#TAB ;

MAIN: MOV R2,#00H ;显示数据位R2

DSUP:

MOV A,R2 ;查表输出R2

MOVC A,@A+DPTR ;

MOV P0,A ;

PUSH ACC ;ACC入栈保存

LCALL DELAY ;延时

INC R2 ;R2加1

INC R3 ;计数位R3加1

CPL P2.6 ;p2.6引脚取反,变低电位,使锁存器1无效

MOV A,B ;B的值给A

RL A ;A左移

MOV B,A ;左移后的A值给B,即B左移一位

CPL P2.7 ;

MOV P0,A ;选择下一位数码管

CPL P2.7 ;保持选择

POP ACC ;ACC出栈

CPL P2.6 ;p2.6引脚取反,变高电位,使锁存器1有效

CJNE R3,#06H,NEXT ;R3等于6时顺序执行;不等于6时,执行NEXT

;执行6次输出后

MOV B,#0FEH ;B复原

MOV R3,#00H ;R3复位

CPL P2.6

CPL P2.7

MOV P0,B ;重新选择第一个数码管

CPL P2.7

CPL P2.6

NEXT: CJNE R2,#1EH,DSUP ;输出数据次数R2等于10时,顺序执行;否则

返回DSUP

LCALL MAIN

DELAY: M OV R7,#200

MOV R6,#10

D1: MOV R5,#200

D2: DJNZ R5,D2

DJNZ R7,D1

DJNZ R6,D1

RET

TAB: DB

06H,6DH,3FH,06H,6DH,6DH,66H,5BH,06H,3FH,40H,6DH,06H,4FH,06H,06H,4FH ,4FH,06H,06H,6FH,06H,3FH,6FH,5BH,06H,06H,06H,06H,06H

END

数码管0到9滚动显示

ORG 00H JMP START START:MOV DPTR,#TABLE ;取地址CLR A ;清零 MOV P2,A ;清零 MOV P3,A ;清零 MOVC A,@A+DPTR ;取数值LOOP: MOV P1,#11111110B;P1口左移一位 MOV P0,# 0FCH ;输出0 CALL DELAY ;延迟 MOV R0,#20 ;循环20次LOOP1:MOV P1,#11111110B;P1口左移一位MOV P0,#60H ;1 CALL delay1 ;延迟 MOV P1,#11111101B;P1口左移一位 MOV P0,#0FCH ;0 CALL delay1 ;延迟 DJNZ R0,LOOP1 ;跳转 MOV R0,#20 ;循环20次LOOP2:MOV P1,#11111110B;P1口左移一位MOV P0,#0DAH ;2 CALL delay1 ;延迟 MOV P1,#11111101B;P1口左移一位 MOV P0,#60H ;1 CALL delay1 ;延迟 MOV P1,#11111011B;P1口左移一位 MOV P0,#0FCH ;0 CALL DELAY1 ;延迟 DJNZ R0,LOOP2 ;跳转 MOV R0,#20 ;循环20次LOOP3:MOV P1,#11110111B;P1口左移一位MOV P0,# 0FCH ;0 CALL delay1 ;延迟 MOV P1,#11111011B;P1口左移一位 MOV P0,#60H ;1 CALL delay1 ;延迟 MOV P1,#11111101B;P1口左移一位 MOV P0,#0DAH ;2

单片机驱动数码管显示

单片机驱动数码管显示实验报告 学校:三亚学院 专业名称:测控技术与仪器 班级: 1301班 姓名:刘金坤 日期: 2015/05/08

实验四单片机驱动数码管显示 一实验目的 1 学习单片机驱动数码管动态显示的电路设计和编程方法 二实验原理 1、单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示和点阵显示。 七段数码管显示 为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。字母一般用米字型。 编码表: 七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp 例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011

数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。每个瞬间只能选通一个数码管,人眼的暂留时间为0.1s,每个数码管的选通时间必须在0.1s以内,通常选择15ms~20ms。电路图见实验附图。 三实验内容 理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。 四、实验步骤 (1)单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。 (2)在KEIL软件下编写程序并调试,完成实验内容要求。 (3)下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。 下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。 五参考程序与电路 数码管动态显示电路图(数码管位选信号为高电平,段选信号为高电平)

数码管显示倒计时时间的交通灯控制设计

第1章总体设计方案 1.1.设计思路 课程设计的目的 (1).进一步熟悉和掌握单片机的结构及工作原理。 (2).掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 (3).通过课程设计,掌握以单片机核心的电路设计的基本方法和技术。 (4).通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 (5).通过完成一个包括电路设计和程序开发的完整过程,了解开发一单片机应用系统的全过程,为今后从事相应开发打下基础。 设计任务和内容 1设计任务 单片机采用用AT89C51芯片,使用LED(红,黄,绿)代表各个路口的交通灯,用8段数码管对转换时间进行倒时(东西路口,南北路口各10秒,黄灯时间3秒)。 2设计内容 (1)设计并绘制硬件电路图。 (2)编写程序并将调试好的程序在proteus软件中仿真 。 3方案设计与论证 显示界面方案 该系统要求完成倒计时、状态灯等功能。按照任务要求采用数码管和MAX7219驱动芯片 设计方框图 整个设计以AT89C51单片机为核心,由数码管显示,LED数码管显示,MAX驱动芯片。 硬件模块入图2-1。

4交通管理的方案论证 东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。指示灯燃亮的方案如表2。 表2说明: (1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯, 此道车辆通过,行人禁止通行。时间为5秒。 (2)黄灯5秒,警示车辆和行人红、绿灯的状态即将切换。 (3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过, 行人通行。时间为5秒。 (4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全 畅通的通行。 5芯片简介 1)AT89C51单片机简介 AT89C51单片机 LED 数码管显示 LED 红绿灯 MAX 驱动芯片

LED数码管显示实验

信息工程学院实验报告 课程名称:单片机原理及接口 实验项目名称:LED 数码管显示实验 实验时间:2016年3月11日 班级:通信141 姓名: 学号: 一、实 验 目 的: 熟悉keil 仿真软件、proteus 仿真软件、软件仿真板的使用。了解并熟悉一位数码管与 多位LED 数码管的电路结构、与单片机的连接方法及其应用原理。学习proteus 构建LED 数 码管显示电路的方法,掌握C51中单片机控制LED 数码管动态显示的原理与编程方法。 二、实 验 设 备 与 器 件 硬件:微机、单片机仿真器、单片机实验板、连线若干 软件:KEIL C51单片机仿真调试软件,proteus 系列仿真调试软件 三、实 验 原 理 LED 显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七 段LED ,这种显示器有共阴极与共阳极两种。 共阴极LED 显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发 光二极管则点亮;共阳极LED 显示器的发光二极管阳极并接。 七段LED 数码管与单片机连接时,只要将一个8位并行输出口与显示器的发光二极管引 脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制 成 绩: 指导老师(签名): a f b e g c d dp 1 2 3 4 5 10 9 8 7 6 g f a b e d c dp (a) 共阴极 (b) 共阳极 (c) 管脚配置

发光二极管的8位字节数据称为段选码。 多位七段LED数码管与单片机连接时将所有LED的段选线并联在一起,由一个八位I/O 口控制,而位选线分别由相应的I/O口线控制。如:8位LED动态显示电路只需要两个八位I/O口。其中一个控制段选码,另一个控制位选。 由于所有位的段选码皆由一个I/O控制,因此,在每个瞬间,多位LED只可能显示相同的字符。要想每位显示不同的字符,必须采用动态扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,位选控制I/O口在该显示位送入选通电平(共阴极送低电平、共阳极送高电平)以保证该位显示相应字符,段选控制I/O口输出相应字符段选码。如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。 不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。由人眼的视觉特性,每一位LED在一秒钟内点亮不少于30次,其效果和一直点亮相差不多。 四、实验内容与步骤 1、电路图的设计。 (1)打开proteus软件,单击P,打开搜索元器件窗口,如图 1-1 所示: 图1-1 搜索元器件 (2)添加元器件AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、7SEG-MPXI1CC,修改元器件的参数,绘制电路图,如图1-2 所示:

单片机实验——数码管显示

单片机实验——数码管显示

数码管显示 一、数码管静态显示 1、电路图 图1 2、电路分析 该电路采用串行口工作方式进行串行显示实验,串行传输数据为8位,只能从RXD端输

入输出,TXD端用于输出同步移位脉冲。当CPU 执行一条写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口开始将发送缓冲器SBUF 中的8位数据按照从低位到高位依次发送出去,8位数据发送完毕,发送结束标志TI置1,必须由软件对它清0后才能启动发送下一帧数据。 因此,当输完8个脉冲后,再一次来8个脉冲时,第一帧的8位数据就移到了与之相连的第二个74LS164中,其他数据依此类推。 3、流程图

发送数据 二、数码管动态显示 1、电路图

图2 2、电路分析 R1-R7电阻值计算:一个7-seg 数码管内部由8段LED 组成,因此导通电压和电流与LED 灯相同,LED 导通压降大概在 1.5V-2.2V ,电流3mA-30mA ,单片机的工作电压是5V , 所以 一般取Rmin 和Rmax 中间值,330Ω、470Ω、510Ω。 由于P0口内部没有上拉电阻,所以在P0 口接1003025Im min 1325Im max =-===-==mA V V an U R K mA V V in U R

排阻,上拉电压。如果没有排阻的话,接上拉电阻时需要考虑数码管的电流,如果太小的话,是驱动不了数码管的。如图3: 发现电流大于5mA时,数码管才能亮,与前面电流最小3mA不符,因此计算数码管电流时使其在10mA-20mA之间,确保能驱动数码管亮。 两个74HC573实现对六位数码管的段选和位选,控制端为LE(第11脚)。 3、思路分析 先使第一个573输出同步,把数据送入573中,然后锁存,第二个573输出同步,打开第一个数

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序 介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路 多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B 端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路> 2 软件编程 该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:

<51单片机并行口驱动LED数码管显示程序>

7段显示管上滚动显示自己的电话号码

FPGA实训报告 课程名称:7段显示管上滚动显示自己的电话号码 目录 一、前言 (2) 二、实验选题 (2) 三、实验设计要求 (2) 四、程序设计说明 (2) 五、实验原理图 (6) 六、引脚分配 (6) 七、部分效果图 (7) 八、实训小结 (8) 九、参考文献 (8)

前言 电子设计自动化(Electronics Design Automation—EDA)技术是现代电子工程领域的一门新技术。它提供了基于计算机和信息技术的电路系统设计方法。 EDA技术就是依赖功能强大的计算机,对用电路描述语言描述的设计文件,自动地完成编译、化简、分割、综合、布线、优化、仿真等,直至实现既定的电子电路系统的功能。 EDA技术打破了软件设计和硬件设计间的壁垒,是一门综合性学科,一种新的技能技术。它将设计效率和产品性能合二为一,代表了电子设计技术和电子应用技术的发展方向。 VHDL的全名是Very High Speed Integrated Circuit Hardware Description Language,于83年由美国国防部发起创建,由IEEE(The Institute of Electrical and Electronics Engineers 电气与电子工程师学会)进一步发展,在87年作为“IEEE标准1076”发布,93年被升级为“IEEE1164”。 硬件描述语言是EDA技术的重要组成部分,VHDL作为电子设计的主流硬件描述语言,被多个EDA公司所引用。 VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,具有良好的移植性和适应性,从而大大简化了硬件设计任务,提高了电子系统设计的效率和可靠性。 用VHDL进行电子系统设计的一个很大的优点是设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。 此次课程设计我们组的项目是“出租车计价器”。我们小组通过老师一个星期的知识讲解并自学了《FPGA设计基础》,应用Quartus Ⅱ软件进行了设计和编辑。 二、实验选题:7段显示管上滚动显示自己的电话号码 三、实验要求:编写程序模块,用仿真器检测模块设计得正确与否,并给出

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存ucharScan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 ucharKey_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++);

} void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; } void Increase_Second() //秒处理函数 { if((++s>59)) { s=0;Increase_Minute(); } DSY_BUFFER[6]=DSY_CODE[s/10]; DSY_BUFFER[7]=DSY_CODE[s%10]; } void T0_INT() interrupt 1 //T0中断动态扫描数码管显示 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; P2=Scan_BIT; //选通相应数码管 P0=~DSY_BUFFER[DSY_IDX]; //段码送p0进行取反,共阴共阳转换Scan_BIT=_crol_(Scan_BIT,1);//准别下次选通的数码管 DSY_IDX=(DSY_IDX+1)%8; //索引0-7内循环 } void T1_INT() interrupt 3 //T1中断控制时钟运行 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(++s100==20) //50ms*20=1s延时 { s100=0;Increase_Second();

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。 E3最佳答案 下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #i nclude un sig ned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码 void key_delay(void) { int t; for(t=0;t<500;t++); } un sig ned char k; //设置全局变量k 为键盘的键值 键盘延时函数 键盘扫描函数 ***************************** */ //延时函数

void keyscan(void) //键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //a 作为缓存 //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线 P2.5 为低电平,其余行为高电平 a = P2; switch (a)//键盘扫描函数 { unsigned char a; P2 = 0xf0; if(P2!=0xf0) { key_delay(); if(P2!=0xf0) { P2 = 0xfe; key_delay(); a = P2; switch (a)

数码管显示不正常的调试方法与步骤总结

数码管显示不正常的调试方法与步骤总结 分类:单片机2011-10-12 21:50 1940人阅读评论(0) 收藏举报 数码管显示不正常大概有以下几种现象: 1,完全不显示; 2,显示部分段码; 3,显示部分位码; 4,显示闪烁; 5,以上几种综合。 解决办法: 步骤: 1,确定数码管是共阴还是共阳 2,检查数码管每段是否完好. 如果上面两条没问题,则: 若完全不显示: 检查电压是否加反,共阴的位选送低电平,共阳的位选送高电平

若某一位只显示部分段: 检查程序所送段码是否正确,注意共阴的段选送高电平,共阳的段选送低电平 若有一位或几位完全不显示: (1)若静态显示(所有位显示一样的数):只需检查程序这几位送的电平是否正确 (2)若动态显示(扫描显示不同的数):若数字滚动显示或闪烁,则动态扫描速度过慢,应减少延时,加快扫描 若显示的数字缺胳膊少腿或三头六臂: 这种现象只存在于动态扫描情况下,称为鬼影。 原因是扫描过快导致上一个字符(视觉暂留结果)显示在当前字符上产生重叠 解决办法: 增长延时,减慢扫描 还有一种情况 若采用同时送段码和位码,则注意送段码前数据口要清零,如下 [cpp]view plaincopyprint?

1.INT_T0: 2.MOV TH0,#(65536-2000) / 256 ;2ms 2000us 3.MOV TL0,#(65536-2000) MOD 256 4.MOV P0,#00h;新加该程序最大的Bug在这里,之所以显 示不全是因为前几次显示加在后一次显示上导致重叠 5. ; 或影藏,解决办法是每次显示之前 将所有段码清零 6.MOV A,#DISPBUF 7.ADD A,DISPBIT ;DISPBIT+DISPBUF=40H-48H 8.MOV R0,A 9.MOV A,@R0 10.M OV DPTR,#TABLE 11.M OVC A,@A+DPTR 12.M OV P0,A ;段选 13. 14.M OV A,DISPBIT 15.M OV DPTR,#TAB 16.M OVC A,@A+DPTR 17.M OV P2,A ;位选 18. 19.I NC DISPBIT 20.M OV A,DISPBIT 21.C JNE A,#08H,KNA ;08h 22.M OV DISPBIT,#00H 今天帮同学调了一下这个程序,在这里记下一笔,做个小结。

单片机数码管静态显示实验程序(汇编)

单片机数码管静态显示实验程序 org 00h num equ p0 ;p0口连接数码管 clr p2.0 ; mov dptr ,#tab clr a mov r2,#0 loop: movc a,@a+dptr mov num ,a acall delay_200ms inc r2 mov a,r2 cjne r2,#15, loop mov r2,#0 clr a ajmp loop tab : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH delay_200ms: mov r3,#20 delay: acall delay_10ms djnz r3,delay ret ;;;;;;;;;;;;;;;; 非中断精确1MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_1ms: MOV R7 ,#249 signed: ;循环部分4机器周期 nop nop djnz R7 ,signed ret ;返回指令2机器周期 ;2+249*4+2=1000us 可以精确定时1MS,假设外部晶振是12M

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确10MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov r6,#9 ;2个机器周期用2us delay_10ms_sined: ;9次循环共用9(1ms+4us)=9036us acall delay_1ms djnz r6,delay_10ms_sined MOV r6 ,#240 ;2个机器中期用2us signed_10ms : ;循环部分4机器周期共240次 nop nop djnz r6 ,signed_10ms ret ;返回指令要2us ;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确定时1s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_1s: mov r5,#99 ;两个机器周期2us delay_1s_signed: ;循环指令周期为4us,加上延时10ms ;(10ms+4us)*99 = 990.396ms acall delay_10ms djnz r5,delay_1s_signed mov r5 ,#9 ;两个机器周期2us signed_1s: ;循环指令周期为4us,加上延时1ms ;(1ms+4us)*9 = 9ms+36us acall delay_1ms djnz r5 ,signed_1s mov r5 ,# 140 ;机器周期2us signed_1s_: ;一次循环4us共有140次。140us*4 = 560us nop nop djnz r5,signed_1s_ ret ;2us ;2us+990ms+396us+2us+9ms+36us+2us+560us+2us = 999ms+1000us = 1s end

C51单片机制作数码管显示数字时钟————可调C源程序

#include //数码管显示的数字时钟 sbit SDI=P1^7 ; //用hc595芯片来控制数码管的位选端 sbit LCK=P1^5 ; sbit SCK=P1^6 ; sbit K1=P2^7; sbit K2=P2^6; sbit K3=P2^5; sbit K4=P2^4; unsigned char tt,sec,sec_ge,sec_shi,min,min_ge,min_shi,hour,hour_ge,hour_shi; void delay(unsigned int t) { unsigned int i,j; for(i=0;i

if(min==60) { min=0; hour++; } if(hour==24) { hour=0; } sec_ge=sec%10; sec_shi=sec/10; min_ge=min%10; min_shi=min/10; hour_ge=hour%10; hour_shi=hour/10; } void display() { hc595(0x00); P3=0x07; hc595(table[sec_ge]); delay(1); hc595(0x00); P3=0x06; hc595(table[sec_shi]); delay(1); hc595(0x00); P3=0x05; hc595(0x40); delay(1); hc595(0x00); P3=0x04; hc595(table[min_ge]); delay(1); hc595(0x00); P3=0x03; hc595(table[min_shi]); delay(1); hc595(0x00); P3=0x02; hc595(0x40); delay(1); hc595(0x00);

数码管滚动显示

/******************************************* 文件:SMG.C 环境:编译为ICC A VR6.25A,仿真为A VR Studio4.10 硬件:ATMEGA16芯片 日期:2006年12月10日 功能:驱动开发板上的数码管,滚动显示1、2、3、4、5、6 备注:参考《A VR系列单片机C语言编程与应用实例》(清华大学出版社) /******************************************/ #include //包含型号头文件 #include //包含"位"操作头文件 #include //标准输入输出头文件 #include //包含自定义常量头文件 #pragma data:code const SEGMENT[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//将BCD码转换成数码管扫描码的数组 /******************************************* 函数名称: One_smg_display 功能: 指定的数码管显示指定的内容 参数: data--显示的内容(0-15) number--指定的数码管(1-6) 返回值: 无 /********************************************/ void One_smg_display(uchar data,uchar number) { PORTB|=0x3F; //输出位选 PORTA|=BIT(BITLK); //更新位选 Delayus(50); //调整时序 PORTA&=~BIT(BITLK); //锁存位选 PORTB=SEGMENT[data]; //输出段选 PORTA|=BIT(SEGLK); //更新段选 Delayus(50); //调整时序 PORTA&=~BIT(SEGLK); //锁存段选 number=~BIT(number-1); //调整位选(指定时是1~6,而操作的时候是0~5)PORTB=number; //输出位选 PORTA|=BIT(BITLK); //更新位选 Delayus(50); //调整时序 PORTA&=~BIT(BITLK); //锁存位选 } /*******************************************

单片机实验四 I O显示控制实验(数码管显示实验)

电子信息工程学系实验报告 课程名称:单片微型计算机与接口技术Array 实验项目名称:实验四 I/O显示控制实验实验时间: 班级: **** 姓名:**** 学号:******** 一、实验目的: 1、熟悉keil仿真软件、proteus仿真软件、软件仿真板的使用。 2、了解并熟悉一位数码管与多位LED数码管的电路结构、与单片机的连接方法及其应用原理。 3、学习proteus构建LED数码管显示电路的方法,掌握C51中单片机控制LED数码管动态显示的原理与编程方法。 二、实验环境: 1、Windows XP系统; 2、Keil uVision2、proteus系列仿真调试软件 三、实验原理: 1、LED数码管的结构和原理 LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。 (a)共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮; (b)共阳极LED显示器的发光二极管阳极并接。 2、七段显示器与单片机接口:只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如下表所示。通常将控制发光二极管的8位字节数据称为段选码。 八段选码(显示码)的推导(以共阳数码管显示C为例): 要显示C则a、f、e、d四个灯亮2.为是共阳数码管,则a、f、e、d应送0时亮3.dp-a为11000110B 3、多位数码管的显示:电路结构、动态静态两种实现原理: LED显示器有静态显示与动态显示两种方式。 (1) LED静态显示方式 各位LED的位选线连在一起接地或接+5V;每位LED的段选线(a-dp)各与一个八位并行口相连; 在同一时间里每一位显示的字符可以各不相同。

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 时间:2012-09-10 13:52:26 来源:作者: /* 8位数码管显示时间格式 05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #include sbit KEY1=P3^0; //定义端口参数 sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; //定义指示灯参数 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为 12:30:00 void delay(unsigned int cnt) { while(--cnt); } /******************************************************************/ /* 显示处理函数 */ /******************************************************************/ void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示小时 StrTab[1]=tab[hour%10]; StrTab[2]=0x40; //显示"-" StrTab[3]=tab[minute/10]; //显示分钟 StrTab[4]=tab[minute%10]; StrTab[5]=0x40; //显示"-" StrTab[6]=tab[second/10]; //显示秒 StrTab[7]=tab[second%10]; } main()

单片机数码管静态显示实验

实验五串行口静态显示 一.实验目的 1.学习用单片机的串行口扩展74LS164 实现静态显示方法。 2.学习用单片机I/O 口模拟串口工作实现静态显示的编程方法。 3.掌握静态显示的编程方法和数码管显示技术。 二.实验任务 1.根据共阳数码管的功能结构,自编一组0~F 的笔形码,并按顺序存放建立程序数据表格。 2.利用单片机串行口扩展74LS164,完成串--并转换输出,实现静态显示:要求循环显示0~F 这数字,即输出数字“0”时,四位同时显示0,显示1 秒后再输出数字“1”,即四位同时显示1, 依次类推,相当于数字自检循环显示。 3.利用单片机串行口(RXD、TXD)编写静态显示程序,在数码显示器上30H、31H 单元的内 容,30H、31H 单元为任意的十六进制数。 4.用P1.6、P1.7 分别替代RXD、TXD 做模拟串口完成任务3 的静态显示程序。 三.实验电路 静态显示实验电路 连线方法:静态显示只要连接2 根线:单片机的RXD 与DAT 节点连接,TXD 与CLK 接点连 接,要把电源短路片插上。PW11 是电源端。 四.实验原理说明 1.静态显示实际上动态的过程,静态的显示,单片机串行口输出的数据通过74LS164 串并转换 输出,每输出一个数据,把原先的的数据推挤到下一个显示位上显示。实验时,单片机串行口应工作在方式0,RXD(P3.0)输出串行数据,TXD(P3.1)输出移位时钟,在移位时钟的作用下,串行口发送缓冲器的数据一位一位地从RXD 移入到74LS164 中,并把后面送入的数据推挤原先的数据到下一个级联的 74LS164 中输出,每输出一个数据可以延时1ms。实验时,通过改变延时时间,可以更清楚地观察到数据推挤的过程。 2.串行口工作在方式0 时,串行传输数据为8 位,只能从RXD 端输入输出。TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12,由软件置位串行控制寄存器SCON 的REN位才能启动串行接收。在CPU 将数据写入SBUF 寄存器后,立即启动发送,第8 位数据输送完后,硬件将SCON 寄存器的TI 位置1,必须由软件对它清0 才能启动发送下一帧数据。 3.静态显示笔型码: 笔形码:0 1 2 3 4 5 6 7 8 9 A B C D E F 11H,D7H,98H,92H,56H,32H,30H,97H,10H,12H,14H,70H,39H,D0H,38H,3CH 五.程序流程图和资源分配

51单片机数码管时钟程序

本人初学51,编写简单时钟程序。仅供参考学习 #include #define uint unsigned int #define uchar unsigned char Uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1 }; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0xef}; void delay(uint); unsigned long i,num,t=1; void main() { TMOD=0X01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; while(1) { num=i/20;//i为秒位 if(i==1728000)//一天大概是这个秒吧,,,应该是,呵呵。就是世间到24时就归零。 i=0; //也可用下面这个部分来代替上面的。 /*if(i==20) { i=0; num++; if(num==5184000) num=0; }*/ //num=9; P2=7;//P2口为数码管控制端,我的是38译码器控制,就直接对其赋值来控制时,分,秒的显示; P0=table[i%100%10]; delay(t); P2=6; P0=table[i%100/10]; delay(t); P0=table_d[(num%60)%10]; P2=5; delay(t); P0=table[(num%60)/10]; P2=4;

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。在器件选择按钮中单击

“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 一片 晶体CRYSTAL 12MHz 一只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF 一只 电阻RES 10K 一只 电阻RES 4.7K 四只 双列电阻网络Rx8 300R(Ω) 一只 四位七段数码管7SEG-MPX4-CA 一只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

单片机课设 数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制 姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:张莹 提交日期:2016年10月29日

目录 一、设计题目与要求 (3) 1.1设计题目 (3) 1.2设计要求 (3) 二、系统方案设计 (3) 2.1硬件电路设计 (3) 1.单片机最小系统简介 (3) 2.数码管显示电路 (6) 2.3硬件选型及说明 (6) 1.ST89C51单片机 (6) 2.四位一体七段共阴极显示数码管 (8) 三、系统原理图设计与仿真 (9) 3.1系统仿真图 (9) 3.2系统仿真结果 (10) 四、程序设计 (11) 4.1程序设计 (11) 4.2程序流程图 (12) 五、系统调试 (14) 5.1系统硬件调试 (14) 5.2系统软件调试 (14) 六、总结与体会 (14) 附录一 (16) 附录二 (17) 附录三 (27)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO 口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,内缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计 2.1硬件电路设计 本设计的硬件电路主要包括的模块有:单片机最小系统、七段数码管显示模块、 1.单片机最小系统简介 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。结构图如下:

相关文档
相关文档 最新文档