版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机实验指导书实验一、模拟开关灯实验一、实验目的1、认识单片机芯片内部基本结构和功能;2、学习Keil和Proteus软件的基本使用方法;3、了解了解单片机最小系统及单片机应用系统的设计过程。二、实验说明1、单片机应用系统基本过程1)启动Keil,创建一个项目文件*.UV2;2)选择单片机的型号,如AT89C51;3)单击菜单“File”→“New”命令,新建源程序文件,输入代码,保存为*.c;4)把源程序文件添加到项目中,在项目管理器中,在展开的“SourceGroup1”上单击右键,选择“AddFilestoGroup’SourceGroup1’”5)选中Target1,鼠标右键菜单“OptionsforTarget‘Target1’”命令,在“Output”选项卡中选中“CreateHEXfile”6)执行菜单“Project”→“Rebuildalltargetfiles”命令,编译项目并生成*.hex文件;7)打开ProteusISIS软件,建立硬件控制电路;8)用鼠标双击“ATC89C51”单片机弹出对话框,在“ProgramFile”中载入编译好的“*.HEX9)在Proteus环境中启动调试程序,观察仿真结果。三、实验内容及步骤1、实验内容使用单片机监控一个按键开关,通过一个发光二极管显示其工作状态。如果开关打开,LED灯熄灭;开关合上,LED灯亮2、硬件原理图3、软件设计#include<reg51.h>//包含的头文件,对单片机内部特殊功能寄存器进行了符号定义sbitLed=P1^0;//定义位名称sbitKey=P1^7;voidmain(){P1=0xff;while(1){Led=Key;}}画出程序流程图:四、思考题1、使用Keil和Proteus如何建立单片机开发系统,描述基本过程。2、单片机的最小系统包含哪些电路?实验二、流水灯实验一、实验目的1、学习单片机并行I/O端口的使用方法;2、学习延时子程序的编写;3、学习Keil和Proteus软件的基本使用方法。二、实验说明1、P1口为一组双向口,每位都可独立地定义为输入或输出线,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入(即:P1=0xff2、本实验中延时采用循环程序来实现,入口参数控制延时时间长短。三、实验内容及步骤1、实验内容P1口做输出口,接八位逻辑电平显示,编写程序,使发光二极管循环点亮。通过一个按键开关控制显示顺序,如果开关打开,LED自上而下依次点亮;开关合上,LED从下向上依次点亮。2、硬件原理图3、软件设计1)、画出程序流程图2)源程序#include<reg51.h>#defineucharunsignedchar//类型重定义#defineuintunsignedintsbitKey=P0^0;//定义位名称voidDelayMS(uintms);//延时函数原型声明voidmain(){uchari,keyPre,shift;Key=1;while(1){keyPre=Key;if(keyPre){shift=0x01;for(i=0;i<8;i++){P1=~shift;DelayMS(200);shift<<=1;}}else{shift=0x80;for(i=0;i<8;i++){P1=~shift;DelayMS(200);shift>>=1;}}}}voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}四、思考题1、MCS-51系列单片机的P0~P3四个I/O端口在结构上有何异同?使用时应注意的事项?实验三、定时器实验一、实验目的1、学习单片机内部计数器的使用和编程方法;2、掌握中断处理程序的编写方法;3、学习Keil和Proteus软件的基本使用方法。二、实验说明1、采用定时器方式设计一交通灯控制系统,使道路状态切换时间更准确。正常情况下,90s后信号灯由“红灯”转“黄灯”,经过2s的过渡后“黄灯”转“绿灯”,另外设东西方向、南北方向紧急开关各一个,紧急开关闭合时,相应方向切换成“绿灯”,以方便特种车辆通过。另设置一个开关,在晚上由人工闭合,此时所有的灯都变成黄灯。2、系统的晶振是12MHZ,定时器1工作于方式1,即16位定时器,定时器50000uS(50mS)中断一次,所以定时常数的设置可按以下方法计算:定时时间=(65536-定时常数)×1uS=50000uS定时常数=15536,(0x3CB0)对50mS中断次数计数10次,就是0.5秒钟。定时器0工作于方式1,定时20ms,定时常数=45536,(0XB1E00)。三、实验内容及步骤1、硬件原理图2、软件设计1)、画出程序流程图2)源程序#include<reg51.h>#include<stdio.h>unsignedchart0;voidyellow();//东西、南北方向同时打开黄灯voidyellowflash();//东西、南北方向同时打开黄灯,每隔0.5秒开始闪烁 voiddelay0_5s();//延时0.5秒voiddelayxms(unsignedchart);//延时t*0.5秒/******************************************************************函数名称:ex_intex0;函数功能:外部中断0服务子程序******************************************************************/voidex_intex0(void)interrupt0{ EA=0;//关闭中断,不允许中断嵌套 while((P3&0x04)==0)//检测外部中断0是否持续有效 { P1=0x1E;//东西方向绿灯亮、南北方向红灯亮,其它四个灯关闭。 } EA=1;//打开中断}/******************************************************************函数名称:ex_intex1;函数功能:外部中断1服务子程序******************************************************************/voidex_intex1(void)interrupt2{ EA=0;//关闭中断,不允许中断嵌套 while((P3&0x08)==0)//检测外部中断1是否持续有效 { P1=0x33;//东西方向红灯亮、南北方向绿灯亮,其它四个灯关闭。 } EA=1;//打开中断}/******************************************************************函数名称:tm_timer0;函数功能:定时器0服务子程序******************************************************************/voidtm_timer0(void)interrupt1{ EA=0;//关闭中断,不允许中断嵌套 while((P3&0x40)==0)//检测P3.6开关是否闭合 { yellow();//东西、南北方向同时打开黄灯 } TH0=0xb1;//20ms定时初值重新装入TL0=0xe0 EA=1;//打开中断}//主程序voidmain(){TMOD=0x11;//T1工作方式1,T0工作方式0EA=1;EX0=1;IT0=0;//打开外部中断0EX1=1;IT1=0;//打开外部中断1ET0=1;//打开定时器0中断 TH0=0xb1;//20ms定时初值重新装入TL0=0xe0 TR0=1;//启动定时器0 while(1)//无限循环 { P1=0x1e;//东西方向绿灯亮、南北方向红灯亮,其他四个灯关闭。 delayxms(180);//延时90秒 yellowflash();//东西、南北方向同时打开黄灯,每隔0.5秒闪烁一次 P1=0x33;//东西方向红灯亮、南北方向绿灯亮,其他四个灯关闭。 delayxms(180);//延时90秒 yellowflash();//东西、南北方向同时打开黄灯,每隔0.5秒闪烁一次 }}/******************************************************************函数名称:yellow;功能:东西、南北方向同时打开黄灯******************************************************************/voidyellow(){ P1=0x2d;//两个黄灯同时打开}/******************************************************************函数名称:yellowflash;功能:东西、南北方向同时打开黄灯,每隔0.5秒闪烁一次******************************************************************/voidyellowflash(){unsignedchari;for(i=0;i<2;i++){ P1=0x2d;//两个黄灯同时打开 delay0_5s(); P1=0xff;//两个黄灯同时关闭 delay0_5s(); }}/******************************************************************函数名称:delay0_5s函数功能:延时0.5s,用T1工作方式1定时50ms,再循环10次得到0.5s的延时时间******************************************************************/voiddelay0_5s(){for(t0=0;t0<10;t0++){TH1=0x3c;TL1=0xb0;TR1=1;while(!TF1);//TF1=1时50ms定时时间到TF1=0;TR1=0;}}/******************************************************************函数名称:delayxms;函数功能:在函数delay0_5s的基础延时,即延时t*0.5秒******************************************************************/voiddelayxms(unsignedchart){for(t0=0;t0<t;t0++)delay0_5s();}四、思考题1、如果更换不同频率的晶振,会出现什么现象?如何调整程序?实验四、外部中断实验一、实验目的1、掌握外部中断技术的基本使用方法;2、掌握中断处理程序的编写方法;3、学习Keil和Proteus软件的基本使用方法。二、实验说明1、外部中断的初始化设置共有三项内容:中断总允许即EA=1;外部中断允许即EXi=1(i=0或1);中断方式设置,中断方式设置一般有两种方式:电平方式和脉冲方式。本实验选用脉冲方式,中断请求信号由引脚INT0(P3.2)引入。2、51系列用于中断的控制寄存器有四个:TCON、IE、SCON及IP。3、中断过程分为三个阶段:中断请求、中断响应、中断服务。4、开关K0(中断请求信号)利用外部中断INT0接入。采用中断边沿触发方式,每中断一次,单片机对P1口完成一次读写操作。当P1.0~P1.3任何一位输出0时,相应的发光二极管就会发光。当开关K0来回拨动一次时,将产生一个下降沿信号,通过INT0发出中断请求。三、实验内容及步骤1、硬件原理图2、软件设计1)分别画出主程序和中断服务程序流程图2)源程序#include<reg51.h>sbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_2=P1^2;sbitP1_3=P1^3;sbitP1_4=P1^4;sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;/******************************************************************函数名称:ex_intex0;函数功能:外部中断0服务子程序******************************************************************/ voidex_intex0(void)interrupt0 { P1_0=P1_4; P1_1=P1_5; P1_2=P1_6; P1_3=P1_7; }//主程序 voidmain() { P1=0xff;//P1口四个按键位置1EX0=1;//开外部中断0EA=1;//开中断总开关 IT0=1;//外部中断0电平触发 while(1)//等待中断 {; }}四、思考题1、简述中断处理的一般过程。实验五、单片机之间的串行双机通信一、实验目的1、学习单片机串行口的工作原理;2、掌握串行通信的编程方法及波特率的设置;3、进一步学习定时器的功能和编程。二、实验说明1、本实验采用两台AT89C51单片机U1和U2进行串行双机通信设计。U1作为发送机,U2作为接收机,两者的发送脚RXD和接收脚TXD交叉连接。U1通过串行口间接控制与U2的P1口相连的8个LED发光管亮灭。2、单片机间通信采用串行口方式1,对单片机U1编程时,需令SM0=0,SM1=1;对单片机U2编程时,除了令SM0=0,SM1=1,还需设置REN=1,使其允许接收。3、晶体振荡器频率为11.0592MHz,选择波特率为9600b/s,SMOD=0,定时器1工作方式2:TH1=TL1=FDH。三、实验内容及步骤1、硬件原理图2、软件设计1)、画出程序流程图2)源程序⑴单片机U1的发送程序使用Keil软件建立“send”工程项目,建立源程序文件“send.c”,输入如下源程序:#include<reg51.h>//流水灯控制码unsignedcharTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};/********************************************************************函数名称:Send;函数功能:发送一个字节数据********************************************************************/voidSend(unsignedchardat){SBUF=dat;//将待发送数据写入发送缓冲器while(TI==0);TI=0;//用软件将TI清零}/********************************************************************函数名称:delay;函数功能:延时约150ms********************************************************************/voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//主程序voidmain(void){unsignedcharI;TMOD=0x20;//TMOD=00100000B,定时器T1工作在方式2SCON=0x40;//SCON=01000000B,串口工作在方式1PCON=0x00;//PCON=00000000B,波特率9600b/sTH1=0xfd;//给定时器T1高8位赋初值TL1=0xfd;//给定时器T1低8位赋初值TR1=1;//启动定时器T1while(1){for(i=0;i<8;i++)//共8位流水灯控制码{Send(Tab[i]);//发送数据idelay();//每发送一次数据,延时150ms再发送}}⑵单片机U2的接收程序使用Keil软件建立“receive”工程项目,建立源程序文件“receive.c”,输入如下源程序:#include<reg51.h>/********************************************************************函数名称:Receive;函数功能:接收串行口数据********************************************************************/unsignedcharReceive(void){unsignedchardat;while(RI==0);//空操作RI=0;//用软件将RI清零,为接收下一帧数据做准备dat=SBUF;//将接收缓冲器的数据存于datreturndat;}//主程序voidmain(void){TMOD=0x20;//TMOD=00100000B,定时器T1工作在方式2SCON=0x50;//SCON=01010000B,串口工作在方式1,允许接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600b/sTH1=0xfd;//给定时器T1高8位赋初值TL1=0xfd;//给定时器T1低8位赋初值TR1=1;//启动定时器T1REN=1;//允许接收while(1){P1=Receive();}}四、思考题1、异步串行通信协议的帧格式是怎样的?已知系统时钟频率和波特率,如何计算定时器初值?2、接收时采用中断方式时,程序代码应该如何改?实验六、数码管显示4×4阵列式键盘按键一、实验目的1、掌握数字、字符转换成显示段码的软件译码方法2、掌握键盘和显示器的接口方法和编程方法;3、掌握阵列式键盘的硬件组成和软件编程方法。二、实验说明1、本实验提供了一个4X4小键盘,向P0口的低四位逐个输出低电平,如果有键盘按下,则相应输出为低,如果没有键按下,则输出为高。通过输出的列码和读取的行码来判断按下什么键。2、去抖动,有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。三、实验内容及步骤1、硬件原理图2、源程序及流程图#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F的显示代码ucharkeys_scan();voiddelay(uinti);voidmain()//主程序{ucharkey;P0=0x00;//数码管灭,为显示键码作准备while(1){key=keys_scan();//调用键盘扫描,switch(key){case0xee:P0=dofly[0];break;//0按下相应的键显示相应的码值case0xde:P0=dofly[1];break;//1case0xbe:P0=dofly[2];break;//2case0x7e:P0=dofly[3];break;//3case0xed:P0=dofly[4];break;//4case0xdd:P0=dofly[5];break;//5case0xbd:P0=dofly[6];break;//6case0x7d:P0=dofly[7];break;//7case0xeb:P0=dofly[8];break;//8case0xdb:P0=dofly[9];break;//9case0xbb:P0=dofly[10];break;//acase0x7b:P0=dofly[11];break;//bcase0xe7:P0=dofly[12];break;//ccase0xd7:P0=dofly[13];break;//dcase0xb7:P0=dofly[14];break;//ecase0x77:P0=dofly[15];break;//f}}}/********************************************************************函数名称:keys_scan;函数功能:键盘扫描函数返回值:返回键盘码,高4位为行码,低4位为列码********************************************************************/ucharkeys_scan(){ucharcord_h,cord_l;//行列值P3=0x0f;//列线输出全为0cord_h=P3&0x0f;//读入行线值if(cord_h!=0x0f)//先检测有无按键按下{delay(100);//消抖动cord_h=P3&0x0f;if(cord_h!=0x0f){P3=cord_h|0xf0;cord_l=P3&0xf0;return(cord_h+cord_l);}}return(0xff);}/*函数名称:delay;函数功能:延时函数*/voiddelay(uinti){while(i--);}四、思考题1、描述阵列式键盘扫描原理。实验七、简易波形发生器的制作实验一、实验目的1、熟悉MCS-51单片机与D/A转换器DAC0832的接线方法;2、掌握DAC0832直通方式,单缓冲器方式、双缓冲器方式的编程方法。二、实验说明数/模转换器采用DAC0832集成电路,其数据输入端直接与单片机8051的P0口相连,输出经运算放大器得到电压波形。DAC0832采用单极性单缓冲方式工作,锁存器74LS373的Q0为DAC0832提供片选和数据传送控制信号,两个寄存器的写控制端连接8051的写输出端。在8051的P1口接三个开关K0、K1和K2,用来设置输出波形的类型,K0、K1和K2,分别对应正弦波、锯齿波和方波。三、实验内容及步骤1、硬件原理图2、源程序及流程图#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineDAC0832XBYTE[0xF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年路砖项目可行性研究报告
- 2024年超临界流体萃取装置项目可行性研究报告
- 2025至2031年中国控制旋钮行业投资前景及策略咨询研究报告
- 2025-2030年(全新版)中国蓝莓果汁行业市场运营现状及投资前景规划研究报告
- 2025-2030年中国静力水准行业运行状况与前景趋势分析报告
- 2025-2030年中国铁路电气化线路器材产业发展前景调研及投资战略分析报告
- 2025年度企业车库租赁及员工停车服务合同
- 宠物摄影与拍摄技巧考核试卷
- 2025年度电子支付货款欠款合同范本下载
- 2025年度货车司机劳动合同(含物流信息平台操作培训)
- 二年级下册加减混合竖式练习360题附答案
- GB/T 21709.5-2008针灸技术操作规范第5部分:拔罐
- 大三上-诊断学复习重点
- 应收账款的管理培训课件
- 2021年道路交通安全法期末考试试题含答案
- 股东变更情况报告表
- 自带药物治疗告知书
- 房产中介门店6S管理规范
- 吞咽解剖和生理研究
- TSG11-2020 锅炉安全技术规程
- 异地就医备案个人承诺书
评论
0/150
提交评论