AT89C51单片机开发板程序
at89c51单片机_交通灯控制系统(含源码及仿真图).
![at89c51单片机_交通灯控制系统(含源码及仿真图).](https://img.taocdn.com/s3/m/9225071eccbff121dd3683bb.png)
模拟交通灯设计报告题目交通信号灯控制系统团队研发区第二组完成时间2011-11-31贵州民族学院开放实验室`目录一、项目名称 (1)二、选题背景 (1)2.1 课题背景 (1)2.2 交通灯的历史 (1)三、单片机简介 (2)3.1 单片机的发展历程 (2)3.2 单片机的特点: (3)3.3 AT89C52单片机简介 (4)四、设计基本要求和步骤 (5)4.1 基本要求 (5)4.2 设计步骤 (6)五、硬件和软件设计 (6)5.1 硬件电路图 (6)5.2 程序流程图 (8)主程序 (8)运行过程 (9)LED显示程序 (10)T0中断 (11)INT0中断 (11)5.3 P0、P1口显示状态编码表 (12)5.4 程序源代码 (12)5.5 程序运行效果图 (21)六、心得体会 (22)七、参考文献................................................................................. 错误!未定义书签。
模拟交通灯设计报告一、项目名称十字路口交通信号灯控制系统二、选题背景2.1 课题背景由于我国经济的快速发展从而导致了汽车数量的猛增,大中型城市的城市交通,正面临着严峻的考验,从而导致交通问题日益严重,其主要表现如下:交通事故频发,对人类生命安全造成极大威胁;交通拥堵严重,导致出行时间增加,能源消耗加大;空气污染和噪声污染程度日益加深等。
日常的交通堵塞成为人们司空见惯而又不得不忍受的问题,在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主要任务。
随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。
2.2 交通灯的历史1868年12月10日,信号灯家族的第一个成员就在伦敦议会大厦的广场上诞生了,由当时英国机械师德·哈特设计、制造的灯柱高7米,身上挂着一盏红、绿两色的提灯--煤气交通信号灯,这是城市街道的第一盏信号灯。
AT89C51单片机说明
![AT89C51单片机说明](https://img.taocdn.com/s3/m/2898c924ccbff121dd36833b.png)
PSEN 此为"Program Store Enable"的缩写。访问外部程序存储器选通信号,低电平有效。在访
(60KB)
0FFFFH
1000H
外部 程序 存储器
0FFFH
EA=0 (4KB)
0000H
0FFFFH
外 部 数 据 存 储 器
(64KB)
0000H
图 2-2 只读程序存储器
图 2-3 外部数据存储器
直接地址
2FH 7F 7E 7D 7C 7B 7A 79 78 2EH 77 76 75 74 73 72 71 70 2DH 6F 6E 6D 6C 6B 6A 69 68 2CH 67 66 65 64 63 62 61 60 2BH 5F 5E 5D 5C 5B 5A 59 58 2AH 57 56 55 54 53 52 51 50 29H 4F 4E 4D 4C 4B 4A 49 48 28H 47 46 45 44 43 42 41 40 位寻址区 27H 3F 3E 3D 3B 3C 3A 39 38 26H 37 36 35 34 33 32 31 30 25H 2F 2E 2D 2B 2C 2A 29 28 24H 27 26 25 24 23 22 21 20 23H 1F 1E 1D 1C 1B 1A 19 18 22H 17 16 15 14 13 12 11 10 21H 0F 0E 0D 0C 0B 0A 09 08 20H 07 06 05 04 03 02 01 00 1FH
AT89C51单片机程序
![AT89C51单片机程序](https://img.taocdn.com/s3/m/399cf97f168884868762d689.png)
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);
//*****************************************************
基于AT89C51单片机频率计的设计(含程序)
![基于AT89C51单片机频率计的设计(含程序)](https://img.taocdn.com/s3/m/a1b4419f690203d8ce2f0066f5335a8102d2663b.png)
AT89C51单片机频率计的设计摘要基于在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。
由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。
因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。
随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89C51)相结合的频率计的设计方案,不但切实可行,而且体积小、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。
频率计的硬件电路是用Ptotues绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用汇编语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89C51;频率计;汇编语言选题的目的意义数字频率计的主要功能是测量周期信号的频率。
其基本原理就是用闸门计数的方式测量脉冲个数。
频率是单位时间( 1s )内信号发生周期变化的次数。
如果我们能在给定的 1s 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
AT89C51单片机
![AT89C51单片机](https://img.taocdn.com/s3/m/2528d434a4e9856a561252d380eb6294dd88227b.png)
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年代初期中国较早建设的⼀个⾳乐喷泉。
AT89C51 52 55单片机编程器(烧写器)制作
![AT89C51 52 55单片机编程器(烧写器)制作](https://img.taocdn.com/s3/m/3d842168ddccda38376bafaa.png)
AT89C51/52/55单片机编程器(烧写器)制作--------------------------------------------------------------------------------AT89C51/52/55单片机编程器(烧写器)制作AT89C51是一款应用最为广泛的8051单片机,更重要的是他具有反复烧写(FLASH)的特性。
一般情况下可重复烧写1000次,这样为初学者试验提供了一个廉价的平台。
为了满足广大单片机爱好者动手的需要,本人利用半个月的时间,参考国外资料,实际设计制作成功一款简单的AT89C51/52/55单片机编程器。
由于单片机编程时序不同,这一款编程器仅仅支持ATMEL 公司的AT89C51, AT89C52, AT89C55芯片,不支持华邦或飞利浦兼容芯片。
下面是单片机编程器电路图.注:元器件清单见附录工作原理简述:Q2, Q4以及周围的几个元件构成了电平转换电路,这样节省了1片max 232芯片,在要求不高的场合,这个电路在单片机通信中可以取代MAX232。
Q1, R2,R4,DW2,4个元件为编程器提供烧写用12V电压,其中,R4, R2构成了分压电路;平时,*芯片89C51第13脚(P3.3)输出高电平,Q1导通,R2(1K)将DW2(12V)拉低,此时DW2电压由R4,R2 分压,大约3-5V 之间;当写程序时,*芯片第13脚(P3.3)输出低电平,Q1截止,DW2(12V)直接送到被烧芯片的31脚,从而提供烧写电压。
ATMEL官方网站提供的编程器器烧写电压是用LM317调整得到的,并且用到了两个高精度电阻,电路复杂且成本高,该电路经过本人数百台的实验证明非常稳定可靠.电源变压器要求为15V的电源,例如常见的3-12V直流可调电源,注意其空载电压不要低于13V , 滤波应好一些,否则可能出现编程不可靠的情况。
*芯片用IC座安装,另外找一个编程器烧写好*程序EZ51.HEX后插入,方便调试。
AT89C51单片机开发板原理图电路
![AT89C51单片机开发板原理图电路](https://img.taocdn.com/s3/m/7bac861cb7360b4c2e3f6459.png)
A
Revision
GND
P3.2
1
2
3
4
6
COM3 R9 120 P0.1 P0.2
D2 D3 D4 P0.3
+5V 1
RP2
D
3
Q3 8550
D1 P0.0
D
GND 7805 PWR GND D10 4001 1 CP1 100u 2 Vin Vout 3 +5V
E
E
+5V R6 1K
+5V P0.4
D5 D6 P0.5 D7 COM4 P0.6 P0.7 120
GND +5V VLCD RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 +5V 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1602 VSS VDD VO RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K TG1602 GND
GND
JP2 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33
CN2 2 1 CN3 MAX232 1 C8 104 3 4 C9 104 5 P3.1 P3.0 11 10 12 9 C1+ C1C2+ GND C2T1IN T2IN R1OUT R2OUT T1OUT T2OUT R1IN R2IN VCC V+ V2 6 15 GND 14 7 13 8 GND C10 104 GND UART 1 6 2 7 3 8 4 9 5 D+ D+5V C5 4.7u R23 + C6 104 10K C7 1u GND 2 1 TXD P3.1 U11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 DCD RI GND D+ DVDD REGIN VBUS RST# NC SUSPEND# SUSPEND NC NC CP2102 DTR DSR TXD RXD RTX CTX NC NC NC NC NC NC NC NC 28 27 26 25 24 23 22 21 20 19 18 17 16 15 GND RXD1 TXD1 P3.0 P3.1 RXD P3.0 +5V
AT89C51单片机简单介绍
![AT89C51单片机简单介绍](https://img.taocdn.com/s3/m/2cbf687cf011f18583d049649b6648d7c1c70800.png)
典型应用电路设计与实现
01
最小系统电路
02
输入输出电路
03
通信接口电路
AT89C51单片机的最小系统电路包括 电源电路、晶振电路和复位电路等, 是单片机正常工作的基础。
通过输入输出电路,AT89C51单片机 可以与外部设备进行数据交换和控制 。常见的输入输出电路有LED显示电 路、按键输入电路等。
02
AT89C51单片机硬件结 构
中央处理器CPU
01
02
03
8位处理器
AT89C51单片机采用8位 中央处理器,能够执行基 本的算术、逻辑、位操作 和转移等指令。
时钟电路
内部时钟电路为CPU提供 时序,可通过外部晶振或 内部RC振荡器提供时钟信 号。
复位电路
具有上电复位和手动复位 功能,确保系统可靠启动 或恢复到初始状态。
AT89C51单片机简单 介绍
汇报人:XX
目录
• 单片机概述 • AT89C51单片机硬件结构 • AT89C51单片机指令系统与汇编语言 • AT89C51单片机C语言编程基础 • AT89C51单片机开发环境与工具链 • AT89C51单片机应用实例分析
01
单片机概述
单片机定义与发展
定义
单片机是一种将微处理器、存储 器、输入输出接口等集成在一个 芯片上的微型计算机。
02
使用C语言进行单片机编程可以提高开发效率,缩短开发周期,
降低开发成本。
C语言具有丰富的库函数和强大的数据处理能力,可以方便地实
03
现单片机的各种功能。
数据类型、运算符与表达式
数据类型
C语言提供了多种数据类型,如int、char、float、 double等,用于定义变量和常量。在单片机开发中,需要 根据实际需求选择合适的数据类型。
at89c51单片机简单介绍
![at89c51单片机简单介绍](https://img.taocdn.com/s3/m/4230da9427fff705cc1755270722192e45365806.png)
汇报人: 202X-12-21
目录
• at89c51单片机概述 • at89c51单片机内部结构 • at89c51单片机外部接口 • at89c51单片机编程语言与开发环
境 • at89c51单片机应用案例展示 • at89c51单片机未来发展趋势与挑
战
01
at89c51单片机概述
02
at89c51单片机内部结构
中央处理器(CPU)
运算和控制中心
负责执行指令、处理数据和控制其他部件。
8位结构
采用8位微处理器,可处理8位二进制数据。
存储器(RAM/ROM)
RAM
用于存储程序运行时的变量和临时数据。
ROM
用于存储程序代码和常量数据。
定时器/计数器
定时器
用于产生定时信号和控制时间间隔。
THANKS
感谢观看
计数器
用于计数外部事件或内部时钟信号。
中断系统
中断控制
允许CPU在执行程序时响应外部事件或 内部异常。
VS
中断向量
提供中断处理程序的入口地址。
03
at89c51单片机外部接口
I/O端口
输入输出端口
at89c51单片机具有多个输入输出端口,可 以用于连接各种外设和传感器。
端口配置
通过设置端口的控制寄存器,可以配置端口 的输入输出方向、弱上拉或弱下拉电阻等。
定义与特点
定义
at89c51是一种8位微控制器,采用 CMOS技术,具有低功耗、高性能的 特点。
特点
at89c51单片机具有丰富的指令集、 可编程的存储器、定时器/计数器、串 行通信接口等,适用于各种嵌入式系 统。
AT89C51单片机的P2口控制
![AT89C51单片机的P2口控制](https://img.taocdn.com/s3/m/26f2ec2482c4bb4cf7ec4afe04a1b0717fd5b325.png)
用AT89C51单片机的P2口控制8个Le d的流水灯的C程序看不懂?悬赏分:80 - 解决时间:2009-4-1 23:55 用AT89C51单片机的P2口控制8个L ed的流水灯的C程序看不懂?从P2-0到P2-7灯依次单独点亮后,又从P2-7到P2-0灯依次单独点亮如此反复循环,程序如下(低电平被点亮):#inclu de <R EGX52.H>v oid D elay1ms(un signe d int coun t){unsi gnedint i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}main(){ uns igned char LEDI ndex= 0;bi t LED Direc tion= 1;wh ile(1){ if(L EDDir ectio n) P2 = ~(0x01<<LEDI ndex); else P2 = ~(0x80>>L EDInd ex);if(LE DInde x==7) LEDD irect ion = !LED Direc tion;LEDIn dex = (LED Index+1)%8; Dela y1ms(500);} }我这程序我真的看不懂,这个bi t LED Direc tion= 1;是什么意思?从主函数开始,麻烦高手帮我解释每一句的意思以及它有用途?越详细越好!在下在此先谢谢了!提问者:t wp16899168 - 二级最佳答案#inclu de <R EGX52.H> voidDelay1ms(u nsign ed in t cou nt) /*延时函数,延迟时间为coun t×1ms)*/ {uns igned inti,j;for(i=0;i<coun t;i++)fo r(j=0;j<120;j++);}ma in(){u nsign ed ch ar LE DInde x = 0; /*声明8位变量LEDIn dex,用来指示8个LED中哪个被点亮,初始值为00000000*/bit L EDDir ectio n = 1; /*声明位变量L EDDir ectio n,用来指示点亮的方向,初始值为1*/while(1) /*一直循环执行大括号里面的语句*/{if(L EDDir ectio n) /*当LEDD irect ion=1时,0000 0001左移LE DInde x位,取反后送给P2端口,点亮一个LED*/P2 = ~(0x01<<LEDI ndex);el se /*当LEDD irect ion=0时,1000 0000右移LE DInde x位,取反后送给P2端口,点亮一个LED*/P2 = ~(0x80>>LED Index);i f(LED Index==7)/*当一次循环结束时,把LED Direc tion取反,下次循环时将以相反的顺序点亮*/L EDDir ectio n = !LEDDi recti on; LEDIn dex = (LED Index+1)%8; /*L EDInd ex+1对8取余,保证LEDI ndex在0~7之间*/De lay1m s(500); /*延时500ms,即L ED的点亮间隔为0.5s*/}}22回答者:紫翅zh idao- 四级 2009-3-23 12:20我来评论>>提问者对于答案的评价:谢谢一楼的回答,三楼回答好一点,谢谢!相关内容?求:单片机控制双色LED灯流水亮起的程序1 2010-1-9流水灯利用单片机的P1口控制LED的发光闪烁,在利用编程实现模拟广告灯2009-11-8?怎样让单片机在P1.和P2口同时控制两个不同花样的流水灯呢? 2009-6-29 基于at89c51单片机的led彩灯控制器管内LED板模块硬件图中的芯片C D4076在电路中有何作用? 5 2009-5-23 用P rotue s软件实现AT89C51单片机控制的跑马灯的仿真,8个LED实现左移和右移。
at89c51led闪烁实验汇编语言
![at89c51led闪烁实验汇编语言](https://img.taocdn.com/s3/m/d81b36b9fbb069dc5022aaea998fcc22bcd143e9.png)
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中文资料](https://img.taocdn.com/s3/m/c58620df4b73f242326c5ff7.png)
4.1 单片机介绍:单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
早期的单片机都是8位或4位的。
其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。
此后在8031上发展出了MCS51系列单片机系统。
基于这一系统的单片机系统直到现在还在广泛使用。
随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。
90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。
随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。
而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。
目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。
当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。
而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。
AT89C51单片机编程
![AT89C51单片机编程](https://img.taocdn.com/s3/m/2e232720e2bd960590c677d9.png)
{ 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单片机开发板程序](https://img.taocdn.com/s3/m/716d0fd3551810a6f5248699.png)
#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单片机-毕业设计.doc
![AT89C51单片机-毕业设计.doc](https://img.taocdn.com/s3/m/ec565343dd88d0d232d46a91.png)
1. 绪论 (2)1.1 课程设计要求 (2)1.2 数字电压表介绍 (2)2. 硬件单元电路设计 (2)2.1数字电压表结构框图 (2)2.1.1 AT89C51单片机简介 (3)2.1.2 ADC0832转换器简介 (4)2.1.3 时钟电路 (5)2.1.4 复位电路 (5)2.1.5 LED显示电路 (6)3. 软件单元电路设计 (6)3.1 主程序流程图 (6)3.2显示子程序流程图 (7)3.3 A/D转换子程序流程图 (8)3.4 数据处理子程序流程图 (8)4. 数字电压表仿真设计图与实物图 (9)4.1 仿真图 (9)4.2 器件清单 (9)4.3 硬件电路实物图 (10)5. 程序代码 (11)6. 项目设计总计 (18)7. 参考文献 (18)1.绪论1.1 课程设计要求使用单片机AT89C51和ADC0832设计一个数字电压表,能够测量0-5V之间的直流电压值,两位数码显示。
在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;能用两位LED进行轮流显示或单路选择显示,显示精度0.1伏。
1.2 数字电压表介绍数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。
而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。
因此AD转换是此次设计的核心元件。
输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。
2.硬件单元电路设计2.1数字电压表结构框图结构如(图1)所示2.1.1 AT89C51单片机简介AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89C51在众多嵌入式控制应用系统中得到广泛应用。
基于AT89C51单片机音乐盒设计(含程序设计)(word文档良心出品)
![基于AT89C51单片机音乐盒设计(含程序设计)(word文档良心出品)](https://img.taocdn.com/s3/m/1b3eae49f46527d3250ce00a.png)
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单片机的基本结构和工作原理](https://img.taocdn.com/s3/m/77b4afd076a20029bd642d32.png)
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各部分的组成及功能:1.单片机的中央处理器(CPU)是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。
(1)运算器运算器主要用来实现算术、逻辑运算和位操作。
其中包括算术和逻辑运算单元ALU、累加器ACC、B寄存器、程序状态字PSW和两个暂存器等。
ALU是运算电路的核心,实质上是一个全加器,完成基本的算术和逻辑运算。
算术运算包括加、减、乘、除、增量、减量、BCD码运算;逻辑运算包括“与”、“或”、“异或”、左移位、右移位和半字节交换,以及位操作中的位置位、位复位等。
暂存器1和暂存器2是ALU的两个输入,用于暂存参与运算的数据。
ALU的输出也是两个:一个是累加器,数据经运算后,其结果又通过内部总线返回到累加器;另一个是程序状态字PSW,用于存储运算和操作结果的状态。
累加器是CPU使用最频繁的一个寄存器。
ACC既是ALU处理数据的来源,又是ALU运算结果的存放单元。
单片机与片外RAM或I/O扩展口进行数据交换必须通过ACC来进行。
B寄存器在乘法和除法指令中作为ALU的输入之一,另一个输入来自ACC。
运算结果存于AB寄存器中。
(2)控制器控制器是识别指令并根据指令性质协调计算机内各组成单元进行工作的部件,主要包括程序计数器PC、PC增量器、指令寄存器、指令译码器、定时及控制逻辑电路等,其功能是控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。
电路编程中的AT89C51单片机
![电路编程中的AT89C51单片机](https://img.taocdn.com/s3/m/febb1f235901020207409c7c.png)
电路编程中的AT89C51单片机AT89C51 In-Circuit Programming摘要本应用说明的是ATMEL公司A T89C51的电路可编程闪存的微控制器。
为在电路可编程A T89C51的应用提出了与应用程序相关的例子,它的修改要求支持在线编程。
这种方法显示在该应用程序中的A T89C51单片机可通过商业电话线远程改编。
本应用笔记中描述的电路,仅支持5伏电压下编程,需要使用一个AT89C51-XX-5。
标准AT89C51的需要12伏电压。
该应用程序的软件可从ATMEL下载。
总论当不在进行程序设计的时候,在电路设计中的A T89C51设计将变得透明化。
在编程期间必须重视EA/VPP这一脚。
在不使用外部程序存储器的应用程序中,这脚可能会永久接到VCC。
应用程序使用的外部程序存储器要求这一脚为低电平才能正常运行。
RST在编程期间必须为高电平。
应该提供一种方法使得电路通入电源以后,使RST代替主要的复位电路起到复位的作用。
在编程过程中,PSEN必须保持低电平,在正常运行期间绝不能使用。
ALE/ PROG在编程过程中输出低电平,在正常运行期间绝不能使用。
在编程过程中,A T89C51的I / O端口是用于模式应用程序,地址和数据选择的,可能需要该控制器从应用的电路隔离。
如何做到这一点取决于应用程序。
输入端口在编程过程中,控制器必须与应用电路的信号来源隔离。
带有三个输出状态的缓冲区会在应用程序之间插入电路和控制器,同时在编程时缓冲区输出三种状态。
一个多路复用器可用于信号源之间进行选择,适用于任何一方的应用电路或编程控制器电路的信号。
输出端口如果应用的电路可以允许端口在编程过程中的状态变化,则不需要改变电路。
如果应用电路的状态,必须事先在编程过程中的保持不变,可能在控制器和应用电路中插入锁存。
锁存在编程期间是可用的,并保存应用程序的电路状态。
应用实例如图1所示应用是该A T89C51一个移动的显示情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A T89C51单片机开发板程序1个LED数码管静态显示(0-9)include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar i;uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay(uint z);void main(){while(1){for(i=0;i<10;i++){P2=0xfe;P0=a[i];delay(1000);}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}LED数码管显示(0-99)#include<reg52.h>unsigned char count,num;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(){P2=0xfe;IE=0x82;TMOD=0x01;TCON=0x30;while(1);}void TOINT() interrupt 1{TH0=0xd8;TL0=0xf0;if(P2&1)P1=table[num/10];else P1=table[num%10];P2^=3;if(++count<100)return;count=0;if(++num>99)num=0;}定时控制一只闪亮的灯#include<reg51.h>#define uchar unsigned char#define uint unsigned intuint n;sbit led=P0^0;void main (){TMOD&=0xf1;TMOD|=0x01;EA=1;ET0=1;TR0=1;while(1){}}void timer0() interrupt 1{n++;if(n==100){n=0;led=~led;}}用独立键盘显示LED数码管(1-4)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0xff}; void delay(uint z);void main(){uchar b,c;c=5;while(1){P0|=0x0f;b=P0;if(b!=0x0f){delay(20);P0|=0x0f;b=P0;b&=0x0f;if(b!=0x0f){switch(b){case 0x0e:c=1;break;case 0x0d:c=2;break;case 0x0b:c=3;break;case 0x07:c=4;break;default:c=0;}}}P1&=0xfe;P2=a[c];}}void delay(uint z){uint x,y;for(x=z;x<0;x--)for(y=122;y<0;y--);}用矩阵键盘显示LED数码管(0-9,A-F)#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};void delay(uint z);sbit hang1=P0^3;sbit hang2=P0^2;sbit hang3=P0^1;sbit hang4=P0^0;void main(){uchar b,c;c=16;{hang1=0;hang2=1;hang3=1;hang4=1;P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){delay(10);P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){switch(b){case 0xe0:c=0;break; case 0xd0:c=1;break; case 0xb0:c=2;break; case 0x70:c=3;break; default:c=16;}}}P3&=0xf0;P2=a[c];hang1=1;hang2=0;hang3=1;hang4=1;P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){delay(10);P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){{case 0xe0:c=4;break; case 0xd0:c=5;break; case 0xb0:c=6;break; case 0x70:c=7;break; default:c=16;}}}P3&=0xf0;P2=a[c];hang1=1;hang2=1;hang3=0;hang4=1;P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){delay(10);P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){switch(b){case 0xe0:c=8;break; case 0xd0:c=9;break; case 0xb0:c=10;break; case 0x70:c=11;break; default:c=16;}}}P3&=0xf0;P2=a[c];hang1=1;hang2=1;hang3=1;hang4=0;P0|=0xf0;b&=0xf0;if(b!=0xf0){delay(10);P0|=0xf0;b=P0;b&=0xf0;if(b!=0xf0){switch(b){case 0xe0:c=12;break; case 0xd0:c=13;break; case 0xb0:c=14;break; case 0x70:c=15;break; default:c=16;}}}P3&=0xf0;P2=a[c];}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}一只闪亮的灯#include<reg52.h>#define uchar unsigned char #define uint unsigned int sbit led=P2^0;void delay (uint z);void main(){led=0;delay(1000);led=1;delay(1000);}void delay(uint z){uint x;uint y;for(x=z;x>0;x--)for(y=122;y>0;y--);}中断控制流水灯(从右向左) #include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int uchar led,temp;void delay(uint z);void main(){EA=1;EX1=1;temp=0x7f;while(1){P2=temp;temp=_cror_(temp,1); delay(1000);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void extern1() interrupt 2 {P2=0x00;delay(2000);P2=0xff;delay(2000);}中断控制流水灯(从左向右) #include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int uchar led,temp;void delay(uint z);void main(){EA=1;EX1=1;temp=0xfe;while(1){P2=temp;temp=_crol_(temp,1); delay(1000);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void extern1() interrupt 2 {P2=0x00;delay(2000);P2=0xff;delay(2000);}1位密码锁#include<reg52.h>#define uchar unsigned char #define uint unsigned int#define mima 3#define duanma P1sbit weima=P3^0;sbit redled=P0^5;sbit greenled=P0^6;uchar key=0xff;void scankey();void delay(uint z);void main(){weima=0;while(1){duanma=0xbf;redled=1;greenled=1;scankey();if(key==mima){duanma=0x8c; greenled=0;delay(3000);key=0xff;}if(key!=0xff){duanma=0x86;redled=0;delay(3000);key=0xff;}else{duanma=0xbf;redled=1;greenled=1;}}}void scankey(){uchar keyinput;P0|=0x0f;keyinput=P0; keyinput&=0x0f;if(keyinput!=0x0f) {delay(10);P0|=0x0f;keyinput=P0; keyinput&=0x0f;if(keyinput!=0x0f) {switch(keyinput){case 0x0e:key=0;break; case 0x0d:key=1;break; case 0x0b:key=2;break;case 0x07:key=3;break;default:key=0xff;}}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}电子钟#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code wei[]={0xfe,0xfd,0xfb,0xf7};uchar tt,i,sec,min;uchar xianshi[4];void delay(uint z);void init();void main(){init();while(1){if(tt>=20){tt=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;}}}xianshi[0]=duan[sec%10];xianshi[1]=duan[sec/10];xianshi[2]=duan[min%10];xianshi[3]=duan[min/10];for(i=0;i<4;i++){P2=xianshi[i];P0=wei[i];delay(5);}}}void init(){TMOD&=0XF1;TMOD|=0X01;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{tt++;}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}交通灯#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; uchar code weitable[]={0xFE,0xFD,};uchar code chushi[]={0x7e,15,0x7d,5,0xdb,15,0xbb,5};uchar xianshi[2];uint time,tt;void display();void delay(uint z);void init();void main(){init();while(1){uchar j;for(;time==0&&j<8;j=j+2) {time=chushi[j+1];P1=chushi[j];}if(j==8)j=0;if(tt>=10){tt=0;time--;}xianshi[0]=duan[time/10]; xianshi[1]=duan[time%10]; display();}}void init(){TMOD&=0xf1;TMOD|=0x01;EA=1;ET0=1;TR0=1;}void display(){uchar i;for(i=0;i<2;i++){P2=weitable[i];P0=xianshi[i];delay(5);}}void delay(uint z){uint x;uchar y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void timer0() interrupt 1 {tt++;}4个LED数码管动态显示(0-9)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint z);void main(){P2=0xfe;P0=0xc0;delay(1000);P2=0xfd;P0=0xf9;delay(1000);P2=0xfb;P0=0xa4;delay(1000);P2=0xf7;P0=0xb0;delay(1000);P2=0xfe;P0=0x99;delay(1000);P2=0xfd;P0=0x92;delay(1000);P2=0xfb;P0=0x82;delay(1000);P2=0xf7;P0=0xf8;delay(1000);P2=0xfe;P0=0x80;delay(1000);P2=0xfd;P0=0x90;delay(1000);}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}4个LED数码管依次显示(0-9)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint z);void main(){P2=0xf7;P0=0xc0;delay(1000);P2=0xf7;P0=0xf9;delay(1000);P2=0xf7;P0=0xa4;delay(1000);P2=0xf7;P0=0xb0;delay(1000);P2=0xf7;P0=0x99;delay(1000);P2=0xf7;P0=0x92;delay(1000);P2=0xf7;P0=0x82;delay(1000);P2=0xf7;P0=0xf8;delay(1000);P2=0xf7;P0=0x80;delay(1000);P2=0xf7;P0=0x90;delay(1000);P2=0xfb;P0=0xf9;delay(1000);P2=0xfb;P0=0xa4;P2=0xfb;P0=0xb0; delay(1000); P2=0xfb;P0=0x99; delay(1000); P2=0xfb;P0=0x92; delay(1000); P2=0xfb;P0=0x82; delay(1000); P2=0xfb;P0=0xf8; delay(1000); P2=0xfb;P0=0x80; delay(1000); P2=0xfb;P0=0x90; delay(1000); P2=0xfd;P0=0xf9; delay(1000); P2=0xfd;P0=0xa4; delay(1000); P2=0xfd;P0=0xb0; delay(1000); P2=0xfd;P0=0x99; delay(1000); P2=0xfd;P0=0x92; delay(1000); P2=0xfd;P0=0x82; delay(1000); P2=0xfd;P0=0xf8; delay(1000); P2=0xfd;delay(1000);P2=0xfd;P0=0x90;delay(1000);P2=0xfe;P0=0xf9;delay(1000);P2=0xfe;P0=0xa4;delay(1000);P2=0xfe;P0=0xb0;delay(1000);P2=0xfe;P0=0x99;delay(1000);P2=0xfe;P0=0x92;delay(1000);P2=0xfe;P0=0x82;delay(1000);P2=0xfe;P0=0xf8;delay(1000);P2=0xfe;P0=0x80;delay(1000);P2=0xfe;P0=0x90;delay(1000);}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}LED单向流水灯(从右向左)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay (uint z);{P2=0x7f;delay(1000);P2=0xbf;delay(1000);P2=0xdf;delay(1000);P2=0xef;delay (1000);P2=0xf7;delay(1000);P2=0xfb;delay(1000);P2=0xfd;delay(1000);P2=0xfe;delay (1000);}void delay (uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}LED单向流水灯(从左向右)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay (uint z);void main(){P2=0xfe;delay(1000);P2=0xfd;delay(1000) ;P2=0xfb;delay(1000) ;P2=0xf7;delay (1000);P2=0xef;delay(1000);P2=0xdf;delay(1000) ;delay(1000) ;P2=0x7f;delay (1000);}void delay (uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--)}LED双向流水灯(从里向外)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay (uint z);void main(){P2=0xe7;delay(1000);P2=0xdb;delay(1000) ;P2=0xbd;delay(1000) ;P2=0x7e;delay (1000);}void delay (uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}LED双向流水灯(从外向里)#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay (uint z);void main(){P2=0x7e;delay(1000);P2=0xbd;delay(1000) ;delay(1000) ;P2=0xe7;delay (1000);}void delay (uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}一只闪亮的灯#include<reg52.h>#define uchar unsigned char #define uint unsigned int void delay (uint z);void main(){P2=0xfe;delay(1000);P2=0xff;delay(1000);}void delay(uint z){uint x;uint y;for(x=z;x>0;x--)for(y=122;y>0;y--);}八只会闪亮的灯#include<reg52.h>#define uchar unsigned char #define uint unsigned int void delay (uint z);void main(){P2=0x00;delay(1000);P2=0xff;delay(1000);}void delay(uint z){uint y;for(x=z;x>0;x--)for(y=122;y>0;y--);}中断控制数码管动态显示#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code duantable[]={0xc0,0xf9,0xa4,0xb0}; uchar code weitable[]={0xfe,0xfd,0xfb,0xf7}; uchar led,temp;void delay(uint z);void main(){EA=1;EX1=1;temp=0x7f;while(1){P1=temp;temp=_cror_(temp,1);delay(1000);P2=0xff;}}void extern1() interrupt 2{uchar i;for(i=0;i<4;i++){P1=0xff;P0=duantable[i];P2=weitable[i];delay(1000);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}数码管动态显示#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code duantable[]={0xc0,0xf9,0xa4,0xb0};uchar code weitable[]={0xfe,0xfd,0xfb,0xf7};void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void main(){while(1){uchar i;for(i=0;i<4;i++){P0=duantable[i];P2=weitable[i];delay(1000);}}}多功能中断控制数码管动态显示#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code duantable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code weitable[]={0xfe,0xfd,0xfb,0xf7,0xfe,0xfd,0xfb,0xf7,0xfe,0xfd,0xf0}; uchar led,temp;void delay(uint z);void main(){EA=1;EX1=1;temp=0x7f;while(1){P1=temp;temp=_cror_(temp,1);delay(1000);P2=0xff;}}void extern1() interrupt 2 {uchar i;for(i=0;i<10;i++){P1=0xff;P0=duantable[i];P2=weitable[i];delay(1000);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}。