单片机数码管显示系统课程设计

单片机数码管显示系统课程设计
单片机数码管显示系统课程设计

数码管显示与键盘扫描系统

摘要:

现如今已经跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。这种计算机的最小系统只用了一片集成电路,就可进行简单运算和控制。因为它体积小,通常都是放置在一个机械装置的内部。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。数码管显示与键盘扫描系统是单片机系统中十分典型的应用,可将4×4键盘的按键对应显示在数码管上。

关键词:单片机数码管

一、绪论

1. 研究意义

用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。静态显示数据稳定,占用很少的CPU 时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。LED数码管的外围电路一般需要一个限流电阻和加大驱动电流的晶体管。

LED数码管是由发光二级管显示字段组成的显示器,有“8”字段和“米”字段之分,这种显示器有共阳极和共阴极两种。实际上不用驱动电路即可达到正常亮度,为了可靠性设计可采用晶体管构成驱动电路。

2. 设计目的

在单片机的产品设计中,人机界面是非常重要的部分,而且随着系统的日益复杂,以及人们对产品的人机交互能力的要求不断提升,常握单片机系统中的人机界面基础设计能力成为了学习单片机的基础课程,而4X4键盘的操作和LED数码管的动态显示是人机界面设计的基础内容,掌握这些基础设计能力,加深对人机界面的认识,同时提高人机界面系统设计能力。

3.研究范围及技术要求

半导体数码管,4×4键盘。做此实验用51板,因为51板提供了相应的LED模组,LED显示器是单片机应用中常用的输出器件,4×4键盘的扩展显示也是在MCS-51上进行实验。给 4×4 键盘的每个键定义一个功能,其中把定义为 0~9 的键盘称为数字键,把定义成 DEL 的键称为删除键,把定义成 ENT 的键成为确认键,其他键称为保留键。如果是数字键按下,把代表数字显示在数码管上:按键按下时,6 位数码管靠右边显示该键的代表数字;继续按键时,已经显示在数码管上的数字左移一位,按键代表的数字显示在最右边的数码管上。

4.发展及指导思想

单片机在开发过程中 ,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系统的需要。国外主要采用串行接口的键盘显示专用芯片,如BC7280/81、HD7279、CH451等。这类芯片占用CPU的资源少,传输速度较快,外围器件要求也较少,在中小系统中都可得到广泛的应用。指导思想主要是用串行接口使得键盘的扩展在LED上显示。

二、方案论述

1.数码管工作原理

数码管由8 个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0~9,字符A~F、H、L、P、R、U、Y 等符号及小数点“.”。数码管又分为共阴极和共阳极两种类型。共阳极数码管中8 个发光二极管的阳极(二极管正端)连接一起,即为共阳极接法,简称共阳数码管。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管中8 个发光二极管的阴极(二极管负端)连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

单片机数码管显示控制程序设计仿真图

2. 4×4行列式键盘的工作原理

行列式键盘的工作方式是先用列线发送扫描字,然后读取行线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,可以和具有64个按键的矩阵键盘相连接,能对键盘不断扫描、自动消抖、自动识别按下的键,并给出编码,能对双键或n个键同时按下的情况实行保护。

在显示部分,它可以为发光二极管、荧光管及其他显示器提供按扫描方式工作的显示接口,而且为显示器提供多路复用信号,可以显示多达16位的字符或数字。

键盘中有无按键按下是由列线送入全扫描字、行线读入行线状态来判断的,其方法是将列线的所有I/O线均置成低电平,然后将行线电平状态读入累加器A中,如果有键按下,总会有一根行线被拉至低电平,从而使行输入不全为1。

键盘中哪一个键按下可由列线逐列置低电平后,检查行输入状态来判断,其方法是依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的键不在此列,如果不全为1,则所按下的键必在此列,而且是在与0电平线相交的交点上的那个键。

4×4键盘电路图

图中C1~C4为4×4键盘的列扫描线,L1~L4为4×4键盘的行扫描线。先使行扫描线输出高电平,然后读取列扫描线的状态,得到与按键横向位置对应的4位列码;如果是有键被按下时,则对应的列扫描线必然会被读回高电平,如果是无键盘按下时,则读取的列码必定全是0(低电平)。这也就可以判断有无按键的按下了。

3.软件流程图

