单片机原理与应用实验指导书.doc

上传人:小飞机 文档编号:4038412 上传时间:2023-04-01 格式:DOC 页数:33 大小:9.44MB
返回 下载 相关 举报
单片机原理与应用实验指导书.doc_第1页
第1页 / 共33页
单片机原理与应用实验指导书.doc_第2页
第2页 / 共33页
单片机原理与应用实验指导书.doc_第3页
第3页 / 共33页
单片机原理与应用实验指导书.doc_第4页
第4页 / 共33页
单片机原理与应用实验指导书.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《单片机原理与应用实验指导书.doc》由会员分享,可在线阅读,更多相关《单片机原理与应用实验指导书.doc(33页珍藏版)》请在三一办公上搜索。

1、单片机原理及接口技术实验指导书张文哲计科对口14(1,2)实验一 C51语言编程实验一、 实验目的熟练掌握Keil C51集成开发环境的工程建立、编辑与编译技能。二、 实验原理Keil uvision 4使用指导。三、 仪器与材料普中科技51单片机开发板一套,PC计算机,Windows 操作系统,Keil uvision 4。四、 实验内容自编一段程序,进行Keil C51集成开发环境的使用练习,建立工程、调试、并编译产生.HEX文件。五、 实验步骤1. 打开Keil uvision 4集成开发环境。如下图所示2. 使用Keil uvision 4集成开发环境编辑C51源程序。a) 点击Pro

2、ject菜单,选择弹出的下拉式菜单中的New Project。b) 接着弹出一个标准Windows文件对话窗口在“文件名”中输入第一个C程序项目名称,这里我们用“test”或者其他的自定义名称。c) “保存”后的文件扩展名为uvproj,这是KEIL uVision4项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。d) 选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。e) 我们要在项目中创建新的程序文件或加入现有的程序文件。如果没有的程序,那么就要新建一个程序文件。点filenew 打开一个文本文件编辑窗口。将一下代码输入/*-HELLO.CCopyright

3、 1995-2005 Keil Software, Inc.-*/#include /* special function register declarations */ /* for the intended 8051 derivative */#include /* prototype declarations for I/O functions */#ifdef MONITOR51 /* Debugging with Monitor-51 needs */char code reserve 3 _at_ 0x23; /* space for serial interrupt if */

4、#endif /* Stop Exection with Serial Intr. */ /* is enabled */*-The main C function. Program execution startshere after stack initialization.-*/void main (void) /*-Setup the serial port for 1200 baud at 16MHz.-*/#ifndef MONITOR51 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */ TMOD |= 0x20;

5、/* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 221; /* TH1: reload value for 1200 baud 16MHz */ TR1 = 1; /* TR1: timer 1 run */ TI = 1; /* TI: set TI to send first char of UART */#endif/*-Note that an embedded program never exits (becausethere is no operating system to return to). Itmust loop and e

6、xecute forever.-*/ while (1) P1 = 0x01; /* Toggle P1.0 each time we print异或 */ printf (Hello Worldn); /* Print Hello World */ 3. 保存新建的程序,扩展名为.c,主文件名可以自己随意取。保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。4. 在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们选“Add File to Group Source Group 1”弹出文件窗口

7、,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。5. 编译源程序,生成hex文件。使用编译按钮或者是projectbuild进行编译。六、 实验结果与讨论谈谈你对今天实验课内容中的问题的解答以及收获,实验过程中存在的问题或疑问,以及你的解决方法。如果有实验内容以外的发现也可谈谈。(字数不限)实验二 单片机片内并行端口编程实验一、 实验目的熟练掌握单片机开发板和P1口、P2口、P3口、P4口的编程,掌握移位程序的编写。二、 实验原理利用单片机并口驱动led。连接开发板LED模块相关电路连线。三、 仪器与材料普中科技51单片机开发板一套,PC计算机,Windows 操作系统

8、 ,Keil uvision 4,PZ-ISP V1-48下载软件。四、 实验内容参考下面发光二极管闪烁程序完成:1. 点亮发光二极管;2. 使用C51库函数_crol_()实现循环移动设计流水灯,使用C51库函数_crol_()实现LED灯右移跑马灯;3. 利用C51程序模拟实现循环移位设计流水灯;4. 利用C51程序模拟实现LED灯跑马灯左右移动。/-包含你要使用的头文件-/#include /此文件中定义了51的一些特殊功能寄存器/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms/* 函 数 名 : main* 函数功能 : 主函数* 输

