第一篇:单片机,红绿灯显示实验报告
实
验
报
告
学生姓名:
学 号:
指导教师:
实验地点:
实验时间:2018年4月2日 实验 红绿灯显示实验
一、实验目的:
1.掌握程序控制指令。
2.掌握分支程序、子程序、循环程序的编写方法。
3.掌握软件延时的方法、了解机器周期和指令周期的概念。4.了解“静态显示”的含义。
二、实验内容:
在显示实验的基础上,如果将第7位,第3位,第1位分别看成红灯、黄灯和绿灯,红灯5秒(对应位显示0)后,显示黄灯1秒(对应位显示0),再显示绿灯3秒,编写对应程序,程序要求,延时使用子程序,最好使用标志位。其它内容见显示实验
三、实验步骤:
1.程序清单:
a)DpyDisplay.c: #include
typedef unsigned char u8;typedef unsigned int u16;
#define Dpy P0 sbit LSA = P2^2;sbit LSB = P2^3;sbit LSC = P2^4;
u8 code array[17] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71,0x00};
void ls(u8 c, u8 b, u8 a)
{ LSA = a;LSB = b;LSC = c;}
void delay(u16 i){ while(i>0)i--;}
void Dpy1Display(u8 i){ ls(1,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy2Display(u8 i){ ls(1,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy3Display(u8 i){ ls(1,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy4Display(u8 i){ ls(1,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy5Display(u8 i){ ls(0,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy6Display(u8 i){ ls(0,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy7Display(u8 i){ ls(0,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy8Display(u8 i){ ls(0,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h){ Dpy1Display(a);Dpy2Display(b);Dpy3Display(c);Dpy4Display(d);Dpy5Display(e);Dpy6Display(f);Dpy7Display(g);Dpy8Display(h);} b)main.c: #include
typedef unsigned char u8;typedef unsigned int u16;
extern void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h);
void main(){ u16 i, j, n;n = 108;
while(1){ for(j=10;j>0;j--){
for(i=0;i DpyDisplay(j-1,16,16,16,16,16,16,16);} for(j=2;j>0;j--){ for(i=0;i DpyDisplay(16,16,j-1,16,16,16,16,16);} for(j=5;j>0;j--) } } { } for(i=0;i 2.实验现象: 开发板数码管第一位从9逐秒递减至0后,第三位从1逐秒递减至0,之后第五位从4逐秒递减至0。3.实验原理: a)通过发送段码选定某位后向该位发送位码以点亮一根数码管。b)数码管以非常短的时间重复点亮,利用人的视觉暂留给人以稳定显示字符之感。 c)利用for循环使数码管稳定显示,并使数字逐秒减少。4.实验中的注意事项、遇到的问题以及总结: a)点亮数码管的循环函数中语句尽可能少,防止数码管显示过程中的闪烁。b)最好制作编码表,设置输入值与显示字符的关系,后续即可通过查表完成显示,可大大减小工作量。 c)利用for控制每位显示可大大减少代码量。5.实验改进方向与设想 可外接不同色LED模拟红绿灯。 实验报告 班级: 学号: 姓名: 日期: 实验 一、红绿灯控制 一、实验目的 熟悉软件的使用,掌握plc编程的方法,编写程序控制十字路口的红绿灯。 二、实验设备 一台安装有STEP 7-MivroWIN4.0与S7200_simulation的电脑。 三、控制要求分析 实验利用PLC控制十字路口的红绿灯。十字路口的红绿灯分为横向控制灯和纵向控制灯,每个方向有红、绿、黄3种颜色的控制灯。 当电路接通,双向红绿灯开始正常工作,横向的绿灯和纵向的红灯先亮。横向的绿灯亮维持8s,在横向绿灯亮的同时纵向的红灯也亮起,并维持10s。第8秒时横向的绿灯熄灭,同时亮起黄灯并维持2s后熄灭。第10s时,横向黄灯熄灭的同时亮起红灯并维持10s,同时纵向的绿灯亮起并维持8s。当纵向绿灯熄灭并亮起黄灯持续2s后红灯亮起,同时横向的绿灯也亮起并维持8s到此一个循环就此结束下一个循环开始。当按下紧停按钮时两路同时亮黄灯2s后,其中一路亮红灯另一路亮绿灯。本实验设置了两个紧停按钮。 四、PLC的I/O分析 I0.1,I0.2两个紧停按钮。M0.1,M0.2中间继电器。Q0.0横向绿灯,Q0.1横向黄灯,Q0.2横向红灯,Q0.3纵向红灯,Q0.4纵向绿灯,Q0.5纵向黄灯。T37、T41为8s定时器,T38、T42为2s定时器,T39、T40为10s定时器。 五、PLC梯形图程序及指令表程序 梯形图程序: 指令表程序: LD I0.1 = M0.1 Network 2 LDN M0.2 AN M0.1 AN T37 LDN M0.1 A T38 A M0.2 OLD = Q0.0 Network 3 LDN M0.2 AN M0.1 AN T39 TON T37, 80 Network 4 LDN M0.2 AN M0.1 AN T38 A T37 LDN M0.2 AN T38 A M0.1 OLD LDN M0.1 AN T38 A M0.2 OLD = Q0.1 Network 5 LDN M0.1 AN M0.2 A T37 LDN M0.2 A M0.1 OLD LDN M0.1 A M0.2 OLD TON T38, 20 Network 6 LDN M0.2 AN M0.1 AN T39 A T38 LDN M0.2 A T38 A M0.1 OLD = Q0.2 Network 7 LDN M0.1 AN M0.2 A T38 TON T39, 100 Network 8 LDN M0.1 AN M0.2 AN T40 LDN M0.1 A T42 A M0.2 OLD = Q0.3 Network 9 LDN T42 AN M0.1 AN M0.2 TON T40, 100 Network 10 LDN M0.1 AN M0.2 AN T41 A T40 LDN M0.2 A T38 A M0.1 OLD = Q0.4 Network 11 LDN M0.1 AN M0.2 AN T42 A T40 TON T41, 80 Network 12 LD T41 AN M0.2 AN T42 AN M0.1 LDN T42 A M0.1 AN M0.2 OLD LDN T42 AN M0.1 A M0.2 OLD = Q0.5 Network 13 LDN M0.1 AN M0.2 A T41 LDN M0.2 A M0.1 OLD LD M0.2 AN M0.1 OLD TON T42, 20 Network 14 LD I0.2 = M0.2 六、实验过程记录及分析 根据实验要求,编写plc梯形图程序。打开软件录入程序,运行调试直到达到正确控制红绿灯的亮灭。模拟软件S7-200调试时,双向红绿灯开始正常工作,横向的绿灯和纵向的红灯先亮。横向的绿灯亮维持8s,在横向绿灯亮的同时纵向的红灯也亮起,并维持10s。第8秒时横向的绿灯熄灭,同时亮起黄灯并维持2s后熄灭。第10s时,横向黄灯熄灭的同时亮起红灯并维持10s,同时纵向的绿灯亮起并维持8s。当纵向绿灯熄灭并亮起黄灯持续2s后红灯亮起,同时横向的绿灯也亮起并维持8s到此一个循环就此结束,下一个循环开始。按下紧停按钮I0.1、I0.2时,Q0.1、Q0.5同时亮起并维持2s后熄灭,同时其中一路常亮绿灯,另一路常亮红灯。 说明实验程序正确,保存好实验数据,做好记录。关闭软件。 七、时序分析 正常无故障运行: Q0.0横向绿灯,Q0.1横向黄灯,Q0.2横向红灯,Q0.3纵向红灯,Q0.4纵向绿灯,Q0.5纵向黄灯。 I0.1、I0.2为紧停开关 当按下紧停按钮I0.1:横向红灯(Q0.2)亮,纵向绿灯(Q0.4)亮。 当按下紧停按钮I0.2:横向绿灯(Q0.0)亮,纵向红灯(Q0.3)亮。 八、实验心得体会 通过实验操作,了解掌握了plc编程的原理和方法,同时实验前期遇到很多各类问题,均得到了解决,对plc产生了初步的兴趣。对以后进一步学习plc相关知识奠定了坚实的基础。 实 实 验 验 报 报 告 实验课程: 单片机原理及应用 班 级: 自动化 2 班 学 号: 姓 名: 教 师: 张 玲 成绩: 实 验 日 期 : ****年**月**日 实验名称: 实验 1-—计数显示器 一、实验目得: 学习Proteus 软件得使用,掌握单片机原理图得绘图方法。 二、实验内容: ﻩ1、绘制“计数显示器”电路原理图;2、利用提供得hex 文件验证此电路得运行效果。 三、实验要求: 提交得实验报告中应包括:1、绘图方法简述,要求说明元件与电源得选取、摆放及属性编辑,总线与标签得画法等内容;2、电路原理图;3、仿真运行效果展示,要求就仿真文件加载方法及 3~4幅运行截图进行简要说明;4、实验小结,说明遇到得主要问题或实验 1 体会等.参考电路原理图如下: 元件类别 电路符号 元件名称 Microprocessor ICs “U1“ 80C51 Miscellaneous “X1”/12MHz CRYSTAL Capacitors “C1”~“C2”/1nF CAP Capacitors “C3”/22μF CAP—ELEC Resistors Packs “RP1“/7—100Ω RESPACK—7 Resistors “R1"/100Ω RES Optoelectronics “LED1”~“LED2” 7SEG--CAT-GRN Switches & Relays “BUT” BUTTON 1、、及 编程思路及 C51 源程序: 2、电路原理图: : 3、仿真运行效果展示: 4、实验小结 : 熟悉Proteus 软件,了解软件得结构组成与功能;学习ISIS 模块得使用方法,学会设置图纸、选元件、线画总线、修改属性等基本操作;学会可执行文件 加载及程序仿法;理解Proteus在单片机开发中得作用,完成单片机电路原 理图得绘制. 实验名称: 实验 2——LED 指示灯循环控制 一、实验目得 熟悉μVision3 编译软件、掌握 C51编程与调试方法。 二、 实验内容 1、按照教材 P243 得图 A、34,绘制实验二电路原理图; 2、编写 C51 程序,实现 8 个 LED 灯依次点亮得功能: P0、0→P0、1→ P0、2→P0、3→ ┅ →P0、7→P0、6→P0、5→ ┅ →P0、0 得顺序,无限循环,间隔约50ms; 3、观察仿真结果,完成实验报告。 三、 实验要求 1、采用两种加载并运行可执行文件得方法,即proteus独立运行与prote us + Keil 联合运行,体会其中得差异与意义;2、练习采用单步、断点以及监视窗等手段进行程序调试得方法;3、观察仿真结果,完成实验报告:绘制得电路原理图、编程思路分析及 C51源程序、调试过程简述,仿真运行效果以及实验小结。、电路原理图: : 及 2、编程思路及 C51 源程序:、仿真运行效果:、实验小结 : 通过本次实验我熟悉 uVision3 编译软件了解软件得结构组成与功能学习C51 语言得程序设计方法)学会在 uVision3中进行 C51 程序录入、编译、与 调试理解 Proteus 与 Keil 联合得仿真原理实现 LED 指示灯循环控制功能。 更好得将 C 语言与 C51 语言联系在了一起)学到得知识能准确得利用了出来。 实验名称: 实验3——指示灯与数码管得中断控制 一、实 验目得 掌握外部中断得工作原理,学会中断程序设计.二、实验内容 1、按照教材帕图 A、53,绘制实验四电路原理图;2、要求采用外部中断原理完成本次实验,其中按键 K1、K2 均设置为下降沿触发方式,自然优先级; 3、编写 C51 程序实现如下功能:开机后 D1灭灯,LED1黑屏,随后单击 K1→D1状态反转,单击 K2 →LED1 从 0 开始循环显示0~F 字符。 4、观察仿真结果,完成实验报告。 三、 实验要求 提交得实验报告中应包括:电路原理图,外部中断工作原理阐述(以 K1 为例说明中断响应过程),C51 源程序(含流程图与注释语句),运行效果(含运行截图 与说明),实验小结. 1、电路原理图 : 2、外部中断工作原理阐述: 持续按下 K1 则 D1 将“亮→灭→亮→灭→„→亮→灭如此循环,表明实现了 K1 对应于 D1 状态反转这个功能;持续按下持续按 K2 则数码显示管依次显 示 1-F,实现了 K2 对应于 0~F 间得数码管加一计数显示. 3、、及 编程思路及 C51 源 源 程序:、仿真运行效果: 5、实验小结: 通过实验对 Protues 有了更多得了解,同时了解到中断系统在实际中得更好 应用。经过编程操作起来更加熟练能很快得完成绘图,编程时也得心应手,能熟练得运用软件找出自己所编程中得语法问题及其她问题,并以改正。 实验名称: 实验4—-电子秒表显示器 一、实 实 验目得 掌握定时/计数器得中断法工作原理,熟悉 C51 编程与调试方法 二、实验要求: 1、实验电路原理图如教材 P260 A、65 图所示.程序开始时显示“00”;当1s 产生时,秒计数加1;秒计数到 59 后,自动从“00”开始。 2、采用12MHz晶振频率,T0 定时方式 1、50ms 定时中断法编程(1s 需要经过 20 软循环)(流程图与参考程序模版如下所示).//定时中断方式实现得电子秒表 15()件文头ﻩ(定义无符号字符型变量 t—-中断次数计数器,并赋初值0(定义无符号字符型变量 second—-秒计数器,并赋初值 0(定义位于 ROM 区得无符号字符型数组table-—显示字模)timer0() (中断函数关键词){ ﻩ()0T 闭关ﻩ(初值重装载 0x3cb0) ()1增器数计数次断中ﻩ {)02==t(fiﻩﻩ ﻩ // 秒1于当相,次 02断中若ﻩ ;0=tﻩﻩﻩﻩﻩﻩﻩﻩ //中断次数计数器清零 ﻩ ;++dnocesﻩﻩ ﻩ // 零清器数计秒ﻩ }()零清,06 到达值器数计秒若ﻩﻩ()值示显得 dnoces 量变出输别分口 2P与0Pﻩ()0T动启ﻩﻩ} main(){ ﻩ ;]01/dnoces[elbat=0Pﻩﻩ // 值示显出输别分口 2P 与 0Pﻩ ;]01%dnoces[elbat=2Pﻩ(定义T0 定时方式 1—-TMOD)05()0LT与0HT——载加0bc3x0值初出溢 smﻩ()AE,0TE——化始初断中ﻩ(启动 T0) (死循环)3、编程思路及C1 51 源程序: : 4、仿真运行效果: 5、实验小结 : 本次实验进行得比较顺利,根据指导材料中提供得流程图完成了源程序得编 写,成功生成了、hex文件,经过仿真运行达到了预期得实验结果.通过本次得 实验,我更加深入得了解到单片机定时/计数功能实现得机理,通过与单片机中 断功能得结合,可以完成更多得预期功能。但就是进过讨论我也发现,程序还就是存 在很大得缺陷,想要实现更加准确实现计时功能还需综合利用各种知识完善程 序。 《单片机原理及应用》 实 验 报 告 2017—2018学年第一学期 班级: 152 专业: 电子科学与技术 姓名: 子路 学号: 教师: 实验一:Keil C51 一、实验目的 1、熟悉Keil C51单片机应用开发系统 2、熟悉Keil C51的调试技巧 二、实验内容 1、安装好了Keil软件以后,我们打开它。打开以后界面如下: 2、我们先新建一个工程文件,点击“Project->New Project„”菜单,如下图: 3、选择工程文件要存放的路径 ,输入工程文件名 LED, 最后单击保存.4、在弹出的对话框中选择 CPU 厂商及型号 5、选择好 Atmel 公司的 AT89S52 后 , 单击确定 6、在接着出现的对话框中选择“是”。 7、新建一个 C51 文件 , 单击左上角的 New File 如下图所示: 8、保存新建的文件,单击SAVE如下图: 9、在出现的对话框中输入保存文件名MAIN.C(注意后缀名必须为.C),再单击“保存”,如下图: 10、保存好后把此文件加入到工程中方法如下 : 用鼠标在 Source Group1 上单击右键 , 然后再单击 Add Files to Group ‘Source Group 1' 如下图: 11、选择要加入的文件 , 找到 MAIN.C 后 , 单击 Add, 然后单击 Close 12、在编辑框里输入如下代码: 13、到此我们完成了工程项目的建立以及文件加入工程 , 现在我们开始编译工程如下图所示 : 我们先单击编译, 如果在错误与警告处看到 0 Error(s)表示编译通过: 14、生成.hex 烧写文件,先单击Options for Target,如图: 15、在下图中,我们单击 Output, 选中 Create HEX F。再单击“确定” 16、打开文件夹‘实验1’,查看是否生成了HEX文件。如果没有生成,在执行 一遍步骤10到步骤12,直到生成。 三、实验工具(软件、硬件等) 1、Keil 2、计算机 实验二:Proteus软件学习 一、实验目的 1、了解Proteus的基本功能 2、熟悉Proteus的设计环境Preoteus ISIS及第三方编译工具Keil 3、掌握Proteus中实现单片机系统设计与仿真的步骤与方法 二、实验内容 设计与仿真的开发过程 Proteus强大的单方机系统设计与仿真功能,使之成为单片机系统应用开发和改进手段之一。 开发的整个过程都是在计算机上完成的,其过程一般分为三步: 1)Proteus 电路设计:在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气现则检查等。 2)Proteus 源程序设计和生成目标代码文件:在ISIS平台上或借助第三方编译工具进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*hex)。 3)Proteus仿真:在ISIS平台上将目标代码文件加载到单片机系统中,由此实现系统实时交互与协同伤真。 三、实验工具(软件、硬件等) 1、载有Proteus的计算机一台 实验三:LED流水灯 一、实验目的 1、用Keil软件编写程序并利用开发板仿真 2、学习LED灯工作原理 二、实验内容 延时实现LED流水灯效果P2口八个灯作跑马灯。采用了寄存器存中间数。 三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套 四、实验结果及分析 实验四:静态数码管 一、实验目的 1、用Keil软件编写程序并利用开发板仿真 2、学习静态显示管工作原理 二、实验内容 静态数码管流动显示0~9 二、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套 四、实验结果及分析 实验五:按键移位动态显示 一、实验目的 1、用Keil软件编写程序并利用开发板仿真 2、学习静态显示管工作原理 二、实验内容 静态显示管,按键不同显示不同 三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套 四、实验结果及分析 实验六:中断INT0+INT1 一、实验目的 1、用Keil软件编写程序并利用开发板仿真 2、学习中断INT0和INT1的工作原理 二、实验内容 试验数码管上显示外部中断计数,用单片机脚直接控制数码管和外部中断使用 三、实验工具(软件、硬件等)1.载有Keil软件的计算机一台 2.开发板一套 四、实验结果及分析 目录 第一章单片机简介....................................................2 第二章 实验要求..................................................3 第三章实验设备......................................................3 第四章实验安排......................................................4 第五章实验内容......................................................4 LED灯实验.......................................................4 步进马达试验....................................................5 独立按键控制LED实验............................................7 矩阵键盘实验....................................................9 静态数码管实验.................................................12 动态数码管实验.................................................14 NE555脉冲发生器实验(定时/计数器).............................16 RS232串口通信实验(接收与发送)..................................21 第六章收获体会.....................................................25 单片机实验报告 第一章单片机简介 单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性! 单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。 1.SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。 2.MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。 Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。 3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求 单片机实验报告 应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。 MCS51系列微控制器应用广泛,在家电、汽车甚至航空等领域都有其活跃的身影。然而,普通51系列微控制器内部资源有限,像我用Proteus构建微控制器虚拟实验室选用的AT89C52只有三个定时器、一个全双工的串行口和中断控制,并且其数据处理能力有限,不适合对大量数据进行复杂分析和运算。 因此,在不重新选型(可选用SoC)的前提下,为实现我们所需要的功能,就需要进行外围扩展。针对微控制器的特点,我们首先考虑串行扩展,因为微控制器的I/O引脚有限,并行扩展一则外围芯片面积比较大,二则对抑制EMI不利。 第二章 实验要求 1.学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法 2.熟悉TD-51单片机系统板及实验系统的结构及使用 3.进行MCS51单片机指令系统软件编程设计与硬件接口功能设 4. 学习并掌握Keil C51软件联机进行单片机接口电路的设计与编程调试 5.完成指定MCS51单片机综合设计题 第三章实验设备 1.HC600S-51单片机开发板 2.Keil C51 3.普中自动下载软件 第四章 实验安排 1.LED灯实验 单片机实验报告 2.步进马达试验 3.独立按键控制LED实验 4.矩阵键盘实验 5.静态数码管实验 6.动态数码管实验 7.NE555脉冲发生器实验(定时/计数器)8.RS232串口通信实验(接收与发送) 第五章 实验内容 一、LED灯实验 1.基本要求 利用位移循环指令实现LED灯的闪烁 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图 4.电路原理图 单片机实验报告 5.程序 #include main(){unsigned int i;while(1) {for(i=0,P0=1;i<4;i++){d(500);P0=(P0<<2);}}} 二、步进马达试验 1.基本要求 编程实现马达的正反转,调速等功能 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一) 单片机实验报告 图一 图二 4.电路原理图 上图图二 5.程序 #include “reg52.h” #define speed 2 sbit PH1 = P1^0; //定义管脚 sbit PH2 = P1^1;sbit I01 = P1^2;sbit I11 = P1^3;sbit I02 = P1^4;sbit I12 = P1^5; void delay(int time); void Go(){ //A PH1 = 0;//PH1为0 则A线圈为反向电流 I01 = 0;I11 = 0; //以最大电流输出 PH2 = 0;//PH2为0 则B线圈为反向电流 I02 = 1;I12 = 1; //输出0 delay(speed);//圈为反向电流 I01 = 1;//输出0 I11 = 1; PH2 = 1;//PH2为1 则B线圈为正向电流 I02 = 0;//以最大电流输出 I12 = 0; delay(speed);//B PH1 = 1; //PH1为1 则A线圈为 正向电流 I01 = 0; //以最大电流输出 I11 = 0; PH2 = 1;//PH2为1 则B线圈为正 向电流 I02 = 1;//输出0 I12 = 1; delay(speed); PH1 = 1; //PH1为1 则A线圈为正向电流 I01 = 1;I11 = 1; PH2 = 0; //PH2为0 则B线圈为反向电流 I02 = 0;I12 = 0;delay(speed);} void delay(int time){ int i,j; for(j=0;j <= time;j++) for(i =0;i <= 120;i++);} void main(){ while(1) { Go();//步进电机运行 } } 单片机实验报告 三、独立按键控制LED实验 1.基本要求 通过编程控制8个独立按键分别控制8个LED灯的开关 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一) 图一 图二 4.电路原理图 上图图二 5.程序 #include P1口 #define uchar unsigned char #define uint unsigned int void Delayms(unsigned int c); //延时10ms uchar Key_Scan();void main(void){ unsigned char ledValue, keyNum; ledValue = 0x01; while(1) { keyNum = Key_Scan();//扫描键 盘 switch(keyNum) { case(0xFE): //返回按 键K1的数据 ledValue = 0x01; break; 单片机实验报告 case(0xFD): ledValue = 0x02; break;case(0xFB): ledValue = 0x04; break;case(0xF7): ledValue = 0x08; break;case(0xEF): ledValue = 0x10; break;case(0xDF): ledValue = 0x20; break;case(0xBF): ledValue = 0x40; break;case(0x7F): ledValue = 0x80; //返回按键K2的数据 //返回按键K3的数据 //返回按键K4的数据 //返回按键K5的数据 //返回按键K6的数据 //返回按键K7的数据 //返回按键K8的数据 break;default: break; } GPIO_LED = ledValue;//点亮LED灯 } } uchar Key_Scan(void)//键盘扫描函数 { uchar i,n=0xff; if(P1==0xff)goto Scan_r;//无键按 下,返回 goto Scan_r;Scan_1: while(P1!=0xff);//等待键释放 Delayms(10);Scan_r: return n;} void Delayms(uint x){ uint n; for(;x>0;x--) { for(n=0;n<123;n++) {;} } } 四、矩阵键盘实验 1.基本要求 编程由16个矩阵按键控制数码管显示相应的数值 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。 3.接线图 单片机实验报告 见下图图一 图一 图二 4.电路原理图 见上图图二 5.程序 #include uchar ScanKey(void);void Delayms(uint x);main(){ unsigned char ledValue;uchar i;ledValue = 0x01;loop: i = ScanKey(); switch(i) { case 0xee: ledValue = ~0x3F; break; case 0xde: ledValue = ~0x06; break; case 0xbe: ledValue = ~0x5B; break; case 0x7e: ledValue = ~0x4F; break; case 0xed: ledValue = ~0x66; break; case 0xdd: ledValue = ~0x6D; break; 单片机实验报告 case 0xbd: ledValue = ~0x7D; break; case 0x7d: ledValue = ~0x07; break; case 0xeb: ledValue = ~0x7F; break; case 0xdb: ledValue = ~0x6F; break; case 0xbb: ledValue = ~0x77; break; case 0x7b: ledValue = ~0x7C; break; case 0xe7: ledValue = ~0x39; break; case 0xd7: ledValue = ~0x5E; break; case 0xb7: ledValue = ~0x79; break; case 0x77: ledValue = ~0x71; break; } GPIO_LED = ledValue;i=0;goto loop;} void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } uchar ScanKey(void)//键盘扫描函数 { uchar i,n=0xff; P1=0xf0; if(P1==0xf0)goto Scan_r;//无键按下,返回 for(i=0,P1=0xfe;i<4;i++) { if((P1&0xf0)!=0xf0) { Delayms(10); if((P1&0xf0)!=0xf0) { n= P1; goto Scan_1;} } P1=(P1<<1)+1; //扫描下 一行 } goto Scan_r;Scan_1: 单片机实验报告 P1=0xf0;while((P1&0xf0)!=0xf0);//等待键 释放 Delayms(10); Scan_r: P1=0xff;return n;} } 五、静态数码管实验 1.基本要求 编程使数码管显示字符0-F 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线框图(图一) 图一 单片机实验报告 图二 4.电路原理图 见上图图二 5.程序 #include {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){ unsigned int LedNumVal;//定义变量 while(1) { // 将字模送到P0口显示 LedNumVal++; P0 = LED7Code[LedNumVal%16]; Delayms(1000); //调用延时程序 } } 单片机实验报告 void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } 六、动态数码管实验 1.基本要求 编程实现8个数码管的动态扫描。通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图(图一) 图一 图二 单片机实验报告 图三 4.电路原理图 见上图图 二、图三 5.程序 #define uint unsigned int void Dsplay();void Delayms(uint x);uchar mDS[6];uchar code cDsCode[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(){ uchar i; for(i=0;i<6;i++)mDS[i]=i+1; loop: Dsplay(); goto loop;} void Dsplay()//动态扫描显示 {uchar i; for(i=0,P2=0x01;i<6;i++) { P1=cDsCode[mDS[i]];//输出段 Delayms(1000); P2=P2<<1; //选通下一位 } P2=0x00; //关闭位选通 } void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } 七、NE555脉冲发生器实验(定时/计数器) 1.基本要求 2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图 4.电路原理图 5.程序 #include CYMOMETER ”};uchar code EN_CHAR2[16]={“FREQ: HZ”}; 单片机实验报告 void TIMER_Configuration();//初始化定时器 ulong Freq; //用来存放要显示的频率值 ulong TimeCount;//用于计算1S钟的 void main(){ uchar i, freqValue[6]; LcdInit();TIMER_Configuration();for(i=0;i<16;i++){ LcdWriteData(EN_CHAR1[i]);} LcdWriteCom(0xc0);//第二行显示 for(i=0;i<16;i++){ LcdWriteData(EN_CHAR2[i]);} while(1){ if(TR0==0) //当计数器停下的时候,表明计数完毕 { Freq = Freq + TL1; //读取TL的值 Freq = Freq +(TH1 * 256);//读取TH的值 LcdWriteCom(0xc8); //--求频率的个十百千万十万位--// freqValue[0]='0'+Freq%1000000/100000; freqValue[1]='0'+Freq%100000/10000; freqValue[2]='0'+Freq%10000/1000; freqValue[3]='0'+Freq%1000/100; freqValue[4]='0'+Freq%100/10; freqValue[5]='0'+Freq%10; for(i=0;i<5;i++)//从最高位开始查找不为0的数开始显示(最低位为0显示0) { if(freqValue[i]==0x30) { freqValue[i]=0x20;//若为0则赋值空格键 } else 单片机实验报告 { break; } } for(i=0;i<6;i++) { LcdWriteData(freqValue[i]); } Freq=0;//将计算的频率清零 TH1=0;//将计数器的值清零 TL1=0; TR0=1;//开启定时器 TR1=1;//开启计数器 } } } void TIMER_Configuration(){ TMOD=0x51;TH0=0x3C;TL0=0xB0;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;} void Timer0()interrupt 1 { TimeCount++;if(TimeCount==20)//计时到1S { TR0=0; TR1=0; TimeCount=0; } //--12MHZ设置定时50ms的初值--// TH0=0x3C;TL0=0xB0;} void Timer1()interrupt 3 { 单片机实验报告 //--进入一次中断,表明计数到了65536--// Freq=Freq+65536; } #include“lcd.h” void Lcd1602_Delay1ms(uint c) //误差 0us { uchar a,b;for(;c>0;c--){ for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发送命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1);//等待数据稳定 LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0;} #else void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0;//使能清零 LCD1602_RS = 0;//选择写入命令 LCD1602_RW = 0;//选择写入 LCD1602_DATAPINS = com;// Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1); 单片机实验报告 LCD1602_DATAPINS = com << 4;//发送低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0;//使能清零 LCD1602_RS = 1;//选择输入数据 LCD1602_RW = 0;//选择写入 LCD1602_DATAPINS = dat;//写入数据 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0;} #else void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0;//使能清零 LCD1602_RS = 1; //选择写入数据 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//写入低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38);//开显示 单片机实验报告 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点 } #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32);//将8位总线转为4位总线 LcdWriteCom(0x28);//在四位线下的初始化 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点 } #endif 八、RS232串口通信实验(接收与发送) 1.基本要求 a.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化; b.使用串口调试助手(Baud 9600、数据位 8、停止位 1、效验位无)做为上位机来做收发试验; c.利用串口调试助手中字符串输入进行数据发送,接受窗口显示收到的数据。2.实验内容 在Keil C51中进行程序的编写设计并生成.HEX文件,按照下图连接电路后将HC600S-51单片机开发板接通电源,按下开关,录入。打开普中录入生成.HEX文件,加载程序,观察实验结果,如果不正确对程序进行改进后重复此操作。实验结束后先断电源再拆线,将元器件归位后离开。3.接线图 单片机实验报告 4.电路原理图 5.程序 #include LcdWriteData(ChCode[i]);} UsartConfiguration();while(1){ if(RI == 1) //查看是否接收到数据 { receiveData = SBUF;//读取数据 单片机实验报告 RI = 0; //清除标志位 LcdWriteCom(0xC0); LcdWriteData('0' +(receiveData / 100)); // 百位 LcdWriteData('0' +(receiveData % 100 / 10));// 十位 LcdWriteData('0' +(receiveData % 10)); // 个位 } } } void UsartConfiguration(){ SCON=0X50; //设置为工作方式1 TMOD=0X20;//设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的TL1=0XF3;TR1=1; //打开计数器 } #include“lcd.h” void Lcd1602_Delay1ms(uint c) //误差 0us { uchar a,b;for(;c>0;c--){ for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发送命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1);//等待数据稳定 LCD1602_E = 1; //写入时序 单片机实验报告 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0;} #else void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0;//使能清零 LCD1602_RS = 0;//选择写入命令 LCD1602_RW = 0;//选择写入 LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4;//发送低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1;//写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0;//使能清零 LCD1602_RS = 1;//选择输入数据 LCD1602_RW = 0;//选择写入 LCD1602_DATAPINS = dat;//写入数据 Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0;} #else void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //选择写入数据 LCD1602_RW = 0;//选择写入 LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); 单片机实验报告 LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//写入低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38);//开显示 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点 } #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32);//将8位总线转为4位总线 LcdWriteCom(0x28);//在四位线下的初始化 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点 } #endif 单片机实验报告 第六章 收获体会 本次微控制器综合设计基本上使用了所选微控制器的所有资源,进一步熟悉和加深了对中断、定时器和串行通信的理解和使用。我觉得软件实验就是让我们初学者熟悉keil的使用,然后复习下汇编的思想和掌握程序的流程,所以软件实验可以很快的完成,并且慢慢熟悉调试的强大功能。硬件设计中,仿真让我很有感触,感觉蛮好玩的,可以摒弃麻烦的实验硬件自己在寝室玩而且不受硬件状态的限制,即便出错了也不会损坏。当然更重要的是这种好习惯,仿真完后再去在实验板上验证会比直接要来的确切而且便捷,至少不要老是去插拔线。在做实验中在同学指导下我试用C语言来编写程序,确实发现比汇编语言容易编写也容易理解,以前的实验还是有参考资料的习惯,现在什么都开始自己写感觉还是很有成就感的,当然这是基于程序本身就那么几行很容易编写,也不是说参考不好。总而言之,这学期的单片机实验还是收获颇丰的。相信在以后的实验学习实践工作中都会有个潜移默化的作用的。第二篇:红绿灯实验报告
第三篇:单片机实验报告[范文模版]
第四篇:单片机实验报告
第五篇:单片机实验报告