程序开始先对第一列进行扫描,如果没有按键,再对第二列、第三列、第四列分别进行扫描,如果没有返回到开始;如果第一列有按键,在分别对第一行、第二行、第三行、地四行,进行扫描,若有按键按下分别显示 0、1、2、3;第二列、第三列、第四列类似第一列,分别对第一行、第二行、第三行、第四行进行扫描,有按键相应的显示出数值。流程图见附件1。

4.电路硬件说明

(1).键盘与单片机连接

在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。

(2).单片机与LED连接

在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。

5.程序设计内容

(1).4×4矩阵键盘识别处理

(2).按键的行列接法

每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

6.程序

#include

#define uchar unsigned char

#define uint unsigned int

sbit BEEP = P3^7;

uchar code DSY_CODE[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa 1,0x86,0x8e,0x00

};

uchar Pre_KeyNO = 16,KeyNO = 16;

void DelayMS(uint ms)

{

uchar t;

while(ms--)

{

for(t=0;t<120;t++);

}

}

void Keys_Scan()

{

uchar Tmp;

P1 = 0x0f;

DelayMS(1);

Tmp = P1 ^ 0x0f;

switch(Tmp)

{

case 1: KeyNO = 0; break; case 2: KeyNO = 1; break; case 4: KeyNO = 2; break; case 8: KeyNO = 3; break; default: KeyNO = 16;

}

P1 = 0xf0;

DelayMS(1);

Tmp = P1 >> 4 ^ 0x0f;

switch(Tmp)

{

case 1: KeyNO += 0; break; case 2: KeyNO += 4; break; case 4: KeyNO += 8; break; case 8: KeyNO += 12;

}

}

void Beep()

{

uchar i;

for(i=0;i<100;i++)

{

DelayMS(1);

BEEP = ~BEEP;

}

BEEP = 1;

}

void main()

{

P0 = 0x00;

while(1)

{

P1 = 0xf0;

if(P1 != 0xf0)

Keys_Scan();

if(Pre_KeyNO != KeyNO)

{

P0 = ~DSY_CODE[KeyNO]; Beep();

Pre_KeyNO = KeyNO;

}

DelayMS(100);

}

}

7.结果分析

结果仿真图

8.结论

通过这次课程设计,Keilc51软件工作环境的熟悉以及掌握基本的操作,实现电路原理图的绘制及电路仿真的实现,我还认识到理论与实际相结合的重要性,理论知识再丰富,没有实际的操作经验是不行的,这样还可以锻炼我们的实际动手操作能力和独立思考能力。单片机知识在电子领域越来越重要了,在这次课程设计中我又了解了更多单片机的知识,从而也对单片机仿真软件产生了兴趣,学到了书上没有的东西,为以后工作又做了一层铺垫。在课程设计过程中遇到的一些问题,通过查询资料和结合平时学到的知识,当然还有和同学的讨论得到了解决。

9.致谢

经过这一个周的实训,单片机课程设计也已接近尾声,回顾这星期内和老师、同学们一起努力时的点点滴滴,不经感慨万千。在此我首先要感谢学校,是学校给我们提供了良好的硬件设施,让我们能顺利的完成实训。其次,我要感谢我的单片

机老师—陈显明老师。陈老师无论在课程学习、设计上,还是在为人处事上,都给予我许多教诲,这些影响将使我终身受益。

同时我还要感谢和我一起完成这份课程设计的同学康秀梅,我们在学习和实践中一起讨论,一起研究,我在她身上学到了许多东西,同时也学会了做一件事应该坚持,不耻下问。

10. 参考文献

1.何桥主编;段清明、邱春玲副主编;单片机原理及应用;中国铁道出版社;2008

年1月;

2.张毅刚,彭喜源,谭晓昀,曲春波;MCS-51单片机原理设计.2版;哈尔滨工业

出版社;1997;

3.赵晓安;MCS-51单片机原理及应用;天津大学出版社;2001

附件

附件1:流程图

附件2:硬件电路图

实验三 数码管显示实验