9、入 : 无* 输 出 : 无*/void main() while(1)/-数字前面加0x表示该数是十六进制的数,0x00就是十六进制的00-/-P0口一共有8个IO口,即从P0.0到P0.7,而0x00二进制就是0000 0000-/-效果就是P0.0到P2.7都是0,即低电平。而如果你想给P0.1口赋高电平时-/-二进制就是0000 0001,就是十六进制0x01.-/P0 = 0x00; /置P0口为低电平Delay10ms(50); /调用延时程序,修改括号里面的值可以调整延时时间P0 = 0xff; /置P0口为高电平Delay10ms(50); / 调用延时程序/* 函 数 名 :

10、 Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c0;c-)for (b=38;b0;b-)for (a=130;a0;a-);五、 实验步骤1. 分析电路原理图,确定连线及编程方案2. 使用Keil uvision 4集成开发环境编辑C51源程序3. 编译源程序4. 使用下载软件把编译好的hex文件下载到单片机上5. 观察下载结果有没有满

11、足要求,可根据情况适当修改连线并修改对应程序,再观察实验板,体会不同结果。六、 实验程序与结果谈谈你对今天实验课内容中的问题的解答以及收获,实验过程中存在的问题或疑问,以及你的解决方法。如果有实验内容以外的发现也可谈谈。(字数不限)实验三 单片机与输出外设的接口设计实验一、 实验目的熟练掌握Keil 集成开发环境的调试过程,打断点,分步调试,打开变量观察窗口查看变量数值,查看模拟单片机P1口口线的状态,仿真查看程序执行所用时间;控制数码管显示不同的内容,掌握数码管静态显示的编程。二、 实验原理利用单片机并口驱动静态及动态数码管。连接开发板数码管模块相关电路连线。静态数码管电路连接图不带译码器的

12、动态数码管连接图带译码器的动态数码管连接图三、 仪器与材料普中科技51单片机开发板一套,PC计算机,Windows 操作系统,Keil uvision 4,PZ-ISP V1-48下载软件。四、 实验内容参考对应程序完成以下内容1. 静态数码管实现流动显示“09”;2. 使用译码器在八个动态数码管上全部显示“07”;3. 不使用译码器在第一个动态数码管上循环显示“0F”;4. 不使用译码器在八个动态数码管上循环显示“一三”。静态显示数字0#include/-定义你要使用的IO口-/#define GPIO_DIG P0/-声明全局函数-/void Delay10ms(unsigned int

13、c); /误差 0us/-定义全局变量-/RAM,ROMunsigned char code DIG_CODE16=0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71; /0F段码 共阴极编码/0:0011_1111 /* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)while(1)GPIO_DIG = DIG_CODE0;/* 函 数 名 : Delay10ms* 函数功能 : 延时

14、函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c0;c-)for (b=38;b0;b-)for (a=130;a0;a-); 动态显示数字4位输出0#include/-定义使用的IO口-/#define GPIO_DIG P0/段选#define GPIO_PLACE P1/位选/-定义全局变量-/unsigned char code DIG_PLACE8 = 0xfe,0xf

15、d,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位选控制 查表的方法控制unsigned char code DIG_CODE17 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData4;/用来存放要显示的4位数的值/-声明全局函数-/void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输

16、 入 : 无* 输 出 : 无*/void main(void)unsigned char i;for(i=0; i4; i+)DisplayDatai = DIG_CODE0;while(1)DigDisplay();/* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsigned char i;unsigned int j;for(i=0; i4; i+)GPIO_PLACE = DIG_PLACEi; /发送位选GPIO_DIG = DisplayDatai; /发送段码j = 10; /

17、扫描间隔时间设定while(j-);GPIO_DIG = 0x00;/消隐动态译码显示数字4位输出0#include/-定义使用的IO-/#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/-定义全局变量-/unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char Dis

18、playData8;/用来存放要显示的8位数的值/-声明全局函数-/void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char i;for(i=0;i4;i+)DisplayDatai=DIG_CODE0;while(1)DigDisplay();/* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsigned char i;unsigned int j

19、;for(i=0;i4;i+)switch(i) /位选,选择点亮的数码管,case(0):LSA=0;LSB=0;LSC=0; break;/显示第0位case(1):LSA=1;LSB=0;LSC=0; break;/显示第1位case(2):LSA=0;LSB=1;LSC=0; break;/显示第2位case(3):LSA=1;LSB=1;LSC=0; break;/显示第3位GPIO_DIG=DisplayDatai;/发送段码j=10; /扫描间隔时间设定while(j-);GPIO_DIG=0x00;/消隐五、 实验步骤1. 分析电路原理图,确定连线及编程方案2. 使用Keil

20、uvision 4集成开发环境编辑C51源程序3. 编译源程序4. 使用下载软件把编译好的hex文件下载到单片机上5. 观察下载结果有没有满足要求,可根据情况适当修改程序体会不同结果。六、 实验程序与结果谈谈你对今天实验课内容中的问题的解答以及收获,实验过程中存在的问题或疑问,以及你的解决方法。如果有实验内容以外的发现也可谈谈。(字数不限)实验四 液晶显示实验一、 实验目的理解液晶的基本概念及显示原理,掌握1602液晶基本操作时序,掌握液晶RAM地址映射,掌握常用1602液晶操作实例及C51编程方法。二、 实验原理利用单片机并口驱动1602液晶屏。连接1602液晶屏相关电路连线。三、 仪器与材

21、料普中科技51单片机开发板一套,PC计算机,Windows 操作系统,Keil uvision 4,PZ-ISP V1-48下载软件。四、 实验内容根据示例程序完成以下内容1. 在1602液晶第一行显示“I like bananas”,在第二行显示;2. 1602从第一行和第二行移入显示Hello everyone、;实现1602字母流动显示;LCD1602显示接收到HEX数据。静态显示 hello 1602!#include#includelcd.h/-定义全局变量-/unsigned char Hello=hello 1602!;/* 函 数 名 : main* 函数功能 : 主函数* 输

22、 入 : 无* 输 出 : 无*/void main(void)unsigned char i;LcdInit();for(i=0;i0; c-) for (b=199;b0;b-) for(a=1;a0;a-); /* 函 数 名 : LcdWriteCom* 函数功能 : 向LCD写入一个字节的命令* 输 入 : com* 输 出 : 无*/#ifndef LCD1602_4PINS /当没有定义这个LCD1602_4PINS时 8位数据线void LcdWriteCom(uchar com) /写入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /选择发送命令LC

