单片机实验报告(超细致).doc_第1页
单片机实验报告(超细致).doc_第2页
单片机实验报告(超细致).doc_第3页
单片机实验报告(超细致).doc_第4页
单片机实验报告(超细致).doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机与嵌入式系统 课程设计(论文)设计(论文)题目 单片机与嵌入式系统实验报告 学院名称 专业名称 学生姓名 学生学号 任课教师 设计(论文)成绩 教务处 制2014年 12 月 6 日学生学习心得经过一学期的系统学习,由初识到了解,不断深化学习单片机与嵌入式系统的过程中,和所有初学者一样,我也曾遇到各种各样的困难,犯过五花八门的错误。我从基础入手,先学会简单运用Keil软件进行简单的编程。踏实一步步向前迈进,学习中注意把握设计技巧,培养起利用软件配合风标电子微控制器仿真实验实训箱、进行程序设计,实训箱功能实现的能力并扎实掌握单品机系统的方法和技术。写过的程序越繁杂,做过的东西越多,越是能体会到学习的乐趣。要想使自己成为单片机编程与设计高手,最重要的是不气馁,不断学习。知识无穷尽,明天的我一定会感激今天努力的自己!感谢这一学期以来老师的细心指导,由衷的向您道一声:“老师,您辛苦了!”学生(签名): 年 月 日诚信承诺 本人郑重声明所呈交的课程报告是本人在指导教师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注的地方外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意。学生(签名):任课教师评语成绩评定: 任课教师(签名): 年 月 日单片机与嵌入式系统实验报告 目录1. 单片机实验平台简介 .1 2. Keil uVision 4软件简介.12.1 C51单片机开发软件整体结构.1 2.2 Keil C51单片机软件的特点.13. uVision 4编程实验(加全注释) .1 3.1 实验一 IO开关量输入实验.1 3.2 实验二 IO驱动实验.3 3.3 实验三 外部中断计数试验.4 3.4 实验四 计数器实验.5 3.5 实验五 74LS164串入并出实验.7 3.6 实验六 步进电机控制实验.8 3.7 实验七 数码管驱动实验.9 3.8 实验八 LCD12864显示实验.104.实验感悟 .131.单片机实验平台简介 实验采用风标电子微控制器仿真实验实训箱,系统采用“核心板+底板”双层结构,通过更换不同型号核心板,可学习不同系列的单片机及CPLD等。此实验系统针对快速掌握运用单片机和CPLD而开发的,含大量的硬件资源,能不同程度地满足现代电子技术实验的要求。同时,本系统丰富的功能单元,能够做出超出大纲要求的的综合实验。2.Keil uVision 4软件简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,在功能上、结构性、可读性、可维护性上有明显的优势。提供了包括C编译器、宏汇编、连接器、库管理和一个强大的仿真调试器。使用C语言编程,Keil几乎就是必选,其方便易用、强大的软件仿真调试工具令人事半功倍。 2.1 C51单片机开发软件整体结构uVision是C51 for Windows集成开发环境(IDE),可完成编辑、编译、连接、调试、仿真整个开发流程。 2.2 Keil C51单片机软件的特点 (1)Keil C51生成的目标代码效率非常高。 (2)与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 (3)Keil Vision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。3. uVision 4编程实验(加全注释) 3.1 实验一IO开关量输入实验(全注释) 一、实验目的 熟悉单片机的最小系统,了解单片机I/O的结构;掌握按键键值的读入和处理;学习简单程序的编写。 二、实验要求 1、利用单片机,按键和发光二极管,构成一个LED灯控制电路; 2、上电时, 点亮LED, 按下K1时, LED向左移一位 ,按下K2时, LED向右移一位。 三、参考程序/* * 说明: IO开关量输入实验 * 功能描述: 按键扫描程序 * 上电时, 点亮P00口LED ,按下K1时, LED向右移一位,按下K2时, LED向左移一位 * 接线说明:P10-K1,P11-K2,P00P07D1D8*/#include /52系列单片机头文件#include /包含_crol_(左移),_cror_(右移)函数所在的头文件/*下面为数据类型宏定义,我们使用宏定义的目的就是将unsigned int用uint代替,将unsigned char用uchar代替,可以在后面的程序看到,我们只用uint i,j;*/#define uchar unsigned char /无符号字符型#define uint unsigned int /无符号整型/*单片机IO口引脚定义*/#define LED P0 /定义P0口,用于驱动LED灯sbit K1 = P10; /声明单片机P0口的第1位 sbit K2 = P11; /声明单片机P0口的第2位 /*函数定义*/uchar scan_key(); /声明无符号字符型变量scan_key()void proc_key(uchar key_v); /定义按键扫描函数,声明子函数void delayms(uchar ms); /定义延时函数,声明子函数/*主函数*/void main(void) /主函数uchar key_s,key_v; /声明两个无符号字符型变量key_s,key_vkey_v = 0x03; /初始化IO口,0011LED = 0xfe; /1111 1110,最低位P1.0口对应LED被点亮while(1) /当1时,继续;大循环 key_s = scan_key(); /键盘扫描开始if(key_s != key_v) /判断按键是否按下 delayms(10); /延时消抖key_s = scan_key(); if(key_s != key_v)/按键号key_v = key_s; proc_key(key_v);/*键盘扫描函数*/uchar scan_key() /定义无符号字符型子函数 uchar key_s; /定义一个无符号字符型变量key_skey_s = 0x00; key_s |= K2; key_s 0时,循环;即延时约i毫秒for(i = 0; i 120; i+);/for循环,循环120次3.2 实验二IO驱动实验(全注释) 一、实验目的 了解I/O口的电气特性和驱动能力。掌握程序编写的方法。了解LED电路中加入限流电阻的原因。 二、实验要求 利用单片机及8个发光二极管等器件,构成一个流水灯单片机系统。 三、参考程序/* * 说明: IO驱动实验 * 功能描述: 实现LED流水灯 * 接线说明:P00P07-D1D8 */#include /52系列单片机头文件#include /包含_crol_(左移),_cror_(右移)函数所在的头文件/*数据类型宏定义,我们使用宏定义的目的就是将unsigned int用uint代替,将unsigned char用uchar代替,方便调用*/#define uchar unsigned char /数据类型宏定义,无符号字符型#define uint unsigned int /数据类型宏定义,无符号整型#define LED P0 /定义P0口,用于驱动LED/*延时函数*/ void delayms(uchar ms) /延时函数子函数体 unsigned char i; /定义一个无符号字符型变量iwhile(ms-) /延时ms,还可以这么写,uint i,j;for(i=xms,i0;i-) for(j=120;j0;j-); for(i = 0; i 120; i+); /循环120次 /*主函数*/void main(void) /主函数 LED = 0xfe;/初始化P0口while(1) /大循环 delayms(250); /延时250ms LED = _crol_(LED,1);/循环右移1位,点亮下一个LED3.3 实验三外部中断计数实验(全注释) 一、实验目的 掌握单片机外部中断的设置,中断函数的处理。 二、实验要求 在单片机接一个按键作为外部的中断输入信号,通过数码管显示中断次数。 三、参考程序/* * 说明: 外部中断计数实验 * 功能描述: 通过一个安键来提供中断信号,但是由于按键有抖动现象,所以每按一次;有可能产生多次计数脉冲;当有外部中断时(用按键K1模拟外部中断),计数器加1 * 接线说明:P00P07SASH,P10P13C0C3,P32K1 */#include /52系列单片机头文件#include /头文件#define uchar unsigned char /数据类型宏定义,方便数据定义#define uint unsigned int /数据类型宏定义,用uint代替unsigned int/*共阳数码管编码表*/unsigned char code dis_code11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90, 0xff; / 数码管为共阳,对应字符为0, 1, 2, 3,4, 5, 6, 7, 8, 9, off unsigned char dis_buf4;/显示缓冲区uint int0_cnt=0; /计数初始化/*函数定义*/ void update_disbuf(); /定义更新子函数void delayms(uint j); /定义无返回延时子函数/*主函数*/ void main(void) IE=0X81; /开总中断和外中断0IT0=1;/下降沿触发P0=0xff; /初始化IO口P1=0; /P1口置低电平 dis_buf0=dis_code0;dis_buf1=dis_code0; /缓冲器初始化 dis_buf2=dis_code0; dis_buf3=dis_code0; /缓冲器初始化while(1) /大循环 P0=dis_buf3;P1=0x01;/ 显示千位 delayms(5);P0=0xff; /延时5ms,P0=1111 1111初始化IO口 P0=dis_buf2; P1=0x02; / 显示百位 delayms(5);P0=0xff; /延时5ms,P0=1111 1111初始化IO口 P0=dis_buf1; P1=0x04; / 显示十位 delayms(5); P0=0xff; /延时5ms,P0=1111 1111初始化IO口 P0=dis_buf0; P1=0x08; / 显示个位 delayms(5);P0=0xff;/延时5ms,P0=1111 1111初始化IO口/*INT0中断处理函数*/void ex_int0()interrupt 0 /外部中断INT0中断处理子函数体EX0=0; /关闭中断int0_cnt+; /计数器加1if(int0_cnt9999) /判断int0_cnt=0; dis_buf3=dis_codeint0_cnt/1000;/分离出千位数dis_buf2=dis_codeint0_cnt%1000/100;/分离出百位数dis_buf1=dis_codeint0_cnt%100/10;/分离出十位数dis_buf0=dis_codeint0_cnt%10;/分离出个位数EX0=1; /开中断/*延时函数*/void delayms(uint j) uchar i; /定义一个无符号字符型变量ifor(;j0;j-) /for循环,延时 i=250; while(-i); i=249; while(-i); 3.4 实验四计数器实验(全注释) 一、实验目的 掌握定时器,计数器的寄存器设置。学会定时器中断函数的处理。 二、实验要求 利用定时器和计数器组成一个测频电路。通过数码管显示。 三、参考程序/* * 说明: 计数器实验 * 功能描述: 计数器程序,对外部脉冲进行计数,并通过4位数码管显示计数值 * 接线说明:P00P07SASH,P20P23C0C3,P34外部脉冲*/#include /52系列单片机头文件#include /头文件#define uchar unsigned char /数据类型宏定义,用uchar代替unsigned char#define uint unsigned int /数据类型宏定义,用uint代替unsigned int#define out P0 /IO端口定义/*共阳数码管 0 , 1 ,2 ,3 , 4 ,5 ,6 , 7, 8 ,9 */uchar code seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01;uint i = 0; /全局变量 uint cnt=0; /全局变量,无符号整型/*主函数*/void main(void) /主函数 int j; /定义局部变量j,整型TMOD=0x15; / 0001 0101定时器0工作于计数方式,工作方式1,16位计数TH0=0;/ 清零计数器高八位TL0=0; / 清零计数器第八位TH1=0x3C;/ 0011 1100, 12M晶振工作下,机器周期为1微秒,时间常数为50000,计数初值为216-50000,定时时长50msTL1=0xB0; / 0000 1010TR0=1;/ 启动定时器0TR1=1;/ 启动定时器1IE=0x88;/ 1000 1000打开定时中断1和总中断while(1) P2=0x00; out = segcnt/100; P2 = 0x01;for(j=0;j100;j+); / 输出百位 P2=0x00; out = segcnt%100/10;P2 = 0x02; for(j=0;j100;j+); / 输出十位P2=0x00;out = segcnt%10;P2 = 0x04; for(j=0;j100;j+); / 输出个位 /*计数器T0中断处理函数*/void Timer1_ISR() interrupt 3 /计数器T0中断处理子函数 static char j = 0; /定义静态局部常量,字符型i+; /自加1TH1=0x4C; /重设定时器值,50ms 12MHz XTALTL1=0x00;if(+j = 20) /循环20次,50ms * 20 = 1Sj = 0; /赋初值0给ji = (TH0 8) | TL0; /1S内的计数值cnt=i; i=0; / TH0 = 0;TL0 = 0; /清零计数3.5 实验五74LS164串入并出实验(全注释) 一、实验目的 理解串行通讯和并行通讯的含义;了解74LS164的工作原理,理解串转并的原理;掌握单片机串口用于并行输出口扩展的原理。 二、实验要求 利用单片机的串行口和IO端口串行输出,通过移位寄存器74LS164转换为并行数据送给8个LED完成串行端口扩展,实现跑马灯闪烁。 三、参考程序/* * 说明: 74LS164串入并出实验 * 功能描述: 控制74LS164;循环送出从0到0XFF 256个8位数据;实现串行数据输入 并行数据输出 - * 接线说明:P10-/CLR,P11-CP,P12-SI,QAQHD1D8 ,LED 循环熄灭 */#include /52系列单片机头文件#define uchar unsigned char /数据类型宏定义,用uchar代替unsigned char#define uint unsigned int /数据类型宏定义,用uint代替unsigned intvoid delayms(uint);/*端口定义*/sbit CLR = P10; sbit CP = P11; sbit SI = P12;/P1.0口清除,P1.1口时钟脉冲/*nms延时子程序*/void Delay_Nms(uint n) /延时子函数体 uint i,j; /定义两个无符号整型变量for(i=0;in;i+) /for循环,n次后跳出for(j=0;j125;j+); /for循环,125次后跳出/*发送一字节数据*/void SendOneByte(uchar Bdat) /发送子函数体 uchar i; /无符号字符型变量i for(i=0;i8;i+) /for循环,8次后跳出 SI=(bit)(Bdat & 0x80); /判断输出数据 CP=0; /初始化移位时钟 Bdat=1; /更新数据 CP=1; /来一个时钟脉冲/*主函数*/void main(void) /主函数 uchar i; /定义一个无符号字符型变量iCLR = 0; /清除164输出CLR = 1; /允许164输出 while(1) /大循环 for(i=0;i0xff;i+) /for循环,1111 1111=255次后跳出 SendOneByte(i); /译码显示 Delay_Nms(500);/延时500ms 3.6 实验六步进电机控制实验(全注释) 一、实验目的 了解单片机控制直流电机的基本原理;掌握控制直流电机转动的编程方法;了解脉宽调制(PWM)的原理。 二、实验要求 采用单片机的4个IO口来控制直流电机,编写程序,其中3个IO口驱动电机,另一个IO口控制电机的转动方向。 三、参考程序/* * 说明: 步进电机控制实验 * 功能描述: 控制步进电机实现正转、反转 - -* 接线说明:P00-K1,P01-K2,P20-SA,P21-SB,P22-SC,P23-SD */#include /52系列单片机头文件#define uchar unsigned char /数据类型宏定义,用uchar代替unsigned char#define uint unsigned int /数据类型宏定义,用uint代替unsigned int#define out P2 /定义P2口为输出口/*端口定义*/sbit pos=P00; sbit neg=P01; /定义P0.0,P0.1端口void delayms(uint); /定义延时子函数uchar code turn=0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03;/*主函数*/void main(void) /主函数 uchar i; /定义一个无符号字符型变量iout=0x03; /0000 0011赋值给outwhile(1) /大循环 if(!pos) /正转i = i 0 ? i-1 : 7; out=turni; delayms(500); /*延时函数*/void delayms(uint j) /延时函数子函数体uchar i; /定义一个无符号字符型变量ifor(;j0;j-) /for循环,j次后跳出 i=250; while(-i); i=249; while(-i);/循环250*250次 3.7 实验七数码管驱动实验(全注释) 一、实验目的 了解数码管显示原理;掌握读表程序的编写。 二、实验要求 利用IO口实现动态扫描数码管,数码管显示“12345678“。 三、参考程序/* * 说明: 数码管驱动实验 * 功能描述: LED数码管显示演示程序 ; 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 - -* 接线说明:P00P07-SASH, P20P27-C0C7 */#include /52系列单片机头文件#include /头文件unsigned char data dis_digit; /无符号字符型unsigned char code dis_code11=0xc0,0xf9,0xa4,0xb0,/ 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff; / 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf8; /dis_buf - 显于缓冲区基地址 unsigned char data dis_index; /dis_index - 显于索引基地址void main() /主函数 P0 = 0xff; P2 = 0x00; /端口初始化TMOD = 0x01; TH0 = 0xFC; /定时器0初始化 TL0 = 0x17; IE = 0x82; /开中断,启动定时0dis_buf0 = dis_code0x1;dis_buf1 = dis_code0x2;dis_buf2 = dis_code0x3; dis_buf3 = dis_code0x4;dis_buf4 = dis_code0x5; dis_buf5 = dis_code0x6;dis_buf6 = dis_code0x7; dis_buf7 = dis_code0x8;dis_digit = 0x01;/ dis_digit - 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0x01时 dis_index = 0; / dis_index - 显示索引, 标识当前显示数码管和缓冲区偏移量TR0 = 1; /启动定时器0while(1); /大循环void timer0() interrupt 1/ 定时器0中断服务程序, 用于数码管的动态扫描TH0 = 0xFA; TL0 = 0x17; /设置计数初值P2 = 0x00;/ 先关闭所有数码管P0 = dis_bufdis_index;/ 显示代码传送到P0口P2 = dis_digit;/ dis_digit - 位选通值,选通P2.0口数码管dis_digit = _crol_(dis_digit,1);/ 位选通值左移, 下次中断时选通下一位数码管dis_index+;/ dis_index &= 0x07;/ 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描3.8 实验八 LCD12864显示实验(全注释) 一、实验目的 了解图型液晶显示屏的控制原理和方法;了解汉字和图形的显示原理;掌握编写程序。 二、实验要求 编程在屏上显示汉字。 三、参考程序/* * 说明: LCD12864液晶显示实验 * 功能描述:显示字符,汉字,图形 - -* 接线说明:P30-RST,P26-CS2,P25-CS1,P22-EN,P23-RW,P24-RS,P00P07-DB0DB7 */#include /52系列单片机头文件#define uchar signed char /数据类型宏定义,用uchar代替unsigned char#define uint unsigned int /数据类型宏定义,用uint代替unsigned int#define lcdrow 0xc0 / 常量定义 设置起始行#definelcdpage 0xb8 /- 设置起始页#definelcdcolumn 0x40 /- 设置起始列#definec_page_max 0x08 /- 页数最大值#define c_column_max 0x40 /- 列数最大值#define bus P0 /定义P0端口为总线BUSsbit rst=P20; /定义P2.0口为rstsbit e=P22; /定义P2.2口为esbit rw=P23; /定义P2.3口为rwsbit rs=P24; /定义P2.4口为rssbit cs1=P25; /定义P2.5口为cs1sbit cs2=P26; /定义P2.6口为cs2void delayms(uint); /无变量返回延时函数申明void delayus10(void); /10us延时函数申明void select(uchar); /选择屏幕函数申明void send_cmd(uchar); /写命令函数申明void send_data(uchar); /写数据函数申明void clear_screen(void); /清屏函数申明void initial(void); /LCD初始化函数申明void display_zf(uchar,uchar,uchar,uchar); /显示字符函数申明void display_hz(uchar,uchar,uchar,uchar); /显示汉字函数申明void display(void); /在LCD上显示函数申明/*字符表-宋体12; 字体对应点阵:宽x高=8x16 -/取模方式:纵向取模下高位,从上到下,从左到右取模uchar code table_zf=0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/字P 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/字R0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/字O0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论