实验十九数码管显示实验 一、实验目的 1、了解数码管的显示原理; 2、掌握数码管显示的编程方法。 二、实验内容 1、编写数码管显示程序,循环显示0-F字符 三、实验设备 1、硬件: JX44B0实验板; PC机; JTAG仿真器; 2、软件: PC机操作系统(WINDOWS 2000); ARM Developer Suite v1.2; Multi-ICE V2.2.5(Build1319); 四、基础知识 1、掌握在ADS集成开发环境中编写和调试程序的基本过程。 2、了解ARM 应用程序的框架结构; 3、了解数码管的显示原理; 五、实验说明 1、LED显示原理 发光二极管数码显示器简称LED显示器。LED显示器具有耗电低、成本低、配置简单灵活、安装方便、耐震动、寿命长等优点,目前广泛应用于各类电子设备之中。 7段LED由7个发光二极管按“日”字排列。所有发光二极管的阳极连接在一起称共阳极接法,阴极连接在一起称为共阴极接法。一般共阴极可以不需要外接电阻。 其中各二极管的排列如上图在共阳极接法中,如果显示数字“5”,需要在a、c、d、f、g端加上高电压,其它加低电压。这样如果按照dp、g、fe、d、c、b、a的顺序排列的话对应的码段是:6DH。其它的字符同理可以得到。

2、数码管显示驱动 数码管的显示一般有动态显示和静态显示两大类,另外按照驱动方式又分串行驱动和并行驱动两种方式。串行驱动主要是提供串-并转换,减少控制线数量;并行驱动对每一个段提供单独的驱动,电路相对简单。这方面参看数字电路相关内容。 下面主要介绍静态显示和动态显示: 1)静态显示: LED数码管采用静态接口时,共阴极或共阳极节点连接在一起地或者接高电平。每个显示位的段选线与一个8位并行口线相连,只要在显示位上的段选位保持段码电平不变,则该位就能保持相应的显示字符。这里的8位并行口可以直接采用并行I/O口,也可以采用串行驱动。相应的电路如下: 很明显采用静态显示方式要求有较多的控制端(并行)或较复杂的电路(串行)。但是在设计中对器件的要求低。

关于单片机的一些小实验_06 一位数码管静态显示

/****************************************************************************** ************** * 功能:一位数码管静态显示。 * 硬件条件:1.CPU型号:AT89S52 * 2.晶振:12.000MHz * 3. P0口全部接上拉电阻。 * 4.短接P0.0__SMG1 * 短接P0.1__SMG2 * 短接P0.2__SMG3 * 短接P0.3__SMG4 * 短接P0.4__SMG5 * 短接P0.5__SMG6 * 短接P0.6__SMG7 * 短接P0.7__SMG8 * 短接P2.7__SI1 * 短接P2.6__RCK1 * 短接P2.5__SCK1 * 日期:2014年04月23号 ******************************************************************************* **************/ #include "reg52.h" // 包含头文件 /* 与编译器无关的数据类型定义*/ /****************************************************************************** **************/ typedef unsigned char uint8; // 无符号8位整型变量 typedef signed char int8; // 有符号8位整型变量 typedef unsigned short uint16; // 无符号16位整型变量 typedef signed short int16; // 有符号16位整型变量 typedef unsigned int uint32; // 无符号32位整型变量 typedef signed int int32; // 有符号32位整型变量 typedef float fp32; // 单精度浮点数(32位长度)typedef double fp64; // 双精度浮点数(64位长度) /****************************************************************************** **************/ /* 定义位变量*/ sbit P0_0 = P0 ^ 0; sbit P0_1 = P0 ^ 1; sbit P0_2 = P0 ^ 2; sbit P0_3 = P0 ^ 3; sbit P0_4 = P0 ^ 4; sbit P0_5 = P0 ^ 5; sbit P0_6 = P0 ^ 6;

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

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

数码管显示 一、数码管静态显示 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输出同步,打开第一个数

单片机数码管显示系统课程设计

