AT89C51单片机程序

合集下载

(完整word版)基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能

(完整word版)基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能

目录一、任务说明 (2)二、原理图绘制说明 (3)三、流程图绘制以及说明 (5)1显示程序设计 (5)2键盘识别程序设计 (6)3运算程序设计 (8)4风鸣器程序设计 (9)四、PROTEUS仿真说明 (10)五、课程设计体会 (15)附I:计算器电路原理图 (16)附II:源程序代码 (17)参考文献 (34)一、任务说明本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做P0口的上拉电阻,它可以实现结果低于65535的加、减、乘、除运算.采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0。

0—P0.7相连,P0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2。

7相连,P2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。

采用4*4键盘。

采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4—P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1。

0—P1。

3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。

这样循环执行。

基本功能如下:1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0",其余位全部不显示;2。

第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音,并且输入的第九个数不接收,仍然显示原来的八位数;3。

(完整)AT89C51单片机的概述

(完整)AT89C51单片机的概述

AT89C51单片机的概述(1)AT89C51单片机的结构AT89C51单片机是美国Atmel公司生产低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(EPROM)和128 bytes的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元,功能强大[3]。

AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。

上图为AT89C51单片机的基本组成功能方块图.由图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。

下面介绍几个主要部分。

外时钟源外部事件计数外中断控制并行口串行通信AT89C51 功能方块图(2)AT89C51的管脚说明ATMEL公司的AT89C51是一种高效微控制器.采用40引脚双列直插封装形式。

AT89C51单片机是高性能单片机,因为受引脚数目的限制,所以有不少引脚具有第二功能。

VCC:供电电压.GND:接地.P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高.P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故.在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写1时,其管脚被内部上拉电阻拉高,且作为输入。

AT89C51系列单片机介绍

AT89C51系列单片机介绍

3.1 AT89C51系列单片机介绍3.1.1 AT89C51系列基本组成及特性AT89C51是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

而在众多的51系列单片机中,要算 ATMEL 公司的AT89C51更实用,也是一种高效微控制器,因为它不但和8051指令、管脚完全兼容,而且其片内的4K程序存储器是FLASH工艺的,这种工艺的存储器,用户可以用电的方式达到瞬间擦除、改写。

而这种单片机对开发设备的要求很低,开发时间也大大缩短。

AT89C51基本功能描述如下:AT89C51是一种低损耗、高性能、CMOS八位微处理器,而且在其片种还有4k字节的在线可重复编程快擦快写程序存储器,能重复写入/擦除1000次,数据保存时间为十年。

它与MCS-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。

AT89C51可构成真正的单片机最小应用系统,缩小系统体积, 增加系统的可靠性,降低了系统成本。

只要程序长度小于4k, 四个I/O口全部提供给用户。

可用5V电压编程,而且写入时间仅10毫秒, 仅为8751/87C51 的擦除时间的百分之一,与8751/87C51的12V电压擦写相比, 不易损坏器件, 没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。

AT89C51 芯片提供三级程序存储器锁定加密,提供了方便灵活而可靠的硬加密手段, 能完全保证程序或系统不被仿制。

另外,AT89C51 还具有MCS-51系列单片机的所有优点。

128×8 位内部RAM, 32 位双向输入输出线, 两个十六位定时器/计时器, 5个中断源, 两级中断优先级, 一个全双工异步串行口及时钟发生器等。

AT89C51有间歇、掉电两种工作模式。

间歇模式是由软件来设置的, 当外围器件仍然处于工作状态时, CPU可根据工作情况适时地进入睡眠状态, 内部RAM和所有特殊的寄存器值将保持不变。

基于AT89C51单片机频率计的设计(含程序)

基于AT89C51单片机频率计的设计(含程序)

AT89C51单片机频率计的设计摘要基于在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。

由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。

因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。

频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。

随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。

频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。

目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。

为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89C51)相结合的频率计的设计方案,不但切实可行,而且体积小、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。

频率计的硬件电路是用Ptotues绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用汇编语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。

关键词:单片机;AT89C51;频率计;汇编语言选题的目的意义数字频率计的主要功能是测量周期信号的频率。

其基本原理就是用闸门计数的方式测量脉冲个数。

频率是单位时间( 1s )内信号发生周期变化的次数。

如果我们能在给定的 1s 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。

数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。

AT89C51单片机课程设计 抢答器设计

AT89C51单片机课程设计 抢答器设计

一.需求分析1.设计目的现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。

在本学期学习了单片机这门课之后,我们小组成员觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。

我们最终做出一种数字式抢答器的设计方案,通过Proteus设计完成,利用WAVE6000软件编辑程序,仿真验证,适用于多种竞赛场合。

2.设计要求设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足(1)能容许2-6组进行抢答。

(2)能显示抢答组号。

(3)各组记分,并能记分显示。

(4)比赛结束时,能发出报警声。

二.设计方案在设计中采用的单片机是AT89C51,它主要负责控制各个部分协调工作。

P1.0和P1.7由裁判控制,分别是抢答开始和停止键。

