单片机实验三示例
- 格式:doc
- 大小:198.50 KB
- 文档页数:15
51单片机实验手册一、概述51单片机是一种经典的8位微控制器,具有广泛的应用领域。
本实验手册旨在提供详细的实验指导,帮助初学者快速入门,并为进一步的学习提供基础。
二、实验准备在进行51单片机实验之前,我们需要准备以下材料:1. 一块51单片机开发板2. USB数据线或者串口线3. 电脑及编程软件4. 面包板及对应的连接线5. 红、绿、蓝LED以及相应的电阻三、实验一:LED闪烁LED闪烁是最基础的实验之一,通过控制51单片机的I/O口状态,使LED灯交替亮灭。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将LED的长脚连接到P1.0引脚,短脚连接到GND引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>void main() {while(1) {P1 = 0x00; // P1置低电平,LED灯熄灭Delay(1000); // 延时1秒P1 = 0xFF; // P1置高电平,LED灯点亮Delay(1000); // 延时1秒}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
4. 运行实验将USB数据线或串口线连接到51单片机开发板和电脑,将开发板上的开关打开,观察LED灯的闪烁情况。
四、实验二:数码管显示通过控制51单片机的I/O口状态,驱动数码管显示数字。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将数码管的A、B、C、D、E、F、G引脚分别连接到P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>unsigned char code segment[] = { // 数码管段码表0x3F, // 数字00x06, // 数字10x5B, // 数字20x4F, // 数字30x66, // 数字40x6D, // 数字50x7D, // 数字60x07, // 数字70x7F, // 数字80x6F // 数字9};void main() {unsigned int i;while(1) {for(i = 0; i < 10; i++) {P1 = segment[i]; // 依次在数码管上显示数字0-9 Delay(1000); // 延时1秒}}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
stc单片机编程实例单片机(Single Chip Microcontroller)是一种集成了中央处理器、存储器和各种外设功能的微型计算机系统。
它具有体积小、功能强大、成本低廉等特点,广泛应用于各个领域。
在使用STC单片机进行编程时,我们可以通过实例来学习和理解其编程原理和应用方法。
本文将介绍几个STC单片机编程实例,以帮助读者深入了解和掌握该技术。
实例一:LED闪烁首先,我们来实现一个简单的LED闪烁程序。
通过控制IO口输出高低电平,从而控制LED的亮灭。
下面是代码示例:```#include <reg52.h>sbit LED = P1^0; // 将P1.0引脚定义为LED控制引脚void main(){while(1){LED = 0; // LED亮delay(); // 延时LED = 1; // LED灭delay(); // 延时}}void delay(){int i, j;for(i = 0; i < 100; i++)for(j = 0; j < 1000; j++);}```在上述代码中,我们首先通过`#include<reg52.h>`导入STC单片机的寄存器定义文件。
然后,我们使用`sbit`关键字将P1.0引脚定义为LED控制引脚。
在`main()`函数中,我们循环执行LED亮灭的操作,并通过`delay()`函数进行延时控制。
实例二:数码管显示接下来,我们将实现一个数码管显示程序。
通过控制IO口输出不同的数码管段选信号和位选信号,从而使数码管显示出指定的数字。
下面是代码示例:```#include <reg52.h>unsigned char code smgduan[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 数码管显示字符对应的编码sbit smg_duan = P1^0; // 数码管段选信号sbit smg_wei = P1^1; // 数码管位选信号void main(){unsigned char i;while(1){for(i = 0; i < 10; i++){smg_duan = smgduan[i]; // 设置段选信号smg_wei = 0; // 显示位选信号有效delay(); // 延时smg_wei = 1; // 显示位选信号无效}}}void delay(){int i, j;for(i = 0; i < 100; i++)for(j = 0; j < 1000; j++);}```在上述代码中,我们使用了一个长数组`smgduan`来存储数码管显示字符的编码。
单片机实验第二次实验:图见实验题1.P1.0~P1.7这八个发光二极管全部点亮#include#define uchar unsigned char#define uint unsigned intsbit greenLed=P1^0;Delay(uint cnt){ uchar i;do{for(i=0;i<165;i++);}while(cnt--);}main(){ while(1){ greenLed=0;Delay(1000);greenLed=1;Delay(1000);}}2. P1.0~P1.7这八个发光二极管循环点亮#include delay(unsigned char cnt){ unsigned int i;do{for(i=0;i<6000;i++);}while(cnt--);}main(){ unsigned char a;P1=~a;while(1){if(a!=0){ delay(5);a<<=1;P1=~a;}else{a=0x01;P1=~a;}}}3.通过外部中断控制八盏灯分别右移,左移,闪烁,双灯同时左移。
#include#define uchar unsigned charuchar code LedTable[]= {0x03,0x0c,0x30,0xc0};uchar led_flag = 4;uchar a; Delay(uchar cnt){ unsigned int i;do{ for(i=0;i<6000;i++);}while(cnt--);}void Led_rr(void)//led右移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x80;P1 = ~a;a >>= 1;}}void Led_rl(void)//led左移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x01;P1 = ~a;a <<= 1;Delay(10);}}void Led_spark(void){ P1 = 0xff;Delay(10);P1 = 0;Delay(10);}void Led_lr_doble(){ uchar i;for (i=0;i<4;i++){ P1= ~LedTable[i];Delay(10);}}void int1(void) interrupt 2 //中断服务函数{ led_flag++;if(led_flag >= 3) led_flag = 0;}void main(void){ EA = 1;EX1 = 1;IT1 = 1;while(1){ if(led_flag ==4){ Led_spark();}if(led_flag == 0){ Led_rl();}if(led_flag == 1){ Led_rr();}if(led_flag == 2){ Led_lr_doble();}}第三次实验:1.设单片机的=12MHz,要求用定时器/计数器T0以方式1在P1.0脚上输出周期为4ms的方波。
单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。
二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。
2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。
通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。
三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,点亮LED灯。
2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将按键和LED灯与单片机相连。
(3)编写程序,实现按下按键控制LED灯亮灭。
3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将数码管与单片机相连。
(3)编写程序,将数字输出到数码管上显示。
4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,实现定时器功能。
四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。
2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。
按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。
3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。
通过程序设计,可以实现数码管显示不同的数字。
4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。
通过调节定时器的参数,可以实现不同的定时功能。
五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。
通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。
这些技能对于日常生活和工程设计都具有很大的实用性。
在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
单片机原理与应用实验报告学校:合肥工业大学班级:计算机科学与技术学号:姓名:第一章MC51 单片机原理及应用软件实验实验1:系统认识实验1.实验目的(1)了解ZY15MCU12BC2单片机实验开发装置的接线与安排。
掌握实验箱内拨位开关KF,KC的使用方法。
(2)通过实例程序的编辑、编译、链接及调试,熟悉Keil C51软件的使用方法和基本操作。
(3)教育学生爱抚实验装置,养成良好的实验习惯。
2.试验设备(1)ZY15MCU12BC2单片机实验开发装置一台。
(2)PC系列微机及相关软件。
3.试验内容(1)使用串行通讯电缆将实验开发装置与PC机相连。
(2)开启PC机及实验开发装置,启动Keil C51软件进入uVision2集成开发环境。
(3)确认拨位开关KF的开关为A端,确认89C51处于仿真状态。
(4)在uVision2开发平台上建立并编辑示例程序:计算N个数求和程序。
其中N个数分别放在片内RAM区50H到55H单元中,N=6,求和的结果放在片内RAM区03H(高位)和04H(低位)单元中。
题目:1)32H+41H+01H+56H+11H+03H=?2)895H+02H+02H+44H+48H+12H=?(5)编译连接源程序。
(6)在Keil uVision2主菜单窗口进入DEBUG调试环境,打开存储器窗口输入数据至片内RAM区50H到55H单元中,全速运行程序,并检查程序的运行结果,即观察在存储器窗口片内RAM区03H(高位)、04H(低位)单元中的数据是否正确。
(7)实验结束,撤出接线,将一切整理复原。
4.实验源程序ORG 0000HLJMP MAINORG 1000HMAIN: MOV R2,#06HMOV R3,#03HMOV R4,#04HMOV R0,#50HL1: MOV A,R4ADD A,@R0MOV R4,AINC R0CLR AADDC A,R3MOV R3,ADJNZ R2,L1END5. 实验结果截图6. 实验总结这次试验,熟悉了单片机开发的基本流程,对于实验的两道题目1)32H+41H+01H+56H+11H+03H=?2)895H+02H+02H+44H+48H+12H=?实验结果如上图所示50H~54H存放数据,第一道题计算出来是0x00DEH,第二道题目计算出来是0x0137H,实验结果和预期相符,成功的完成了实验。
金愚善单片机例程全文共四篇示例,供读者参考第一篇示例:金愚善单片机例程是一种用于学习和实践单片机编程的教学资源。
它提供了丰富的例程和案例,在实际的工程项目中可以起到很大的作用。
本文将介绍金愚善单片机例程的特点、应用和学习方法,希望对单片机编程感兴趣的读者有所帮助。
一、特点1.丰富的例程:金愚善单片机例程涵盖了常见的单片机应用场景,如LED灯控制、蜂鸣器控制、按键输入等。
这些例程都是基于实际项目开发的,经过了严格的测试和优化,确保了稳定性和可靠性。
2.易于理解:金愚善单片机例程采用了简洁明了的代码风格,注释清晰,函数模块化,方便读者快速理解和修改。
即使是初学者也可以轻松上手,快速掌握单片机编程的基本知识和技能。
3.开源共享:金愚善单片机例程是开源的,任何人都可以免费获取和使用。
读者也可以根据自己的需求和创意,对例程进行改进和扩展,贡献自己的力量,促进单片机编程技术的发展。
二、应用1.教学实验:金愚善单片机例程可以作为单片机编程实验的教学资源,帮助学生理解相关知识和提升实践能力。
通过实际操作和调试,学生可以更好地掌握单片机的原理和应用。
2.工程项目:金愚善单片机例程也适用于工程项目的开发和实施。
开发人员可以基于例程快速搭建原型系统,进行功能验证和性能测试,节省开发时间和成本,提高项目的成功率和效益。
3.科研探索:金愚善单片机例程还可以用于科研领域的探索和创新。
科研人员可以基于例程进行二次开发,探究新的应用场景和解决方案,为学科发展和社会进步做出贡献。
三、学习方法1.理论学习:在使用金愚善单片机例程之前,建议先对单片机的基本原理和编程语言进行系统学习。
掌握相应的知识和技能,有利于更好地理解和应用例程。
2.实践操作:学习单片机编程需要大量的实践操作,只有亲自动手才能更好地掌握和应用知识。
建议读者结合例程,按照步骤一步步地进行实验和调试,加深对单片机编程的认识和理解。
3.团队协作:在学习单片机编程时,可以参与团队项目或者线上社区,与他人分享经验和交流技巧。
实验一认识实验一.实验目的1.了解仿真器的硬件结构与接线。
2.了解MCS-51单片机复位功能及复位后的内部状态。
3.通过示例程序的键入与执行,学习仿真器的使用与操作方法。
二.实验内容1.对照实验指导书,查对实验机具体接线。
2.按照开发系统的使用方法,分别查看复位后PC、SP、DPTR等特殊功能寄存器及片内、片外RAM的内容。
3.熟悉开发器的使用,将下面程序键入实验机。
ORG 2000H2000 74AA MOV A,#0AAH2002 75F0BB MOV B,#0BBH2005 E5F0 MOV A,B2007 78CC MOV R0,#0CCH2009 E8 MOV A,R0200A 80FE SJMP $4.程序键入后,检查各存储单元所储机器码是否正确如有误,重新键入,达到修正的目的。
5.单步执行示例程序,逐步检查执行结果,核查与分析结果是否相符,直到执行完最后一条指令。
6.练习连续执行示例程序,检查执行结果,核查与分析结果是否相符。
7.自己在示例程序中插入一条指令,执行并查看结果,然后删除,熟悉插入/删除操作。
8.将示例程序移到另外一个存储区,执行并查看结果,熟悉程序块移动操作。
三.实验预习要求1.认真阅读指导书的相关内容,熟悉开发系统的各种操作。
2.实验前应写出规定操作任务的具体操作方法步骤。
四.思考题1.MCS-51单片机怎样实现内部复位,画出一种复位电路。
2.PC、SP、P0、P1、P2、P3复位状态是什么?各有何意义?3.示例程序中最后一条指令SJMP $的作用是什么?如果取掉这一条指令,程序的执行将发生什么变化?4.实验机监控系统怎样实现程序“单步执行”功能?五.实验报告要求1.按实验顺序,写出实验操作的方法步骤。
2.写出实验中所遇到的问题与解决过程。
写出思考题的答案。
实验二建立数据区、数据块传送一.实验目的1.进一步熟悉实验机操作,练习程序调试方法。
2.理解并掌握建立数据区与数据块传送程序。
单片机原理及接口技术实验指导书周云龙编写盐城工学院电气工程学院二○一五年四月实验一KEIL集成开发环境应用实验一、实验目的1.掌握C51开发环境keil软件项目创建方法2、汇编程序编写2.C51程序编写3、主函数、自定义函数和中断函数编写二、实验备件PC和单片机IDE集成开发软件三、实验要求1、建立一个汇编程序工程2、汇编工程调试3、建立一个C语言程序工程4、C语言工程调试实验二Proteus单片机系统仿真实验一、实验目的1.掌握Proteus 界面功能2、原理图绘制方法2.住址仿真调试3、Proteus与Keil联调二、实验备件PC、单片机IDE集成开发软件和Proteus仿真软件三、实验步骤1、学习Proteus软件2、绘制教材中第150页上图5-73、Keil与Proteus联调实验三单片机最小系统的熟悉一、实验目的在进行其他硬件实验之前,先熟悉实验装置的核心模块——单片机最小系统模块。
掌握该实验模块的电路原理和接口的使用方法。
1.掌握单片机振荡器时钟电路及CPU工作时序;掌握复位状态及复位电路设计;掌握单片机各引脚功能及通用I/O口的使用;掌握单片机基本指令的使用。
2.掌握uVision3 IDE集成开发环境,Proteus仿真软件和STC单片机下载软件ISP的使用。
3.将仿真现象和实验结果进行对比,体会仿真软件的用处。
二、实验设备1.51仿真器或者串口线2.单片机系统板三、实验要求1.连接实验电路,编写简易单片机汇编程序达到下述工作要求:P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一输出,编写程序使P1口接的8个发光二极管L0—L7按16进制加一的方式点亮发光二极管。
2.将编写的程序经过编译后在uVision3 IDE软件中生成*.hex机器语言,通过ISP将*.hex下载到单片机芯片中,观察实验现象。
3. 用Proteus仿真软件画出实验电路图,将在uVision3 IDE软件中生成*.hex 下载到Proteus仿真电路图中的单片机芯片中,观察实验现象,比较该现象和在实验台上的现象是否相同。