数码管显示与键盘扫描系统 摘要: 现如今已经跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。这种计算机的最小系统只用了一片集成电路,就可进行简单运算和控制。因为它体积小,通常都是放置在一个机械装置的内部。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。数码管显示与键盘扫描系统是单片机系统中十分典型的应用,可将4×4键盘的按键对应显示在数码管上。 关键词:单片机数码管 一、绪论 1. 研究意义 用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。静态显示数据稳定,占用很少的CPU 时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。LED数码管的外围电路一般需要一个限流电阻和加大驱动电流的晶体管。 LED数码管是由发光二级管显示字段组成的显示器,有“8”字段和“米”字段之分,这种显示器有共阳极和共阴极两种。实际上不用驱动电路即可达到正常亮度,为了可靠性设计可采用晶体管构成驱动电路。 2. 设计目的 在单片机的产品设计中,人机界面是非常重要的部分,而且随着系统的日益复杂,以及人们对产品的人机交互能力的要求不断提升,常握单片机系统中的人机界面基础设计能力成为了学习单片机的基础课程,而4X4键盘的操作和LED数码管的动态显示是人机界面设计的基础内容,掌握这些基础设计能力,加深对人机界面的认识,同时提高人机界面系统设计能力。

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数码管显示程序>

数电课程设计-数码管显示控制器的设计与实现

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 数码管显示控制器的设计与实现 初始条件: 555定时器、74LS160计数器、74LS161计数器、74LS153数据选择器、74LS48译码器、74LS04非门与数码管、电阻、电容等相关元件。 要求完成的主要任务: 1、设计任务 根据已知条件,完成对数码管显示控制器的设计、装配与调试。 2、设计要求 (1)、能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、 3、5、7、9(奇数列), 0、2、 4、6、8(偶数列),0、1、0、1、2、3、4、 5、6、7(音乐符号序列);然后再从头循环; (2)、打开电源自动复位,从自然数列开始显示。 时间安排: 1、2012 年 6 月 8 日分班集中,布置课程设计任务、选题;讲解课设具体实施计划与课程设计报告格式的要求;课设答疑事项。 2、2012 年 6 月 9 日至 2012 年 7 月 3 日完成资料查阅、设计、制作与调试;完成课程设计报告撰写。 3、2012 年 7 月 4 日提交课程设计报告,进行课程设计验收和答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

目录 摘要 (3) Abstact (4) 引言 (5) 1设计背景 (6) 1.1设计任务 (6) 1.2设计要求 (6) 1.3指导思想 (6) 2方案论证 (7) 2.1方案说明 (7) 2.2方案原理 (7) 3电路的设计与分析 (8) 3.1电路的总体设计 (8) 3.2电路的原理框图 (9) 3.3元电路的设计与分析 (9) 3.3.1多谐振荡电路的设计与分析 (9) 3.3.2计数电路的设计与分析 (11) 3.3.3译码显示电路的设计与分析 (13) 4电路仿真、调试与分析 (16) 4.1脉冲产生电路的仿真 (16) 4.2总电路的仿真 (17) 4.3运行结果分析 (17) 5心得与体会 (18) 附录1元器件清单 (19) 附录2参考文献 (20)

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)

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

单片机数码管静态显示实验程序 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

嵌入式系统课程设计---基于ARM微处理器的数码管驱动设计-任务书(1)

河南工业大学嵌入式课程设计 课程设计题目:基于ARM微处理器的数码管驱动设计学院:信息科学与工程学院 班级:电科1304 姓名: 学号:2013160304 指导老师姓名:李智慧

13级电科专业课程设计任务书

基于ARM微处理器的数码管驱动设计 一、设计要求 1.1实验内容: 1. 利用ARM微处理器实现数码管显示驱动; 2.能够显示0 1 2 3 4 5 6 7 8 9等数字,且循环显示; 3. 通过按键改变循环显示速度; 1.2实验设备: 硬件:PXA270 实验平台,PXA270 ARM 标准/增强型仿真器套件,PC 机。 软件:VMware Workstation、Ubuntu、win7。 二、设计方案 本次试验选用的芯片为 PXA270 ,使用的是 PXA270集成试验箱。基于 IntelXScale 架构的 PXA270处理器,集成了存储单元控制器、时钟和电源控制器、 DMA控制器、 LCD控制器、 AC97控制器、 I2S 控制器、快速红外线通信 (FIR) 控制器等外围控制器,可以实现丰富的外围接口功能。其低电源运行模式以及动态电源管理技术可以有效的降低电源的功耗。使用试验箱上的 4X4 的矩阵键盘作为输入,用来控制数码管显示的快慢速度,将需要输出的各个数码管状态从两个数码管中输出。 三、设计原理 1、数码管结构 七段数码管由 8 个发光二极管排列组成(包括小数点位)如下图所示: 这 8 个独立的二极管通常被命名: a.b.c.d.e.f.g.h 。 h 表示小数点。利用 7 段数码管能显示所有数字以及部分英文字母。 数码管有 2 种不同的形式:一种是 8 个发光二极管的阳极都连一起,成为共 阳极 8 段数码管如图所示: 共阳极 8 段数码管的 8 个发光二极管的正极一起接 VCC ,要控制数码管中的某一段亮,比如 A段,只须要控制数码管的 A 脚为低电平就可以了,反之熄灭 A 段就控制 A 脚为高电平。