P1.1—P1.6是6组抢答的输入口,按下对应按钮即为抢答。

P0口为数码管的段选口,位选口用的是P2口的低4位,外部中断0。

外部中断1,P3.3用于控制有组答题完成后结束计时。

P3.4—P3.5分别实现了分数的加一和减一。

P3.6为蜂鸣器的控制口。

外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。

外部还接有蜂鸣器用来发出报警音。

采用7SEG-MPX4-CC-BLUE显示,它是共阴极的由高电平点亮。

系统仿真用到了WAVE6000和Proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。

三.硬件设计1.电路原理图图3.1 电路原理图2.总体设计电路图整个系统分为:外部振荡电路、复位电路、加减分电路及蜂鸣器报警电路、抢答电路及裁判控制开始停止电路、数码管显示电路几个部分本设计的核心是单片机AT89C51。

AT89C51 提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

AT89C51单片机控制步进电机

AT89C51单片机控制步进电机

摘要步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于8051单片机的四相步进电机的开环控制系统。

控制系统通过单片机存储器、I/O接口、中断、键盘、LED显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,急停等功能。

为实现单片机控制步进电机系统在数控机床上的应用,系统设计了两个外部中断,以实现步进电机在某段时间内的反复正反转功能,也即数控机床的刀架自动进给运动,随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。

人们用它来驱动时钟和其他采用指针的仪器,打印机、绘图仪,磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等机械装置。

此外作为执行元件,步进电机是机电一体化的关键产品之一,被广泛应用在各种自动化控制系统中,随着微电子和计算机技术的发展,它的需要量与日俱增,在各个国民经济领域都有应用。

步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用大规模集成电路的发展以及单片机技术的迅速普及,为设计功能强,价格低的步进电机控制驱动器提供了先进的技术和充足的资源。

关键词:步进电机;单片机;精度高;体积小;控制方便。

目录设计要求 (2)1.1设计要求 (2)1.2验收标准 (2)步进电机原理及硬件和软件设计 (2)2.1步进电机工作方式 (2)2.2 总体设计方框图 (5)2.3 设计原理分析 (6)2.3.1元器件介绍:步进电机 (6)2.3.2方案论证 (7)2.3.3硬件设计 (8)2.3.4元件清单 (12)2.3.5 软件设计 (13)总结 (19)致谢 (19)参考文献 (20)附录 (21)设计要求1.1设计要求(1)最小系统:选择AT89C51单片机为核心元件构成系统。

AT89C51单片机最小化系统

AT89C51单片机最小化系统

