AT89C51单片机开发板程序
基于AT89C51单片机的最小系统设计

基于AT89C5仲片机的最小系统设计组员:田竹、王维、袁倍明摘要:本次实验课题为设计一个基于AT89C51单片机的最小系统。
用P1 口设计流水灯,用P2 口和P0 口分别作段选和位选设计了六位数码管的静动态显示和简易的电子钟,用P3 口设计了一个4*4的矩阵键盘,并用蜂鸣器实现了唱歌功能和键盘按下的声响,用62256扩展内部RAM,还扩展并实现了LCD1602的静动态显示,最后通过ADC0809和DAC0832分别实现了A/D、D/A转换功能。
一、系统电源用MC7805集成稳压器将输入电压转为+5V稳压给系统供电二、晶振(12MHZ )及复位电路采用12MHz的外部晶振,给系统提供时钟信号。
并采用了按键复位电路。
LJMP LOOPDLY:MOV R7,#250 ;延时子程序 DLY1: MOV R6,#200DJNZ R6,$ DJNZ R7,DLY1 RET 源程序:ORG 0000HLJMP START ORG 0100H START:MOV P0,#0 MOV P2,#0F9HSETB P0.0 LCALL DELAY CLR P0.0 MOV P2,#0C4H源程序: 流水灯116 D3U1 2 1T°3■EKSK"--------- ---1 1亠门7 rS-------- 1^EHZFHk.11~6二93ICMrn寸9日。
日日日。
日且Q26LEDq o pJ3 p1…「zgLo o 二o1 d—-1--1、流水灯功能描述:让8个led 灯循环闪烁 D2*5V| LEDORes Pack436ORPIOPll P12P13P14P15P16数码管动态显示窝21END四、数码管功能描oSETB P0.1LCALL DELAYCLR P0.1MOV P2,#0D0HSETB P0.2LCALL DELAYCLR P0.2MOV P2,#99HSETB P0.3LCALL DELAYCLR P0.3MOV P2,#92HSETB P0.4LCALL DELAYCLR P0.4MOV P2,#82HSETB P0.5LCALL DELAYCLR P0.5LJMP STARTDELAY: MOV R5,#10D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND五、4*4矩阵键盘和蜂鸣器功能描述:通过按键让数码管显示0-F,按键按下时,蜂鸣器响一下LSIP2_ Speaker —GND源程序:ORG 0000HLJMP MAINORG 0100HMAIN: MOV P0,#0FFHMOV B,#4MOV P3,#0F0H;列置0,看行电平JNB P3.4,L1JNB P3.5 ,L2JNB P3.6 ,L3JNB P3.7 ,L4AJMP MAINL1: MOV R1,#0AJMP LL1L2: MOV R1,#1AJMP LL1L3: MOV R1,#2AJMP LL1L4: MOV R1,#3AJMP LL1LL1: ACALL DL10MS;消抖MOV A,P3XRL A,#0F0HJZ MAINMOV P3,#0FH;行置0,看列电平JNB P3.0,L5JNB P3.1 ,L6JNB P3.2 ,L7JNB P3.3 ,L8L5: MOV 20H,#0AJMP KEYL6: MOV 20H,#1AJMP KEYL7: MOV 20H,#2AJMP KEYL8: MOV 20H,#3AJMP KEYKEY:MOV A,R1; 计算键值并查表赋值MUL ABADD A,20HMOV R2,AMOV DPTR,#TABLEMOV A,R2MOVC A,@A+DPTRMOV P2,ACALL BEEP_BLLCALL DELAYLJMP MAINBEEP_BL: CLR P2.7;蜂鸣器子程序ACALL DELAY SETBP2.7 RETDELAY: MOV R5,#50延时D1: MOV R6,#20D2: MOV R7,#50DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETDL10MS:MOV R7,#05HLOOP1: MOV R6,#0F9HLOOP2:NOPNOPDJNZ R6,LOOP2DJNZ R7,LOOP1RETTABLE:DB 0A0H,0F9H,0C4H,0D0H,99HDB 92H,82H,0F8H,80H,90HDB 88H,83H,0A6H,0C1H,86H DB 8EHEND六、时钟功能描述:在数码管上实现时钟功能,并通过矩阵键盘的调时,调分。
AT89C51单片机程序

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单片机频率计的设计摘要基于在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的关系。
由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。
因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。
频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其它领域。
随着微电子技术和计算机技术的迅速发展,特别是单片机的出现和发展,使传统的电子侧量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代侧量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
为适应实际工作的需要,本次设计给出了一种较小规模和单片机(AT89C51)相结合的频率计的设计方案,不但切实可行,而且体积小、设计简单、成本低、精度高、可测频带宽,大大降低了设计成本和实现复杂度。
频率计的硬件电路是用Ptotues绘图软件绘制而成,软件部分的单片机控制程序,是以KeilC做为开发工具用汇编语言编写而成,而频率计的实现则是选用Ptotues仿真软件来进行模拟和测试。
关键词:单片机;AT89C51;频率计;汇编语言选题的目的意义数字频率计的主要功能是测量周期信号的频率。
其基本原理就是用闸门计数的方式测量脉冲个数。
频率是单位时间( 1s )内信号发生周期变化的次数。
如果我们能在给定的 1s 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
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最简单的应用电路及其程序编写文章标题:AT89C51最简单的应用电路及其程序编写主题词:AT89C51、应用电路、程序编写导语:AT89C51是一款经典的单片机芯片,具有广泛的应用领域。
本文将深入探讨AT89C51的最简单应用电路及其程序编写,旨在帮助读者全面、深入地理解这一主题。
一、AT89C51概述AT89C51是一款8位微控制器,由恩智浦(NXP)公司生产。
它采用MCS-51指令集架构,具有4KB的闪存和128字节的RAM,以及 32 个I/O 引脚,适用于各种嵌入式系统设计。
作为一款经典产品,AT89C51在工业控制、汽车电子、家用电器等领域都有着重要的应用。
二、AT89C51的最简单应用电路针对AT89C51的最简单应用电路,我们选取了典型的晶振外部工作方式,以便展示AT89C51的基本工作原理。
该电路包括AT89C51芯片、12MHz晶振、液晶显示模块、热敏电阻和数码管等元件。
通过连接这些元件,我们可以实现一个简单的温度检测系统,并通过数码管显示温度数值。
三、程序编写在进行AT89C51程序编写时,我们需要首先了解MCS-51指令集的基本结构和指令格式。
根据我们设计的应用功能,编写相应的C语言程序,并通过Keil C51等IDE软件进行编译和下载。
在程序编写的过程中,我们需要充分考虑AT89C51的资源限制和时钟频率,以确保程序的稳定性和高效性。
四、个人观点和理解作为一款经典的单片机芯片,AT89C51在嵌入式系统设计中具有重要的地位。
通过设计简单的应用电路和进行程序编写,我们可以更好地认识和理解AT89C51的工作原理和应用特点。
AT89C51也可以作为学习嵌入式系统的良好教学工具,帮助学习者快速掌握单片机的设计和编程技能。
总结通过本文的探讨,我们详细介绍了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 52 55单片机编程器(烧写器)制作

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后插入,方便调试。
51单片机电子秤程序设计