微机原理及应用课程设计_数码管交通灯教材

南京工程学院 课程设计任务书 课程名称微机原理及应用A 院(系、部、中心) 专业 班级 姓名 学号 起止日期 2013.12.23~2013.12.26 指导教师

目录 1.设计要求 (3) 1.1设计目的 (3) 1.2设计内容 (3) 1.3功能要求 (3) 1.4难度要求 (3) 2.方案说明 (4) 2.1硬件系统工作原理说明 (4) 2.1.1电路接线方案 (4) 2.1.2定时问题 (4) 2.1.3工作状态 (4) 2.2参考流程图说明 (5) 2.2.1流程图设计思想 (5) 2.2.2实验流程图 (6) 3源程序清单 (7) 4.调试过程和结果 (11) 4.1总接线图 (11) 4.2 LED模拟的交通灯显示情况 (12) 4.3数码管模拟的交通灯倒计时 (13) 5.心得体会 (13) 6.参考文献 (14)

1.设计要求 1.1设计目的 通过课程设计加深理解课堂教学内容,掌握微机原理的基本应用方法。通过实验熟悉微机基本接口芯片的外型、引脚、编程结构,掌握汇编语言程序设计和微机基本接口电路的设计、应用方法,做到理论联系实际 1.2设计内容 利用STAR ES598PCI实验仪的硬件资源设计一个“带时间显示的交通信号灯迷你控制系统”。所有输入该装置的信号均采用STAR ES598PCI实验仪上的状态输入开关输入,东西,南北方向的红绿黄灯均采用实验仪上的LED发光二极管模拟,东西,南北方向的信号灯变化,通行倒计时时间用数码管显示。 1.3功能要求 (1)假设在一个A道(东西方向)和B道(南北方向)交叉的十字路口安装有自动信号灯。当A道和B道均有车辆要求通过时,A道和B道轮流放行。A道放行7秒,B道再放行5秒,依次轮流。绿灯转换红灯时黄灯亮1秒。 (2)一道有车,另一道无车时(实验时用开关K5和K6控制),交通控制系统能立即让有车道放行。 (3)有紧急车辆要求通过时,系统要能禁止普通车辆通过,A、B道均为红灯,紧急车辆用K7开关来模拟控制,有紧急车辆时另有一红灯闪烁。 (4) 当A道和B道均有车辆要求通过时,A道和B道轮流放行。A道放行30秒,B道再放行20秒,依次轮流。每个绿灯的最后5秒黄灯闪烁。 1.4难度要求 (1)基本要求:采用8255A输出控制信号灯,8255A输入K5、K6、K7控制开关信号,用循环程序软件定时实现功能要求。(60分) (2)中级要求:采用8255A输出控制信号灯,8255A输入K5、K6、K7控制开关信号,用8253硬件定时、软件查询方式实现功能要求。(80分) (3)高级要求:在中级要求的基础上,增加用8255A输出驱动LED数码显示器显示绿灯倒计时的秒数,黄灯时不显示时间。(100分)

单片机实验四 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位数码管动态显示电路设计.

电子课程设计 — 8位数码管动态显示电路设计 学院:电子信息工程学院 专业、班级: 姓名: 学号: 指导老师: 2014年12月

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (3) 四、功能模块 (9) 五、总体设计电路图 (10) 六、心得体会 (12)

8位数码管动态显示电路设计 一、设计任务与要求 1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。 2. 要求在某一时刻,仅有一个LED 数码管发光。 3. 该数码管发光一段时间后,下一个LED 发光,这样8只数码管循环发光。 4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。 5、研究循环地址码发生器的时钟频率和显示闪烁的关系。 二、总体框图 设计的总体框图如图2-1所示。 图2-1总体框图 三、选择器件 1、数码管 数码管是一种由发光二极管组成的断码型显示器件,如图1所示。 U13 DCD_HEX 图1 数码管 数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出 不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个 74LS161计数器 74LS138译码 器 数码管

LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。 2、非门 非门又称为反相器,是实现逻辑非运算的逻辑电路。非门有输入和输出两个端,电路符号如图2所示,其输出端的圆圈代表反相的意思,当其输入端为高电平时输出端为低电平,当其输入端为低电平时输出端为高电平。也就是说,输入端和输出端的电平状态总是反相的。其真值表如表1所示。 图2 非门 表1 真值表 输入输出 A Y 0 1 1 0 3、5V电源 5V VCC电源如图3所示。 图3 5V电源

基于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系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。结构图如下:

PLC数码管显示课程设计

PLC课程设计论文 级专业班 题目:数码管显示 学号: 姓名: 指导老师: 二零年月日

加信号 一 任务要求实现的功能 数码管显示0~9十个数字,有三个控制按钮,一个是‘加’按钮SQ1,一个是'减'按钮SQ2,另一个是复位按钮SB 。按一下SQ1数码管显示数据加1,当加到9如果再按下SQ1就显示0;当按一下SQ2时数码管显示数字减1,当减到0如果再按下SQ2就显示9。当按下SB 时,数码管显示0. 二 1.描述功能框图 2.虚拟实物图: - 复位信号 判断是哪种类型的信号 数码管显示的数字加1 减信号 数码管显示的数据减1 数码管显示的数据清零 清零 +

三 流程图 N Y 小于9? 大于0? 启 动 加信号? 复位信号? 显示数字0 Y N D0减1 D0=9 D0复位 N D0加1 Y Y N

四 输入输出分配表 输 入 低压电器 PLC X 元件 输 出 低压电器 PLC Y 元件 清零按钮SQ X0 数码管显示 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 加按钮SB1 X1 减按钮SB2 X2 五 梯形图 六 指令表

七总结体会 这次课程设计是用PLC编程语言设计实现数码管显示。在老师布置题目的时候觉得我们这个题目简单,但是当真的去写的时候因为忘记一条指令,而不知道要怎么实现数码管显示的功能,在同学的相互配合下,我们完成了梯形图的绘制。 在梯形图的绘制过程中,每一个步骤都要认真。通过这次的课程设计,熟悉了PLC系统设计的流程、PLC编程软件,加深了对PLC 工作原理的理解,更加熟悉相关指令的编写方法,在实践中加深了对PLC编程的喜爱。仿真的过程是检验编程是否正确的方法。从开始的一无所知,到后来的慢慢熟悉,我感到很兴奋,明白只有全面的考虑问题才能做出系统而严谨的设计。 按照指导老师的要求,我们两个同学一组,我们相互配合,交流对题目的理解,对程序的分析,动手实践能力和团结协作能力都得到了提高。

实验四 数码管静态显示

实验四数码管静态显示 一、实验目的 1.熟练掌握单片机定时器的原理和应用方法。 2.了解数码管的原理,掌握数码管的真值表的计算方法。 二、实验内容 通过对单片机编程来实现数码管静态显示。 三、实验知识点 3.1定时器的初步认识 时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。 机器周期:我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。 定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。 顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。 3.2 定时器的寄存器描述 标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR,也就是特殊功能寄存器来控制。而和定时器有关的特殊功能寄存器,有TCON和TMOD,定时值存储寄存器。 a)定时值存储寄存器 表4-1中的寄存器,是存储计数器的计数值的,TH0/TL0用于T0, TH1/TL1用于 T1。 表4-1 定时值存储寄存器 表4-2 TCON--定时器/计数器控制寄存器的位分配(地址:88H) 表4-3 TCON--定时器/计数器控制寄存器的位描述

数码管显示实验报告