23、D1602_RW = 0; /选择写入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay1ms(1);/等待数据稳定LCD1602_E = 1; /写入时序Lcd1602_Delay1ms(5); /保持时间LCD1602_E = 0;#else void LcdWriteCom(uchar com) /写入命令 4位数据线LCD1602_E = 0; /使能清零LCD1602_RS = 0; /选择写入命令LCD1602_RW = 0; /选择写入LCD1602_DATAPINS = com;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1

24、602_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/* 函 数 名 : LcdWriteData* 函数功能 : 向LCD写入一个字节的数据* 输 入 : dat* 输 出 : 无*/ #ifndef LCD1602_4PINS void Lc

25、dWriteData(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;#elsevoid LcdWriteData(uchar dat)/写入数据LCD1602_E = 0; /使能清零LCD1602_RS = 1; /选择写入数据LCD1602_RW = 0; /选择写入LC

26、D1602_DATAPINS = dat;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改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/* 函 数 名 : LcdInit()* 函数功能 : 初始化LCD屏* 输 入 : 无* 输 出 : 无*/ #ifndef

27、LCD1602_4PINSvoid LcdInit() /LCD初始化子程序 LcdWriteCom(0x38); /开显示LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x06); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /设置数据指针起点#elsevoid LcdInit() /LCD初始化子程序LcdWriteCom(0x32); /将8位总线转为4位总线LcdWriteCom(0x28); /在四位线下的初始化LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x0

28、6); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /设置数据指针起点#endif流动显示 hello 1602! LcdWriteData()同上#include#includelcd.h/-定义全局变量-/unsigned char Hello = hello 1602!;unsigned char CnCh27 = Welcome to the world of MCU;/-声明全局变量-/void Delay10ms(unsigned int c); /误差 0us/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char i;LcdInit();/-写第一行-/for(i=0; i11; i+)LcdWriteData(Helloi);/-写第二行LcdWriteCom(0xC0); /设置坐标在第二行for(i=0; i27; i+)LcdWriteData(CnChi);LcdWriteCom(0x07); /设置每写一次整屏右移while(1)LcdWriteCom(0xC0); /设置坐标在第二行for(i=0; i0;c-)for (b=38;b0;b-)for (a=130;a0;a-); 五、 实验步骤1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号