51单片机电子秤程序设计概述本文档介绍了如何使用51单片机(AT89C51)设计一个简单的电子秤程序。
通过该程序,电子秤能够测量物体的重量并实时显示在液晶显示屏上。
硬件准备在开始编写程序之前,我们需要准备以下硬件设备:- AT89C51单片机开发板- 电子秤传感器模块- 16x2液晶显示屏- 连接线程序设计以下是该电子秤的主要程序设计步骤:1. 引入必要的头文件include <reg51.h>include <lcd.h>2. 定义端口和变量sbit DOUT = P3^7; // 电子秤传感器数据接口float weight = 0; // 测量到的重量3. 初始化液晶显示屏void lcd_init(){// 在这里初始化液晶显示屏的相关设置}4. 启动AD转换void start_conversion(){// 在这里启动AD转换,将传感器的模拟数据转换为数字数据}5. 读取AD转换结果float read_conversion(){// 在这里读取AD转换结果并返回}6. 主程序void main(){lcd_init(); // 初始化液晶显示屏while (1){start_conversion(); // 启动AD转换weight = read_conversion(); // 读取AD转换结果// 将重量显示在液晶显示屏上lcd_gotoxy(1, 1); // 设置光标位置lcd_print("Weight: %.2f kg", weight); // 显示重量delay(500); // 延时一段时间,以控制刷新速度}}总结通过以上步骤,我们可以设计一个简单的51单片机电子秤程序。
该程序可以实时获取电子秤传感器的数据,并将测量到的重量显示在液晶显示屏上。
我们可以根据实际需求进行进一步的功能扩展和优化。
请注意,本文档仅提供了程序设计的概述,并未包含具体的代码实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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-->。
}
用矩阵键盘显示LED数码管<0-9,A-F)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}。
AT89C51单片机开发板程序
1个LED数码管静态显示<0-9)
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i。
uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。
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。
#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。
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位密码锁
{
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>
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。
while(1>
{
hang1=0。
hang2=1。
hang3=1。
hang4=1。
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。
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>。
count=0。
if(++num>99>num=0。
}
定时控制一只闪亮的灯
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint n。
sbit led=P0^0。
void main (>
{
TMOD&=0xf1。
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。
{
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-->
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-->。
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>
{
switch(b>
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。
b=P0。
b&=0xf0。
if(b!=0xf0>
{
delay(10>。
P0|=0xf0。
b=P0。
b&=0xf0。
if(b!=0xf0>
{
switch(b>