三、数码管显示实验 一、实验目的及要求 理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管J3641AS通过DP1668与CPU的接线图。 理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,CPU 的P2口接左、右两个DP1668的控制引脚,各DP1668接LED的数据线hgfedcba,在4 连排8段数码管显示编程的日期。 熟悉结构后,自行编程左边四个数码管,显示分钟和秒,当计时达到一个小时,就重新从00:00开始计时。另外,指定计时的开始值。 二、实验原理(图) 8段数码管一般由8个发光二极管(Llight-emitting diode,LED)组成,每一个位段就是一个发光二极管。一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。根据公共端所接电平的高低,可分为共阳极和共阴极两种。 三、实验设备(环境): 1、电脑一台 2、STC-ISP(V6.85I)烧写应用程序 3、Keil应用程序 四、实验内容(算法、程序、步骤和方法): #include //此文件中定义了STC15系列的一些特殊功能寄存器 #include"intrins.h" #define uchar unsigned char #define uint unsigned int

sbit TM1668R_DIO_H = P4^4; //左边数码管宏定义 sbit TM1668R_CLK_H = P2^0; sbit TM1668R_STB_H = P2^1; sbit TM1668L_DIO_H = P2^2; //左边数码管宏定义 sbit TM1668L_CLK_H = P2^3; sbit TM1668L_STB_H = P2^4; sbit LIGHT = P0^1; uchar Today_data[8]; uint temp,kk; const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void Send_Data(uchar dat,uchar n); void DIS_data_1668(uchar data1,uchar data2,uchar data3,uchar data4,uchar n); /****************************************************************************** * * 函数名: Send_Data * 函数功能: TM1668发送一字节数据函数 * 输入: 无 * 输出: 无 ******************************************************************************/ void Send_Data(uchar dat,uchar n) { uchar i; for(i = 0;i<8;i++) //1个字节 { if(n==0) TM1668R_CLK_H = 0; else TM1668L_CLK_H = 0; if(dat&(1<

数码管动态显示实验报告

实验四数码管动态显示实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码 管数据引脚相连,P2.0~P2.3引脚输出选控制信号 3.在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1.巩固Proteus软件和Keil软件的使用方法 2.学习端口输入输出的高级应用 3.掌握7段数码管的连接方式和动态显示法 4.掌握查表程序和延时等子程序的设计 三.实验说明 本实验是将单片机的P1口做为输出口,将四个数码管的七段引脚分别接到P1.0至P1.7。由于电路中采用共阳极的数码管,所以当P1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此存储类型可设为code。 在Proteus软件中按照要求画出电路,再利用Keil软件按需要实现的功能编写c程序,生成Hex文件,把Hex文件导到Proteus软件中进行仿真。为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89C51的一个机器周期包含12个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。 四、硬件原理图及程序设计 (一)硬件原理图设计 电路中P1.0到P1.7为数码管七段端口的控制口,排阻RP1阻值为220Ω,p2.0到p2.3为数码管的扫描信号。AT89c51单片机的9脚(RST)为复位引脚,当RST为高电平的时间达到2个机器周期时系统就会被复位;31引脚(EA)为存取外部存储器使能引脚,当EA为高电平是使用单片机内部存储器,当EA为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:

51单片机数码管显示电子时钟C程序

#include #define LEDLen 6 ; #define tick10000; #define T100us=(256-100); unsigned char hour,minute,second; unsigned int c100us; xdata unsigned char OUTBIT_at_0x8002; xdata unsigned char OUTSEG_at_0x8004; unsigned char LEDBuf[6]; code unsigned char LEDMAP[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; void DisplayLED() { unsigned char i,j,pos,LED; pos = 0x20 ; for( i=0;i<6;i++ ) { OUTBIT =0; LED=LEDBuf[i]; OUTSEG =LED; OUTBIT = pos; Delay(1); pos>>=1; } } void main() { TMOD=0x02; TH0=T100us; TL0=T100us; EA=1,IT0=1; hour=0; minute=0 second=0; c100us=tick; TR0=1; while(1) { LEDBuf[0]=LEDMAP[hour/10] ; LEDBuf[1]=LEDMAP[hour%10] ;

LEDBuf[2]=LEDMAP[minute/10]; LEDBuf[3]=LEDMAP[minute%10]; LEDBuf[4]=LEDMAP[second/10]; LEDBuf[5]=LEDMAP[second%10]; DISplayLED(); } } void T0_interrupt1 { c100us--; if(c100us==0) { c100us=tick; second++; if(second==60) { second=0; minute++; if(minute==60) { minute==0; hour++; if(hour==24)hour==0; } } } }

相关文档
最新文档