AT89C51单片机最小化系统目录1引言.......................................................................................1 2总设计方案 (1)2.1 设计思路 (1)2.2 单片机介绍 (1)2.3 电动车介绍 (1)2.4 方案论证 (1)2.5 设计框图.....................................................................13设计原理 (2)3. 1硬件设计 (2)3.1.1最小系统 (2)3.1.2控制电路 (3)3.1.3驱动电路 (3)3.1.4显示电路 (4)3.2保护电路 (4)3. 2. 1 过流、欠压保护电路 (4)3. 2(2 刹车保护 (5)3.2.3低压指示灯 (5)3.3 软件设计 (5)3.3.1主程序设计………………………………………………6 4结束语…………………………………………………………………6 参考文献……………………………………………………………………7 附录1.......................................................................................8 附录2 (9)基于单片机控制的电动车控制器摘要:电动车成为人类生活中越来越重要的交通工具。

电动车控制器主要有单片机、ADC0809、霍尔传感器、74LS164等组成。

通过单片机控制电动车,使电动机转速发生变化达到对电动车的控制的目的。

该设计具有结构简单、性能可靠使用方便、可实现较复杂的控制、具有防飞车保护和低压保护等重要的功能。

关键词:电动车单片机 ADC0809 A44E1 引言单片机的出现给人类生活带来加大方便,使控制系统简单化。

本设计主要是设计一个由单片机控制的电动车控制系统,操作者可通过单片机系统控制电动车的转速,其旋转速度和当前电量可以在数码管上显示出来。

AT89C51单片机说明

AT89C51单片机说明

EA A8H AF
ET2 ES
ET1 EX1 ET0 EX0
AD AC AB AA A9 A8 IE
A0H A7 A6 A5 A4 A3 A2 A1 A0 P2
SM0 SM1 SM2 REN TB8 RB8 TI
RI
98H 9F 9E 9D 9C 9B 9A 99 98 SCON
90H 97 96 95 94 93 92 91 90 P1
工作寄存器组3 18H
17H 工作寄存器组2
10H
0FH 工作寄存器组1
08H
07H 工作寄存器组0
00H
图 2-4 内部低 128 个字节地址 RAM 空间
第 3 页 共 9页
附录
AT89C51 单片机说明
寄存器符号 ACC B PSW SP
DPTR
P0 P1 P2 P3 IP IE TMOD TCON TH0 TL0 TH1 TL1 SCON SBUF PCON
IP 中断优先次序寄存器
位地址 - - BD BC BB BA B9 B8
符号
- - PT2 PS PT1 PX1 PT0 PX0
-(IP.7) :保留位,无定义。 -(IP.6) :保留位,无定义。 PT2(IP.5) :设定计时器 2 的优先次序(8052 使用)。 PS(IP.4) :设定串行端口的中断优先次序。 PT1(IP.3) :设定时/计时器 1 的优先次序。 PX1(IP.2) :设定外部中断 INT1 的优先次序。 PT0(IP.1) :设定计时器 0 的优先次序。 PX0(IP.0) :设定外部中断 INT0 的优先次序。
(60KB)
0FFFFH
1000H
外部 程序 存储器

用单片机AT89C51设计一个2位的LED数码显示作为“秒表”—单片机课程设计

用单片机AT89C51设计一个2位的LED数码显示作为“秒表”—单片机课程设计

目录一、设计题目和要求: (2)二、设计目的: (2)三、设计内容: (3)四、课程设计心得体会 (25)五、参考文献 (26)六、课程设计指导教师评审标准及成绩评定 (27)附件1:秒表原理图(实际接线图) (28)附件2:仿真图1 (30)附件3:仿真图2 (31)一、设计题目和要求:题目三:秒表应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时。

设计一个“复位”键,按下“复位”键后,秒表从0开始计时。

任务安排:李座负责绘制电路原理图;梁宗林负责收集资料及电子版整理;付忠林负责程序和仿真。

二、设计目的:1.进一步掌握AT89C51单片机的结构和工作原理;2.掌握单片机的接口技术及外围芯片的工作原理及控制方法;3.进一步掌握单片机程序编写及程序调试过程,掌握模块化程序设计方法;4.掌握PROTEUS仿真软件的使用方法;5.掌握LED数码管原理及使用方法。

6.掌握定时器、外部中断的设置和编程原理。

7.通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

8.该课程设计通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、复位功能,并同时可以用数码管显示。

三、设计内容:了解8051芯片的的工作原理和工作方式,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、清零功能,精确到1秒。

AT89C51单片机的主要工作特性:·内含4KB的FLASH存储器,擦写次数1000次;·内含28字节的RAM;·具有32根可编程I/O线;·具有2个16位可编程定时器;·具有6个中断源、5个中断矢量、2级优先权的中断结构;·具有1个全双工的可编程串行通信接口;·具有一个数据指针DPTR;·两种低功耗工作模式,即空闲模式和掉电模式;·具有可编程的3级程序锁定定位;AT89C51的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz.AT89C51各部分的组成及功能:振荡器和时钟电路数据存储器128字节程序存储器14KBCPU 两个16位定时器计数器中断控制总线扩展控制器并行可编程I/O口可编程串行口内部总线外部中断扩展控制P0 P1 P2 P3 RXD TXD1.单片机的中央处理器(CPU )是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。

单片机AT89C51简介

单片机AT89C51简介
单片机原理及应用回目录上一页下一页结束21at89c51单片机的结构时序和振荡电路时序和振荡电路程序存储器程序存储器rom数据存储器ram2个16位定时计数器cpu内部8位数据总线中断系统中断系统并行io口并行io口串行io口串行io口内部中断外部中断p0p1p2p3rxdtxd时钟源外部事件图21at89c51单片机内部结构框图单片机原理及应用回目录上一页下一页结束ram128bram地址寄存器p3口p1口p2口p0口锁存器锁存器锁存器锁存器中断定时计数器串行口中断定时计数器串行口spbbacc暂存器1暂存器2psw指令寄存器ir指令译码器iddpl缓冲器程序计数器pcpc增量器地址寄存器ar定时与控制4krom4kromaludph器运算器运算器器控制器控制器器存储器存储器io接口图22at89c51单片机的内部结构示意单片机原理及应用回目录上一页下一页结束211中央处理器cpucpu是单片机内部的核心部件是一个8位二进制数的中央处理单元主要由cpu是单片机内部的核心部件是一个8位二进制数的中央处理单元主要由运算器控制器和寄存器阵列构成
回目录 上一页 下一页 结 束
11
单片机原理及应用
温故知新检测
8号题
单片机CPU运算器的核心 部件是什么? 其主要功能有哪些?
回目录 上一页 下一页 结 束
12
单片机原理及应用
温故知新检测
9号题
AT89C51单片机内部 有多少字节的RAM和 FlashROM?
回目录 上一页 下一页 结 束
13
单片机原理及应用
P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 RST 9 (RXD)P3.0 10 (TXD)P3.1 11 (TNT0)P3.2 12 (TNT1)P3.3 13 (T0)P3.4 14 (T1)P3.5 15 (WR)P3.6 16 (RD)P3.7 17 XTAL2 18 XTAL1 19 GND 20

AT89C51单片机的P2口控制

AT89C51单片机的P2口控制

用AT89‎C51单片‎机的P2口‎控制8个L‎e d的流水‎灯的C程序‎看不懂?‎悬赏分:‎80 - ‎解决时间:‎2009-‎4-1 2‎3:55 ‎用AT8‎9C51单‎片机的P2‎口控制8个‎L ed的流‎水灯的C程‎序看不懂?‎从P2-‎0到P2-‎7灯依次单‎独点亮后,‎又从P2-‎7到P2-‎0灯依次单‎独点亮如‎此反复循环‎,程序如下‎(低电平被‎点亮):‎#incl‎u de <‎R EGX5‎2.H>‎v oid ‎D elay‎1ms(u‎n sign‎e d in‎t cou‎n t){‎uns‎i gned‎int ‎i,j;‎for(‎i=0;i‎<coun‎t;i++‎)fo‎r(j=0‎;j<12‎0;j++‎);}‎main‎(){‎ un‎s igne‎d cha‎r LED‎I ndex‎= 0;‎b‎i t LE‎D Dire‎c tion‎= 1;‎w‎h ile(‎1)‎{‎ if(‎L EDDi‎r ecti‎o n)‎ P‎2 = ~‎(0x01‎<<LED‎I ndex‎);‎ els‎e‎ P2 ‎= ~(0‎x80>>‎L EDIn‎d ex);‎‎if(L‎E DInd‎e x==7‎)‎ LED‎D irec‎t ion ‎= !LE‎D Dire‎c tion‎;‎LEDI‎n dex ‎= (LE‎D Inde‎x+1)%‎8;‎ Del‎a y1ms‎(500)‎;‎}‎ }‎我这程序我‎真的看不懂‎,这个b‎i t LE‎D Dire‎c tion‎= 1;‎是什么意思‎?从主函‎数开始,麻‎烦高手帮我‎解释每一句‎的意思以及‎它有用途?‎越详细越‎好!在下‎在此先谢谢‎了!‎提问者:‎t wp16‎89916‎8 - 二‎级最佳答案‎#incl‎u de <‎R EGX5‎2.H> ‎void‎Dela‎y1ms(‎u nsig‎n ed i‎n t co‎u nt) ‎/*延时函‎数,延迟时‎间为cou‎n t×1m‎s)*/ ‎{un‎s igne‎d int‎i,j;‎for‎(i=0;‎i<cou‎n t;i+‎+)f‎o r(j=‎0;j<1‎20;j+‎+);‎}m‎a in()‎{‎u nsig‎n ed c‎h ar L‎E DInd‎e x = ‎0; /*‎声明8位变‎量LEDI‎n dex,‎用来指示8‎个LED中‎哪个被点亮‎,初始值为‎00000‎000*/‎bit ‎L EDDi‎r ecti‎o n = ‎1; /*‎声明位变量‎L EDDi‎r ecti‎o n,用来‎指示点亮的‎方向,初始‎值为1*/‎whil‎e(1) ‎/*一直循‎环执行大括‎号里面的语‎句*/{‎if(‎L EDDi‎r ecti‎o n) /‎*当LED‎D irec‎t ion=‎1时,00‎00 00‎01左移L‎E DInd‎e x位,取‎反后送给P‎2端口,点‎亮一个LE‎D*/P‎2 = ~‎(0x01‎<<LED‎I ndex‎);e‎l se /‎*当LED‎D irec‎t ion=‎0时,10‎00 00‎00右移L‎E DInd‎e x位,取‎反后送给P‎2端口,点‎亮一个LE‎D*/‎P2 = ‎~(0x8‎0>>LE‎D Inde‎x);‎i f(LE‎D Inde‎x==7)‎/*当一‎次循环结束‎时,把LE‎D Dire‎c tion‎取反,下次‎循环时将以‎相反的顺序‎点亮*/‎L EDDi‎r ecti‎o n = ‎!LEDD‎i rect‎i on; ‎LEDI‎n dex ‎= (LE‎D Inde‎x+1)%‎8; /*‎L EDIn‎d ex+1‎对8取余,‎保证LED‎I ndex‎在0~7之‎间*/D‎e lay1‎m s(50‎0); /‎*延时50‎0ms,即‎L ED的点‎亮间隔为0‎.5s*/‎}}‎2‎2回答者:‎紫翅z‎h idao‎- 四级‎ 20‎09-3-‎23 12‎:20‎我来评论‎>>提‎问者对于答‎案的评价:‎谢谢一楼的‎回答,三楼‎回答好一点‎,谢谢!‎相关内容‎?求:‎单片机控制‎双色LED‎灯流水亮起‎的程序‎1 20‎10-1-‎9‎流水灯‎利用单片机‎的P1口控‎制LED的‎发光闪烁,‎在利用编程‎实现模拟广‎告灯2‎009-1‎1-8‎?怎样‎让单片机在‎P1.和P‎2口同时控‎制两个不同‎花样的流水‎灯呢? ‎2009-‎6-29 ‎基‎于at89‎c51单片‎机的led‎彩灯控制器‎管内LED‎板模块硬件‎图中的芯片‎C D407‎6在电路中‎有何作用?‎ 5 ‎2009-‎5-23 ‎用‎P rotu‎e s软件实‎现AT89‎C51单片‎机控制的跑‎马灯的仿真‎,8个LE‎D实现左移‎和右移。

at89c51led闪烁实验汇编语言

at89c51led闪烁实验汇编语言

at89c51led闪烁实验汇编语言1. 简介at89c51是一种经典的单片机芯片,被广泛应用于各种嵌入式系统中。

其中,led闪烁实验是单片机入门的必备实验之一,通过这个实验可以初步了解单片机的基本工作原理和汇编语言的编程方法。

2. 实验原理在at89c51单片机中,led是一种常用的输出设备,可以通过控制引脚的高低电平来实现闪烁效果。

通过学习汇编语言的编程方法,我们可以编写程序控制led引脚的状态,从而实现led的闪烁操作。

3. 实验步骤第一步:搭建硬件实验评台,将at89c51单片机与led灯连接。

第二步:编写汇编语言程序,通过设置端口的高低电平来实现led的闪烁效果。

第三步:将编写好的程序下载到at89c51单片机中,进行调试和验证。

4. 实验代码下面是一个简单的at89c51led闪烁实验的汇编语言程序:```assemblyorg 0h ; 程序从位置区域0开始执行mov P1, #0FFh ; 设置P1端口为输出loop:mov P1, #00h ; 将P1端口输出低电平acall delay ; 调用延时程序mov P1, #0FFh ; 将P1端口输出高电平acall delay ; 调用延时程序sjmp loop ; 无条件跳转至loop标号处delay:mov R1, #0Ah ; 设置延时计数值delay1:mov R2, #0FFh ; 设置内部计数值delay2:djnz R2, delay2 ; 内部计数减1djnz R1, delay1 ; 延时计数减1ret ; 返回end ; 程序结束```在这个程序中,我们首先设置P1端口为输出,并在一个循环中不断地将P1端口输出高低电平,通过调用延时程序来实现led的闪烁效果。

5. 实验总结通过这个实验,我们初步了解了at89c51单片机的基本工作原理和汇编语言的编程方法。

在以后的学习中,我们可以通过不断地深入实践和学习,掌握更多单片机和汇编语言的知识,从而实现更加复杂的功能和应用。

AT89C51实验报告

AT89C51实验报告

实验一MCS-51指令系统实验一一数据排序一、实验目的熟悉MCS-51指令系统,掌握程序设计方法:加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试:熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。

二、实验内容将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM以8000H开始的地址单元内。

三、实验说明有序的数列更有利于查找。

本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。

再进行下一轮比较,找出第二大数据,直到全部数据有序。

四、程序流程图五、调试程序:第一步:将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM40H〜49H单元中。

ORG OOOOHLJMP S7ART1ORG0030HSTART1: MOV R0,#40H;设置RO为内部RAM首地址MOV R1,#10;设出为计数器MOV DPTR,#TAB1L00P1: CLR A;累加器清零MOVC A,A+DPTR;外部数据送累加器A中MOV RO,A;送内部RAMINC RO;调整内部RAM指针,指向下一个数据INC DPTR;调整外部RAM指针DJNZ R1,L00P1;未完继续:第二步:排序.把片内RAM40H 〜49H 单元中的10个无符号数逐一比较,并按从小到大的顺序依次 排列在这片单元中•:第三步:将内部数据RAM 中40H 〜49H 单元的内容传送到外部数据存储器以8000H 开始的连续单元 中去。

需传送10次数据•将RI 作为循环计数器。

具体程序如下。

START3: MOV R0,#40HMOV DPTR,#8000HMOV R1,#10LOOP: MOV A,ROMOVX DPTR,AINC ROINC DPTRDJNZ R1,L00PSJMP$ TAB1: DB 09H,04H,02H,08H,00H ;数 0・9 表DB 00H,06H,07H,07H,0FH END六、收获与体会第一次用汇编语言在伟福6000环境下运行,感觉和VC6.0稍有不同,伟福6000调试界而非常丰 富,有片内RAM一一DATE :片外RAM ——XDATE :代码寄存器——CODE ;特殊功能寄存器——SFR ; 并且可以单步调试,自己所编的程序一目了然:伟福6000果然是好东西;冒泡法存在的不足及改进方法:START2: CLR F0MOV R3,#9MOV R0,#40HMOV A, ROL2: INC ROMOV R2,ASUBB A,ROMOV A,R2JC L1SETB F0XCH A,RODEC ROXCH A, ROINC ROL1: MOV A, RODJNZ R3,L2 JBF0,START2;清除交换标志位FO ;10个数据循环次数 ;数据存放区首址 ;取前数 ;保存前数 ;前数减后数 ;恢复前数 ;顺序则继续比较 ;逆序则建立标志位 ;前数与后数交换 ;指向前数单元 ;仍指向后数单元 ;取下一个数 ;依次重复比较 ;交换后重新比较:40H 〜49H 共计10个单元,;设置RO 为内部RAM 首地址 ;设置外部RAM 首地址 ;设Rl 为计数器 ;取内部RAM 数 ;送外部RAM ;调整内部RAM 指针,指向下一个数据 ;调整外部RAM 指针 ;未完继续;暂停第一,在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志单元flag,将其设置为OFF,表示被排序的表示是一个无序的表。

基于AT89C51单片机八位抢答器的设计

基于AT89C51单片机八位抢答器的设计

基于AT89C51单片机八位抢答器的设计一、本文概述随着电子技术的不断发展,单片机作为微型计算机的重要分支,已广泛应用于各种智能控制系统中。

AT89C51作为一款经典的8位单片机,以其高性能、低功耗、易编程等特点,在嵌入式系统设计中占据了重要地位。

本文旨在探讨基于AT89C51单片机的八位抢答器设计,通过分析其硬件组成、软件设计以及工作原理,为相关领域的开发人员提供一种实用的设计方案。

本文首先介绍了抢答器的应用场景和基本要求,随后详细阐述了AT89C51单片机的核心特性及其在系统中的作用。

接着,文章将重点介绍抢答器的硬件电路设计,包括按键输入电路、显示电路、声音提示电路等关键模块。

在软件设计方面,文章将给出抢答器程序的主要流程,包括按键扫描、状态判断、结果显示等功能模块的实现方法。

文章还将对抢答器的性能进行测试和分析,以确保其在实际应用中的稳定性和可靠性。

通过本文的研究,读者可以深入了解基于AT89C51单片机的八位抢答器的设计过程,掌握相关电子技术和编程技巧,为未来的嵌入式系统开发打下坚实基础。

本文的研究成果也可为类似系统的设计提供有益的参考和借鉴。

二、AT89C51单片机简介AT89C51是Atmel公司生产的一款低功耗、高性能的8位CMOS微控制器,它采用了Atmel公司的高密度、非易失性存储技术,并且与工业标准的8051指令集和输出管脚相兼容。

AT89C51单片机内部集成了4KB的可编程Flash闪烁存储器,这为用户提供了足够大的空间进行程序编写和存储。

它还拥有128字节的内部RAM、32个可编程的I/O口线、两个16位定时/计数器、一个5向量两级中断结构、一个全双工串行通信口、以及片内振荡器和时钟电路。

AT89C51单片机具有低功耗的空闲模式和掉电模式,使其在便携式产品和电池供电的应用中具有显著的优势。

其强大的功能集和灵活的编程能力使得AT89C51单片机在各种控制系统中得到了广泛的应用,包括抢答器设计、智能家居、工业自动化、医疗设备、安全系统等。

AT89C51单片机编程

AT89C51单片机编程

{ while ((p34&&p35) ! = 0); delay( ); if ((p34&p35) != 0 ) continue; else break; }
/* 下列语句分析被按下的键所在的列号 */ mask = 0xfe; while (1)
{ TI = 0; SBUF = mask; while(TI = = 0); if((p34&&p35) ! = 0)
7.5.2

模块设计原则
若我们把复杂的问题分解成许多容易解决的小问题,复 杂的问题也就容易解决了。但是如果只是简单地分解任务, 不注意对一些子任务的归纳与抽象,不注意模块之间的关系, 往往会使模块数太多,模块之间的关系变得复杂,从而使程 序的调试、修改变得更加复杂。一般说来,模块设计应该遵 从以下几条原则: (1)模块独立 模块的独立性原则应保证模块完成独立的功能,模块与 模块之间关系简单,修改某一模块,不会造成整个程序的混 乱。保证模块的独立性应注意以下几点: ①每个模块完成一个相对独立的特定功能。在对任务分 解时,要注意对问题的综合。 ②模块之间的关系力求简单。例如:模块之间最好只通 过数据传递发生联系,而不发生控制关系。 C 语言中禁止 goto语句作用到另一函数,就是为了保证函数的独立性。
带寄存器参数的函数名加入“ _” 字符前缀,表明这类 函数包含寄存器的参数传递 对于重入函数加上“_?”字符串前缀,表明这类函数包 含栈内的参数传递
void func(void)
_FUNC
void func(void) reentrant
_?FUNC
例2 用汇编语言编写函数"toupper",参数传递发生在寄存器R7中。

AT89C51单片机开发板程序

AT89C51单片机开发板程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define mima 3
#define duanma P1
sbit weima=P3^0。
sbit redled=P0^5。
sbit greenled=P0^6。
void delay(uint z>。
void main(>
{
uchar b,c。
c=5。
while(1>
{
P0|=0x0f。
b=P0。
b&=0x0f。
if(b!=0x0f>
{
delay(20>。
P0|=0x0f。
b=P0。
b&=0x0f。
if(b!=0x0f>
{
switch(b>
{
case 0x0e:c=1。break。
TMOD|=0x01。
TH0=(65536-10000>/256。
TL0=(65536-10000>%256。
EA=1。
ET0=1。
TR0=1。
while(1>
{
}
}
void timer0(> interrupt 1
{
TH0=(65536-10000>/256。
TL0=(65536-10000>%256。
uchar tt,i,sec,min。
uchar xianshi[4]。
void delay(uint z>。
void init(>。
void main(>

基于AT89C51单片机音乐盒设计(含程序设计)(word文档良心出品)

基于AT89C51单片机音乐盒设计(含程序设计)(word文档良心出品)

1前 言乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。

实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA 集成度的提高,价格下降,EDA 设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。

如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。

使用现今的EDA 软件工具来应付这些问题,并不是一件简单的事情。

FPGA 预装了很多已构造好的参数化库单元LPM 器件。

通过EDA 软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。

本文介绍在EDA 开发平台上利用单片机及汇编语言设计音乐硬件演奏电路,并定制单片机存储音乐数据,以十首乐曲为例,将音乐数据存储到单片机,就达到了以纯硬件的手段来实现乐曲的演奏效果。

只要修改单片机所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新连接到程序中就可以实现其它乐曲的演奏。

目录摘要 (4)第1章概述 (5)第2章音乐盒的发音原理 (6)2.1 播放音乐的原理 (6)2.2 音符频率的产生 (6)2.3 节拍频率的产生 (8)第3章硬件电路设计 (9)3.1 硬件电路 (9)3.2 整体硬件电路 (10)3.3 原理说明 (11)22.4 键盘按键 (11)第4章软件设计 (12)4.1 程序设计流程 (12)4.2 设计源程序代码 (12)第5章仿真及调试 (13)5.1 调试 (13)5.2 仿真 (13)5.3 程序调试中出现的问题及解决的办法 (15)第6章设计小结及建议 (17)致谢 (18)参考文献 (19)附录一元器件清单 (20)附录二部分源程序代码 (21)3基于AT89C51单片机的音乐盒的设计【摘要】:随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。

AT89C51单片机

AT89C51单片机

AT89C51单⽚机⽬录第1章绪论 (1)1.1课题背景 (2)1.2 ⾳乐喷泉的发展和现状 (2)第2章⾳乐喷泉控制系统硬件设计 (3)2.1 控制系统硬件总体设计⽅案 (3)2.2⾳乐信号的采集 (3)2.2.1 ⾳频放⼤电路的设计 (3)2.2.2 采样定理 (5)2.3 单⽚机电路 (6)2.3.1 单⽚机的概述 (6)2.3.2 时钟电路的设计 (7)2.4 AD转换电路 (7)2.4.1 ADC0809与单⽚机89C51的连接 (8) 2.4.2输⼊电路 (9)2.5潜⽔泵调速硬件⽅案设计 (9)2.6灯光硬件⽅案设计 (10)2.7解决系统时间滞后硬件电路设计 (11)第3章喷泉控制系统软件设计 (11)3.1喷池数据 (12)3.2主程序框图 (13)3.3 控制潜⽔泵软件设计模块 (13)3.3.1 潜⽔泵开关调速的原理 (14)3.3.2潜⽔泵开关调速的软件设计 (15) 3.4控制电磁阀软件设计模块 (16)3.5 歌曲存储模块 (16)3.5.1⾳频脉冲的产⽣ (16)3.5.2⾳乐程序 (18)3.6灯光控制模块 (21)3.7看门狗⼦程序 (21)3.8实验仿真 (22)结论 (23)致谢 (23)参考⽂献 (24)附录 (25)附录1 (25)附录2 (26)第1章绪论1.1课题背景喷泉原是⼀种⾃然景观,是承压⽔的地⾯露头。

园林中的喷泉,⼀般是为了造景的需要,⼈⼯建造的具有装饰性的喷⽔装置。

喷泉可以湿润周围空⽓,减少尘埃,降低⽓温。

喷泉的细⼩⽔珠同空⽓分⼦撞击,能产⽣⼤量的负氧离⼦。

因此,喷泉有益于改善城市⾯貌和增进居民⾝⼼健康。

喷泉的原理是个动量守恒,从⼤半径管道到⼩半径管道,产⽣⼀个速度的变化,冲向背离地⾯的⽅向。

⼤半径的速度由泵带动,⼩半径中的速度是原来速度,与动量转化速度。

需要选择⼀个微元计算动量守恒,这样能求出⼀个速度,这个速度是出⼝速度,然后就是⼀个上抛运动了,这个是理想的情况,没有摩擦,没有风1.2 ⾳乐喷泉的发展和现状北京⽯景⼭古城公园的⾳乐喷泉,在悠扬动听的⾳乐声中,喷⽔可产⽣五六种变化,时⽽转动如银伞,时⽽飘忽如⽟带,时⽽如⾦蛇狂舞,时⽽旋转飞溅···喷出的花形有昙花、菊花、扶桑花、百合花和曼陀罗花,这是在80年代初期中国较早建设的⼀个⾳乐喷泉。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
ch451_write(display[0]+0);
}
}
else if(!stop_flag)
{
ch451_write(display[0]+BCD[miaoge]);
}
}
void key_Recognize()
{
switch(ch451_key)
//beep=~beep;
miaoge++;
}
}
else if(stop_flag)
{
timecount=0;
ss_flag=~ss_flag;
}
}
}
void ch451_inter() interrupt 3
{
#include<reg52.h>
#include"ch451.h"
sbit beep=P2^6;
uchar timecount=0;
uint count;
extern uchar shishi,shige,fenshi,fenge,miaoshi,miaoge;
extern bit stop_flag,ss_flag;
num=1;
}break;
case 0x49: delay(65000);
num--;
if(num<1)
{
num=6;
}
break;
case 0x43:delay(65000);
//*****************************************************
//定义一无符号整型变量存储12字节的命令字。
void ch451_write(uint command)
{
uchar i;
TR1=0;
ch451_load=0; //命令开始
{
ch451_write(display[1]+BCD[miaoshi]);
}
else if((num==2)&&(ss_flag==1))
{
ch451_write(display[1]+0);
}
Hale Waihona Puke } else if(!stop_flag)
{
ch451_write(display[1]+BCD[miaoshi]);
}
//ch451_write(display[1]+BCD[shige]|0x01);
if(stop_flag)
{
if((num!=4)||(ss_flag==0))
{
ch451_write(display[4]+BCD[fenshi]);
}
else if((num==4)&&(ss_flag==1))
ch451_write(CH451_TWINKLE); //设置闪烁控制——正常显示
ch451_init();
timer0count_init();
while(1)
{
key_Recognize();
time_dispose();
smg_Display();
{
miaoshi++;
}break;
case 3:if(fenge<9)
{
fenge++;
if(stop_flag)
{
if((num!=6)||(ss_flag==0))
{
ch451_write(display[7]+BCD[shishi]);
}
else if((num==6)&&(ss_flag==1))
{
ch451_write(display[7]+0);
Get_keyValue();
TL1=1; //装载计数初值
TH1=200;
}
#include"ch451.h"
#include<reg52.h>
sbit ch451_dclk=P3^4; //串行数据时钟上升延激活
if(stop_flag)
{
switch(num)
{
case 1:if(miaoge<9)
{
miaoge++;
}break;
case 2:if(miaoshi<5)
}
}
else if(!stop_flag)
{
ch451_write(display[7]+BCD[shishi]);
}
//ch451_write(display[0]+BCD[shishi]);
if(stop_flag)
{
if((num!=5)||(ss_flag==0))
PT1=0; //设置低优先级
TL1=1; //装载计数初值
TH1=200; //此计数初值用来调试
}
void timer0count_init()
{
ET0=1;
TR0=1;
TH0=0x08;
TL0=0x00;
}
}
else if(!stop_flag)
{
ch451_write(display[3]+BCD[fenge]);
}
//ch451_write(display[3]+BCD[fenge]|0x01);
if(stop_flag)
{
if((num!=2)||(ss_flag==0))
}
//ch451_write(display[4]+BCD[miaoshi]);
if(stop_flag)
{
if((num!=1)||(ss_flag==0))
{
ch451_write(display[0]+BCD[miaoge]);
}
else if((num==1)&&(ss_flag==1))
uchar shishi,shige,fenshi,fenge,miaoshi,miaoge;
bit stop_flag=0,ss_flag=0;
uchar num=1;
void delay(uint i)
{
while(--i);
}
void time_dispose()
{
if(miaoge>9)
{
case 0x40:delay(65000);num=1;stop_flag=~stop_flag;
break;
case 0x48: delay(65000);
num++;
if(num>6)
{
shige++;
if(shige>4)
{
shige=0;
shishi++;
if(shishi>2)
{
shishi=0;
}
}
}
}
}
}
}
void ch451_init()
}
ch451_load=1; //上升沿加载数据
TR1=1;
}
void smg_Display()
{
ch451_write(display[2]+0x40);
ch451_write(display[5]+0x40);
for(i=0;i<12;i++)
{ //送入12位数据,低位在前
ch451_din=command&1;
ch451_dclk=0;
command>>=1;
ch451_dclk=1; //上升沿有效
{
ch451_write(display[6]+BCD[shige]);
}
else if((num==5)&&(ss_flag==1))
{
ch451_write(display[6]+0);
}
}
else if(!stop_flag)
{
ch451_write(display[6]+BCD[shige]);
{
miaoge=0;
miaoshi++;
if(miaoshi>5)
{
miaoshi=0;
fenge++;
if(fenge>9)
{
fenge=0;
fenshi++;
if(fenshi>5)
{
fenshi=0;
sbit ch451_din=P3^3; // 串行数据输出,接CH451的数据输人
sbit ch451_load=P2^3; //串行命令加载,上升延激活
sbit ch451_dout=P2^2; //键值数据输入,接ch451数据输入
{
ch451_din=0; //先低后高,选择4线输入
ch451_din=1;
TMOD=0x11; //设置定时器T1工作在16位计时状态
EA=1; //开中断总开关
相关文档
最新文档