单片机整套实验及程序(交通灯_跑马灯等).doc_第1页
单片机整套实验及程序(交通灯_跑马灯等).doc_第2页
单片机整套实验及程序(交通灯_跑马灯等).doc_第3页
单片机整套实验及程序(交通灯_跑马灯等).doc_第4页
单片机整套实验及程序(交通灯_跑马灯等).doc_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

实验实验 1 跑马灯实验跑马灯实验 一 实验目的一 实验目的 初步学会 Proteus ISIS 和 uVision2 单片机集成开发环境的使用 初步掌握采用汇编语言与 C 语言开发单片机系统的程序结构 掌握 80C51 单片机通用 I O 口的使用 掌握单片机内部定时 计数器的使用及编程方法以及中断处理程序的编写方 法 二 实验设备及器件二 实验设备及器件 硬件 PC 机 HNIST 1 型单片机实验系统 软件 Proteus ISIS 单片机仿真环境 uVision2 单片机集成开发环境 三 实验内容三 实验内容 编写一段程序 采用 P1 口作为控制端口 使与 P1 口相接的四个发光二极管 D1 D2 D3 D4 按照一定的方式点亮 如点亮方式为 先点亮 D1 延时一段 时间 再顺序点亮 D2 D4 然后又是 D4 D1 同时只能有一个灯亮 然后每 隔一段时间一次使相邻两个灯亮 三个灯亮 四个灯亮 最后闪烁三次 接着循环 变化 基于 Proteus ISIS 仿真环境完成上述功能的仿真 基于 uVision2 单片机集成开发环境与硬件平台完成程序的脱机运行 四 实验原理图四 实验原理图 图图 3 1 跑马灯实验电路原理图跑马灯实验电路原理图 电路原理图如上图 3 1 所示 AT89S52 的 P1 0 P1 3 控制 4 个发光二极管 发光 二极管按照一定次序发光 相邻发光二极管的发光时间间隔可以通过定时器控制 还可以通过软件延时实现 五 软件流程图与参考程序五 软件流程图与参考程序 主程序流程图如下 主程序流程图如下 开 始 初始化 定时器 中断 标志位设置 Flag 1 流水灯操作 结 束 Y N 参考程序参考程序 include include define uchar unsigned char define uint unsigned int uchar aa num speed flag uchar code table 0 x0e 0 x0d 0 x0b 0 x07 uchar code table1 0 x0a 0 x05 0 x09 0 x06 uchar codetable2 0 x0c 0 x09 0 x03 0 x08 0 x01 0 x0e 0 x0c 0 x08 0 x00 void delay uint z 延时函数 uint x uchar y for x z x 0 x for y 200 y 0 y void init 条件初始化函数 flag 0 speed 10 控制跑马灯流水速度 TMOD 0 x01 中断方式 TH0 65535 50000 256 TL0 65536 50000 256 初值 EA 1 打开总中断 ET0 1 打开外中断 0 TR0 1 void main init 调用初始化函数 while 1 if flag delay 2000 调用延时函数 for num 0 num0 num 从左至右间隔一个依次闪烁 P1 table num delay 2000 for num 0 num0 num 从左至右间隔两个依次闪烁 P1 table1 num delay 2000 for num 0 num 6 num 两个 三个 四个跑马灯依次闪烁 P1 table2 num delay 2000 for num 0 num 5 num 闪烁 5 次 P1 0 xff 全暗 delay 2000 P1 0X00 全亮 delay 2000 speed speed 3 变速 if speed 4 speed 10 void timer0 interrupt 1 中断函数 TH0 65535 50000 256 TL0 65536 50000 256 aa if aa speed aa 0 flag 1 六 实验思考题六 实验思考题 请用汇编指令完成本实验内容 深刻理解汇编语言程序设计结构 在本实验中 I O 口作为输出口使用 如果把 I O 口的某些口线作为输入 口使用时 如何获得输入引脚状态 请举例说明 在画软件流图时 各种不同形式方框意义是否相同 请举例示之 请简要叙述中断服务程序功能并画出其流程图 在采用 I O 口作为输出口时要考虑哪些因素 如果负载变化 如何设计单 片机与负载之间的接口电路 实验实验 2 交通灯实验交通灯实验 一 实验目的一 实验目的 进一步掌握 Proteus ISIS 和 uVision2 单片机集成开发环境的使用 进一步掌握单片机内部定时 计数器的使用及编程方法以及中断处理程序的 编写方法 掌握单片机的 I O 口编程使用 二 实验设备及器件二 实验设备及器件 硬件 PC 机 HNIST 1 型单片机实验系统 USB 下载线一根 连接线若 干 软件 Proteus ISIS 单片机仿真环境 uVision2 单片机集成开发环境 三 实验内容三 实验内容 编写一段程序 实现用单片机的 I O 口控制 12 个发光二极管 四组 每组 有红绿蓝三个发光二极管 使发光二极管按照一定的规则模拟交通灯功能 基于 Proteus ISIS 仿真环境完成上述功能的仿真 基于 uVision2 单片机集成开发环境与硬件平台完成程序的脱机运行 四 实验原理四 实验原理 图图 3 2 交通灯实验原理图交通灯实验原理图 用单片机的 IO 口控制 4 组红绿蓝共 12 个发光二极管 使发光二极管按照一定 规则与次序发光与闪亮以实现模拟交通灯的功能 假设初始状态为 南北通行状 态 南北绿灯 东西红灯 25s 后转为过度状态 南北黄灯 东西红灯 5s 再 转为东西通行状态 东西绿灯 南北红灯 25 s 再转为过渡状态 东西黄灯 南 北红灯 5s 然后循环往复 硬件原理图如上图 3 2 所示 由于发光二极管的导通电压为 1 7V 所以在电源 与二极管之间加一个电阻 目的是保护二极管 实验中利用定时计数器实现 1S 的定 时 然后在此基础上实现所需要的定时时间 五 软件流程图与参考源程序五 软件流程图与参考源程序 软件设计思想 在编程时 我们一般把一个独立的功能设计成一个子程 序或者说函数 对于不同的设计者而言 对软件功能的划分角度不同 对应的函数 功能也存在差异 开 始 南北绿灯 东西红灯 25 南北黄灯 东西红灯 5 东西绿灯 南北红灯 25 东西黄灯 南北红灯 5 结 束 定 时 器 图图 3 3 软件结构图软件结构图 参考源程序如下 include 头文件 define uint unsigned int define uchar unsigned char 定义下方便使用 sbit kong P1 4 位声明 数码管锁存控制端 uchar code table 0 xfc 0 x60 0 xda 0 xf2 0 x66 0 xb6 0 xbe 0 xe0 0 xfe 0 xf6 数字 0 9 编码 uint tt temp 0 延时函数 void delay uint x uchar i k for i 0 i x i for k 0 k 100 k 初始化函数 void init temp 0 tt 0 TMOD 0 x01 定时器工作方式 TH0 65536 50000 256 TL0 65536 50000 256 装初值 EA 1 开总中断 ET0 1 开定时器中断 TR0 1 启动定时器中断 数码管显示函数 void display uint x1 uchar i c uint cod 4 cod 3 x1 1000 cod 2 x1 1000 100 cod 1 x1 1000 100 10 cod 0 x1 10 求个数码管的值 c 0 x01 for i 0 i 4 i P1 c 数码管的显示选择 P0 table cod i 送要显示的值 kong 1 打开锁存 c c 30 if temp 35 display temp 30 P2 0Xf5 南北黄灯 东西红灯 5s else display temp 30 P2 0 xdd 南北绿灯 东西红灯 25s else if temp 5 display temp P2 0 xee 东西黄灯 南北红灯 5s else display temp P2 0 xeb 东西绿灯 南北红灯 25 s if tt 20 判断时间是否过了 1s tt 0 temp 倒计数 主函数 void main init 初始化函数调用 while 1 主循环 jiaotong 交通灯函数调用 中断函数 void timer0 interrupt 1 TH0 65536 50000 256 TL0 65536 50000 256 重新装初值 tt 六 实验思考题六 实验思考题 如何实现扩充功能 实现救护车优先通过十字路口 请叙述硬件设计与软件 设计原理 在利用单片机片内定时器实现精确定时时 是否会产生误差 如果存在误差 请分析误差产生原因以及减小误差方法 实验实验 3 数码管动态显示实验数码管动态显示实验 一 实验目的一 实验目的 掌握数码管静态显示与动态显示原理以及数码管与单片机的接口原理 学会利用单片机的 I O 口实现数码管的动态显示 二 实验仪器二 实验仪器 硬件 PC 机 HNIST 1 型单片机实验系统 软件 Proteus ISIS 单片机仿真环境 uVision2 单片机集成开发环境 三 实验内容三 实验内容 编写一段程序 采用 P1 口某些口线作为 4 位数码管的位控制端 采用 P0 口 输出段码 实现 4 位数码管的测试 让 4 位数码管同时输出 0 F 编写程序 让 4 位数码管循环显示 1 2 3 4 即让第一位显示 1 然后第 一位熄灭 第二位显示 2 四 实验原理四 实验原理 使用 LED 数码显示器时 要注意区分数码管两种不同的接法 共阴 LED 和共 阳 LED 为了显示数字或字符 必须对数字或字符进行编码 七段数码管加上一 个小数点 共计 8 段 因此为 LED 显示器提供的编码正好是一个字节 八段 LED 数码管显示器原理与结构如下图 3 4 所示 对于共阴接法 要使某位 LED 显示相应 数码 则使 LED 的对应段点亮 则对应控制电平为高 如 要显示数字 0 如果 a dp 分别受 P0 7 P0 0 控制 则 LED 的 a b c d e f 需点亮 对应驱动电 平为 1 其他为 0 则对应数码 0 的段码为 FCH 共阴极 共阳极 图图 3 4 八段八段 LED 数码管原理与结构图数码管原理与结构图 LED 显示器工作方式有两种 静态显示方式和动态显示方式 静态显示的特 点是每个数码管的段码必须需要一个数据锁存器锁存 当送入字形码后 显示 字形可一直保持 直到送入新字形码为止 显示亮度较强 而动态显示是多个 LED 轮流显示 但由于人眼的视觉惰性 使人感觉各 LED 同时显示不同字符 ab cde g GND f dp GND a b c e f g d dp a b c d e f g dp dp g f e d c b a 5V a b 表表 3 1 本实验硬件所采用共阴极数码管码表本实验硬件所采用共阴极数码管码表 数字数字数码管代数码管代 码码 数字数字数码管代数码管代 码码 数字数字数码管代数码管代 码码 00 xfc60 xbeC0 x9c 10 x6070 xe0d0 x7a 20 xda80 xfeE0 x9e 30 xf290 xf6F0 x8e 40 x66A0 xee无显示0 x00 50 xb6b0 x3e 一般而言 为了减少硬件开销 降低成本 单片机系统通常采用 LED 动态扫描 显示方式 本实验电路原理图如下图 3 5 所示 EA VP 31 X1 19 X2 18 RE SET 9 RD 17 W R 16 IN T0 12 IN T1 13 T0 14 T1 15 P10 T 1 P11 T 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P00 39 P01 38 P02 37 P03 36 P04 35 P05 34 P06 33 P07 32 P20 21 P21 22 P22 23 P23 24 P24 25 P25 26 P26 27 P27 28 PS EN 29 AL E P 30 TX D 11 RX D 10 U2 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 TM S P10 P11 P12 P13 P14 P15 P16 P17 T1 9013 T2 9013 T3 9013 T4 9013 R18 1K R21 1K R171K R20 1K RX D TX D VC C AL ERD IN T1 IN T0 T0 T1 W R 1 2 3 4 5 6 7 8 9 10 1112 4 abcdefgdp COM1COM2COM3 COM4 123 DS1SMG4 OC 1 C 11 1D 2 1Q 19 2D 3 2Q 18 3D 4 3Q 17 4D 5 4Q 16 5D 6 5Q 15 6D 7 6Q 14 7D 8 7Q 13 8D 9 8Q 12 U3 74LS573 R14 10k VC C AT89S52 图图 3 5 LED 动态显示电路原理图动态显示电路原理图 五 部分软件流程图与参考程序五 部分软件流程图与参考程序 开始 判断 num 是 否小于 16 流程图 否 是 图图 3 6 软件流程图软件流程图 源程序 include 包含头文件 define uchar unsigned char define uint unsigned int 宏定义 sbit dula P1 4 端口定义 uchar num y uint x 定义变量 uchar code table 0 xfc 0 x60 0 xda 0 xf2 0 x66 0 xb6 0 xbe 0 xe0 0 xfe 0 xf6 0 xee 0 x3e 0 x9c 0 x7a 0 x9e 0 x8e 0 到 F 的数码管管码 主函数 void main while 1 进入大循环 P1 P1 0 x1f for num 0 num0 x for y 220 y 0 y 延时 六 实验思考题六 实验思考题 本实验源程序是让 4 位 LED 同时显示相同的内容 完成其测试 请编写 程序让 4 位 LED 轮流显示从 0 F 的数码 即让第一位数码管显示 0 后 接着 第二位数码管显示 0 一个轮回结束后 让第一个显示 1 请设计一个单片机控制的 4 位数码管的静态显示电路 解释其工作原理 如何采用本实验电路以及单片机片内定时器实现一个简易时钟功能 精度较 低 说明实现方式 实验实验 4 8 8 LED 点阵实验点阵实验 一 实验目的一 实验目的 了解 LED 点阵显示原理 掌握 LED 点阵显示器件与单片机的接口电路设计原理 掌握 LED 显示器件显示驱动程序设计方法 能编写 LED 显示驱动程序 二 实验设备及器件实验设备及器件 硬件 PC 机 HNIST 1 型单片机实验系统 软件 Proteus ISIS 单片机仿真环境 uVision2 单片机集成开发环境 三 实验内容三 实验内容 根据给定实验设备 选用相关模块 完成 LED 点阵显示实验系统的硬件平 台构建 根据所构建硬件平台 编程实现点阵循环显示数字 0 9 四 实验原理四 实验原理 芯片介绍 1 74LS138 3 线 8 线译码器 原理 当一个选通端 G1 为高电平 另 两个选通端 G2A 和 G2B 为低电平时 可将地址端 A B C 的二进制编码 在一个对应的输出端以低电平译出 Y0 Y7 为输出端 另外 74LS138 真值表请参 看相关资料 2 74LS595 串入并出 8 位输出移位锁存器 以下为其引脚功能说明 QA QH 八位并行输出端 可以直接控制数码管的 8 个段 或者点阵 LED 的 列线 QH 级联输出端 我将它接下一个 595 的 SI 端 SER 串行数据输入端 SCLR 10 脚 低电平时将移位寄存器的数据清零 通常我将它接 Vcc SCK 11 脚 上升沿时数据寄存器的数据移位 QA QB QC QH 下降沿移位寄存器数据不变 脉冲宽度 5V 时 大于几十纳秒就行了 通 常都选微秒级 RCK 12 脚 上升沿时移位寄存器的数据进入数据存储寄存器 下降沿时存储 寄存器数据不变 通常我将 RCK 置为低点平 当移位结束后 在 RCK 端产生一个 正脉冲 5V 时 大于几十纳秒就行了 通常都选微秒级 更新显示数据 G 13 脚 高电平时禁止输出 高阻态 另外 74LS595 操作时序请参考相关资料 请根据操作时序 叙述操作过程 请根据操作时序 叙述操作过程 实验原理图实验原理图 如下图 3 7 所示 图图 3 7 点阵点阵 LED 实验电路原理图实验电路原理图 五 软件流程图与参考程序五 软件流程图与参考程序 软件流程图 首选确定所需要的子程序 子程序主要包括 一是 74LS595 芯片驱动程序 完 成串入并出 控制 LED 点阵列的驱动 一个是驱动 74LS138 芯片的 实现 LED 点 阵行的驱动 还有一个是延时函数 读者可以根据相应芯片工作原理完成其驱动流 程图绘制 对于要显示的字符 0 9 的循环显示 显示间隔采用定时器实现 此时涉及到定 时器中断服务子程序的编写 另外 LED 点阵列驱动采用的是动态显示原理 也需 要定时器定时 对于主程序而言就很简单了 主要是完成一些初始化工作 源程序 include 头文件 include define uchar unsigned char 宏定义 define uint unsigned int sbit SCK P0 0 芯片端口连线定义 sbit RCK P0 1 sbit SER P0 2 sbit D138 A P0 5 123456 A B C D 654321 D C B A Title NumberRevisionSize B Date 14 Jul 2009Sheet of File C Documents and Settings Administrator 学学 学学学学学学学 学学 89s52学学学学学学学学学 ddbDrawn By E 1 G 2 2 3 3 4 H 5 5 6 F 7 C 8 A 9 4 10 6 11 D 12 1 13 B 14 7 15 8 16 U7 2 SJN 1388 A 1 B 2 C 3 G2A 4 G2B 5 G1 6 Y7 7 GND 8 Y6 9 Y5 10 Y4 11 Y3 12 Y2 13 Y1 14 Y0 15 VCC 16 U7 1 74LS138 Qb 1 Qc 2 Qd 3 Qe 4 Qf 5 Qg 6 Qh 7 GND 8 Q h 9 SCL R 10 SCK 11 RCK 12 G 13 SE R 14 Qa 15 VCC 16 U7 3 74LS595 Da Db Dc Dd De Df Dg Dh 1 2 3 4 5 6 7 8 1 2 3 4 56 7 8 VCC7 VCC7 SE R VCC7 RCK SCK 1 2 3 J7 2 CON3 1 2 3 J7 1 CON3 SE R RCK SCK S7 1 KEY POWER 5V C7 3 47uF VCC7 R7 1 1K D7 1 LE D POWER 5V GND C7 2 104 C7 1 104 VCC7 Da Db Dc Dd De Df Dg Dh 1 2 3 4 5 6 7 8 DdDhDgDfDeDcDbDa sbit D138 B P0 6 sbit D138 C P0 7 uchar code hang 8 1 2 3 4 5 6 7 8 点阵行数组定义 uchar code lie 10 8 数字 0 9 列代码 0 x00 0 x7c 0 x82 0 x82 0 x82 0 x7c 0 x00 0 x00 0 0 x00 0 x00 0 x84 0 xfe 0 x80 0 x00 0 x00 0 x00 1 0 x00 0 xe4 0 x92 0 x92 0 x92 0 x8c 0 x00 0 x00 2 0 x00 0 x44 0 x92 0 x92 0 x92 0 x6c 0 x00 0 x00 3 0 x00 0 x10 0 x18 0 x14 0 xfe 0 x10 0 x10 0 x00 4 0 x00 0 x4e 0 x8a 0 x8a 0 x8a 0 x72 0 x00 0 x00 5 0 x00 0 x7c 0 x92 0 x92 0 x92 0 x64 0 x00 0 x00 6 0 x00 0 x02 0 x02 0 xfa 0 x06 0 x02 0 x00 0 x00 7 0 x00 0 x6c 0 x92 0 x92 0 x92 0 x6c 0 x00 0 x00 8 0 x00 0 x4c 0 x92 0 x92 0 x92 0 x7c 0 x00 0 x00 9 uint timecount uchar a b void Delay uchar time 延时函数 uchar i j for i time i 0 i for j 320 j 0 j void Set595 unsigned char Data 74LS595 驱动函数 unsigned char i for i 0 i 8 i SCK 0 先置为低 SER Data 取数据的最高位 Data 1 将数据的次高位移到最高位 为下一次取数据做准备 SCK 1 再置为高 产生移位时钟上升沿 上升沿时数据 寄存器的数据移位 RCK 0 nop RCK 1 void Set138 unsigned char Data 138 芯片二进制译码选择行输出 switch Data case 0 D138 A 0 D138 B 0 D138 C 0 Delay 1 break case 1 D138 A 1 D138 B 0 D138 C 0 Delay 1 break case 2 D138 A 0 D138 B 1 D138 C 0 Delay 1 break case 3 D138 A 1 D138 B 1 D138 C 0 Delay 1 break case 4 D138 A 0 D138 B 0 D138 C 1 Delay 1 break case 5 D138 A 1 D138 B 0 D138 C 1 Delay 1 break case 6 D138 A 0 D138 B 1 D138 C 1 Delay 1 break case 7 D138 A 1 D138 B 1 D138 C 1 Delay 1 break void main void TMOD 0 x01 设置定时器的工作方式 TH0 65536 3000 256 TL0 65536 3000 256 设置初值 每次定时中断 3ms EA 1 开启总中断 ET0 1 开启定时器 0 中断 TR0 1 启动定时器 P0 0 x00 while 1 void extern0 interrupt 1 TH0 65536 3000 256 TL0 65536 3000 256 Set138 hang a Set595 lie b a nop nop a if a 8 a 0 timecount if timecount 330 每次到了 330 次中断后 又重新开 始计时 每次差不多 1s 即每隔 1s 显示一个数字 timecount 0 b if b 10 b 0 六 实验思考题六 实验思考题 可否不用这两个芯片 直接用 I 口来控制点阵的行与列来达到我们的目的 并 分析这样做的优缺点 查阅资料 比较 74LS164 与 74LS595 这两个串入并出芯片的特点 若显示的数字出现左右倒相 上下倒位 请分析可能的原因 以及解决的方法 8 8 LED 点阵显示器采用动态显示原理 分析其驱动工作过程 实验实验 5 矩阵式键盘显示矩阵式键盘显示 一 实验目的一 实验目的 掌握矩阵式键盘的工作原理以及与单片机的接口方法 掌握矩阵式键盘的按键识别方法 扫描法与线反转法 并能够编写相应键 盘处理程序实现按键的识别 二 实验仪器二 实验仪器 硬件 PC 机 HNIST 1 型单片机实验系统 软件 Proteus ISIS 单片机仿真环境 uVision2 单片机集成开发环境 三 实验内容三 实验内容 编写程序 读取矩阵式键盘按键键码 并通过数码管显示 显示要求 四个数码管同时显示同一字符 1 按 0 9 号键显示数字 0 9 2 按 A F 号键显示字母 A F 四 实验原理四 实验原理 单片机的 P2 口作为矩阵式键盘扫描 I O 口 对键盘进行逐行扫描 若检测到按 键 则将得到的扫描结果返回给 CPU 转换成相应的数码管显示代码 通过数码管 显示子程序在数码管上显示按键 实验原理如下图 3 8 所示 图图 3 8 键盘扫描电路原理图键盘扫描电路原理图 五 软件流程图与参考程序五 软件流程图与参考程序 流程图 图图 3 9 键盘扫描显示主程序流程图键盘扫描显示主程序流程图 图图 3 10 键盘扫描程序流程图键盘扫描程序流程图 参考源程序参考源程序 include define uint unsigned int define uchar unsigned char uchar num temp i uchar code table 0 xfc 0 x60 0 xda 0 xf2 0 x66 0 xb6 0 xbe 0 xe0 0 xfe 0 xf6 0 xee 0 x3e 0 x9c 0 x7a 0 x9e 0 x8e 0 uchar code table1 0 xf7 0 xfb 0 xfd 0 xfe sbit ale P1 4 void display uchar aa uchar keyscan 延时子程序 void delay uint z uint x y for x z x 0 x for y 110 y 0 y void main num 17 while 1 display keyscan 数码管显示 void display uchar aa ale 1 P0 table aa 1 ale 0 键盘扫描 uchar keyscan for i 1 i 5 i P2 table1 i 1 temp P2 temp temp while temp 0 xf0 delay 5 temp P2 switch temp case 0 xe7 num 1 break case 0 xd7 num 2 break case 0 xb7 num 3 break case 0 x77 num 4 break case 0 xeb num 5 break case 0 xdb num 6 break case 0 xbb num 7 break case 0 x7b num 8 break case 0 xed num 9 break case 0 xdd num 10 break case 0 xbd num 11 break case 0 x7d num 12 break case 0 xee num 13 break case 0 xde num 14 break case 0 xbe num 15 break case 0 x7e num 16 break while temp 0 xf0 temp P2 temp temp return num 六 实验思考题六 实验思考题 如何实现键盘信号的可靠采集 请叙述原理 并请简要说明如果系统软件采 用前后台的程序结构 采集按键信号安排在后台程序 主程序 和安排在定时中断 服务程序中有什么差异 请简要叙述如何处理按键连击 实验实验 6 马达调速控制马达调速控制 一 实验目的一 实验目的 掌握步进电机的工作原理 控制方式和调速方法 以及其与单片机的接口和 驱动编程方法 掌握直流电机的开启控制与转动速度控制方法 二 实验仪器二 实验仪器 硬件 PC 机 HNIST 1 型单片机实验系统 软件 uVision2 单片机集成开发环境 三 实验内容与原理三 实验内容与原理 实验内容 编写程序 通过单片机的 P1 口控制步进电机的控制端 使其按 照一定的控制方式进行转动 实验原理 步进电机的控制 单片机的 P1 口输出脉冲信号 驱动步进电机旋转 引入开关 实现对步进电机 马达 的启停 转向和速度控制 1 旋转方向控制 步进电机以四相四拍方式工作 若按AA AB BB BA AA次序通电为 正转 按AA AB BB BA AA次序通电为反转 2 旋转速度控制 每改变 1 次节拍 步进电机旋转 18 度 调节脉冲的周期就可以控制步进电机的 转速 A B A B VCC 3 3 5 5 75452 P1 1 P1 2 P1 3 P1 4 1 2 1 2 6 7 6 7 图 3 11 步进电机控制原理图 直流电机的控制 直流电机的转动由 DAC0800 来控制 当 DAC0800 的输出为高电平时直流电机 开始转动 当 DAC0800 的输出为低电平时直流电机停止转动 123456 A B C D 654321 D C B A Title NumberRevisionSize B Date 9 Aug 2009 Sheet of File C Documents and Settings Administrator 学学 MyDesign ddbDrawn By Q1 VCC U1 DAC0800 1 2 学学学学 R 图图 3 12 直流电机控制原理图直流电机控制原理图 四 实验步骤四 实验步骤 1 连线 编程 步进电机的插头接 J3 BA BD 接 89S52 的 P1 1 P1 4 开关 K8 接 P1 7 K1 K7 接 8051 的 P1 0 P1 6 DAC0800 的 B0 B7 口接 P2 DAC0800 输出接直流电机的输入 2 调试程序 观察步进电机运行情况 启停开关 K1 步进电机开始转动 是正转 2 圈 反转 2 圈的循环运行 启停开关 K8 直流电机开启 步进电机停止 调速开关 K7 K2 供 6 转速 调速时开关打开 关闭实现一次调速 K2 K4 K6 调速时步进电机是正转 K3 K5 K7 调速时步进电机是反转 五 软件流程图与参考程序五 软件流程图与参考程序 流程图流程图 是否有开关开启 判断开关开启的是 K1 K8 中的那个 步进电机开始运转 正反 各 2 圈循环 直流电机停 止 步进电机不动 直 流电机运转 不同的开关对应六种不同 速度选择 直流电机停止 开始 Y N K1 1 K8 K1 K17 图图 3 13 软件流程图软件流程图 参考源程序参考源程序 本步进电机步进角为 7 5 度 一圈 360 度 需要 48 个脉冲完成 程序名 main c 功 能 步进电机正转 反转 单 位 湖南理工物电系创新基地 All rights reserved 开始时间 2009 07 22 结束时间 2009 07 22 版本信息 备 注 A A B B 口分别接单片机的 P1 1 P1 2 P1 3 P1 4 备 注 P0 口接 key1 key8 八个开关并空制着八个转速 备 注 控制直流电机的是 DAC0800 备 注 B0 B7 接的是 P2 口 输出接的是直流电机的输入 include define uchar unsigned char 宏定义 方便使用 define uint unsigned int void motor move uint 函数的声明 void motor back uint void delay uint uint keyscan void zhiliu uchar a 0 key 0 key1 temp 变量定义 正转次序 Aa 组 aB 组 Bb 组 bA 组 即一个脉冲 正转 7 5 度 倒转次序 bA 组 Aa 组 aB 组 Bb 组 即一个脉冲 正转 7 5 度 开启开关时步进电机停止工作关闭开关时步进电机调好转速转动 const uchar time move 0 xe7 0 xed 0 xf9 0 xf3 正转时序 7 5 度 const uchar time back 0 xe7 0 xf3 0 xf9 0 xed 倒转时序 7 5 度 const uchar time 0 5 10 20 40 60 80 100 定义不同的时速 uint code table 0 x00 0 xff 给直流电机的信号 主程序 void main while 1 P2 0 x00 key keyscan 接受开关信号 if key 1 motor move 2 正转 2 圈 可自行调转圈数 delay 100 motor back 2 反转 2 圈 可自行调转圈数 delay 100 key keyscan 接受开关信号 else if key 8 当开关打开的是第八个时直流电机启动 步进电 机停止 zhiliu else if key 0 再次判断开关信号 key1 key 判断是否为偶数 if key1 0 x00 如果是偶数就正转 motor move 1 正转 2 圈 可自行调转圈数 else 否则就反转 motor back 1 反转 2 圈 可自行调转圈 正转 n 圈 每转一步 7 5 度 void motor move uint n uchar i uint j for j 0 j 12 n j for i 0 i 4 i P1 0 xe1 驱动 ds75452n 芯片 P1 time move i delay time key 倒转 n 圈 每转一步 7 5 度 void motor back uint n uchar i uint j for j 0 j 12 n j for i 0 i 4 i P1 0 xe1 驱动 ds75452n 芯片 P1 time back i delay time key 延时 t 毫秒 11 0592MHz 时钟 延时约 0 5ms void delay uint t uint k while t for k 0 k 60 k uint keyscan 接受开关信号并编码 P0 0 xff temp P0 temp temp while temp 0 x00 再次判断是否打开开关 delay 1 temp P0 temp temp switch temp 判断开关信号并将转速变量赋值 case 0 x01 a 1 break case 0 x02 a 2 break case 0 x04 a 3 break case 0 x08 a 4 break case 0 x10 a 5 break case 0 x20 a 6 break case 0 x40 a 7 break case 0 x80 a 8 break while temp 0 x00 判断开关是否关闭 temp P0 temp temp return a 返回值可调转速 void zhiliu 直流电机的开启与停止 uchar i for i 0 i 2 i P2 table i delay 1000 P2 0 x00 关闭直流电机 六 实验思考题六 实验思考题 怎样克服步进电机及直流电机和负载的惯性 说明如何控制直流电机的正 反转 用程序实现之 实验实验 7 串行模数转换器实验串行模数转换器实验 一 实验目的一 实验目的 掌握串行模数转换器 TLC549 芯片性能以及 A D 转换器的选择准则 利用芯片技术手册 掌握 TLC549 与单片机的接口方法 掌握串行 ADC 的驱动程序设计方法 二 实验仪器二 实验仪器 硬件 PC 机 HNIST 1 型单片机实验系统 软件 uVision2 单片机集成开发环境 三 实验内容三 实验内容 搭建串行模数转换平台 编写程序 通过单片机的 I O 口控制串行 A D 转换 芯片 TLC549 实现模拟电压信号的采集 调节电位器 调整 TLC549 的输入模拟参考电压 调节模数转换模块中的 电位器 运行程序实现 A D 转换和模拟电压信号的采集 编写液晶的程序 使转换得到的数据送入液晶显示 四 实验原理四 实验原理 TLC549 介绍及其接口电路 TLC549 是一款高性能的 位串行 A D 转换器 它以 位开关电容逐次逼近的 方法实现 A D 转换 本实验采用该芯片采集模拟电压量 然后将采集到的模拟量转 换为数字量后送至液晶显示其数值 TLC549 在该实验系统中的电路连接如下图 3 14 所示 图图 3 14 TLC549 与单片机接口电路与单片机接口电路 图图 3 15 TLC549 引脚示意图引脚示意图 TLC549 通过 J5 1 端口采集模拟量 由于 TLC549 是采用三线串行接口方 式与单片机连接的 所以通过 J5 3 端口将 CLK D0 CS 与单片机的 I O 口连接来 控制 A D 转换 然后将转换后的量经处理送液晶显示 接口电路说明 1 用连接线连接模拟量产生模块中的 V0 口和模数转换模块中的 IN 接口 2 用连接线将模数转换模块的 CLK D0 CS 分别接至单片机的 P36 P35 P34 3 用连接线将液晶模块的 E RW R 分别接至单片机的 P22 P21 P20 并 将 D0 D7 端口对应接入单片机的 P00 P07 口 4 调节模数转换模块中的电位器 使 TLC549 的输入参考电压为 5V 5 将编写好的程序烧入单片机运行 调节模拟量产生模块中的 W1 旋钮 便可 以在液晶上看到对应的电压值大小 五 软件流程图与参考程序五 软件流程图与参考程序 信号流图 液 晶 TLC549 模拟量 图 3 16 信号流图 参考源程序 文件名 tlc549 驱动程序 功 能 tlc549 采集模拟电压并于液晶上显示大小 作 者 刘烈报 单 位 湖南理工物电系创新基地 All rights reseverd 开始时间 2009 08 6 MCU include include define uchar unsigned char define uint unsigned int define ulong unsigned long uchar getdata PSB uchar code table0 TLC549 uchar code table 输入电压 TLC549 配制 sbit tlc clk P3 6 sbit tlc data P3 5 sbit tlc cs P3 4 液晶的配置 define DATABUS P0 sbit RS LCD P2 0 sbit RW LCD P2 1 sbit E LCD P2 2 函数初始化 void delay uint z void Delay1us uchar void init void write com uchar void write data uchar void setPosition uchar uchar void writeString uchar str void Tlc 549 void uchar read tlc void 主函数 void main init setPosition 0 0 设置第一行显示地址 writeString table0 while 1 setPosition 1 0 设置 输入电压 显示地址 writeString table Tlc 549 延时函数 void delay uint z uint x y for x z x 0 x for y 110 y 0 y void Delay1us uchar i while i nop nop LCD 初始化函数 void init PSB 1 write com 0 x30 基本指令 扩充指令为 34H delay 5 write com 0 x0c 光标是否显示语句 delay 5 write com 0 x01 清屏 delay 5 液晶子函数 写命令 void write com uchar com RS LCD 0 RW LCD 0 E LCD 0 delay 1 DATABUS com delay 1 E LCD 1 delay 1 E LCD 0 写数据 void write data uchar date RS LCD 1 RW LCD 0 E LCD 1 delay 1 DATABUS date delay 1 E LCD 1 delay 1 E LCD 0 设置显示开始地址 void setPosition uchar x uchar y uchar p switch x 4 case 0 p 0 x80 break 第一行开始地址 case 1 p 0 x90 break 第二行 case 2 p 0 x88 break 第三行 case 3 p 0 x98 break 第四行 p y write com p 写入字符串数据 void writeString uchar str uchar i 0 while str i 0 write data str i delay 400 TLC549 子函数 uchar read tlc void uchar i j k tlc clk 0 tlc cs 0 for i 0 i 8 i j j 1 k tlc data 共移出 8 位数据 tlc clk 1 tlc clk 0 j j k tlc cs 1 return j 返回转换结果 void Tlc 549 void ulong temp getdata ge x1 x2 uchar i while 1 读 20 次 取平均值 getdata 0 for i 0 i 20 i getdata read tlc getdata 20 电压显示处理 temp ulong getdata 500 256 将十六进制转换为十进制 ge temp 100 个位 x1 temp 100 10 第一位小数 x2 temp 100 10 第二位小数 write com 0 x95 显示数据的地址地 write data 0 x30 ge write data 0 x2e 显示小数点 write data 0 x30 x1 write data 0 x30 x2 write data 0 x56 显示单位 50ms 更新一次数据 delay 500 六 实验思考题六 实验思考题 查看 TLC549 技术手册 说明 TLC549 操作过程 在采集模拟信号时 一般不可避免会受到噪声干扰 我们一般要做什么处理 根据本实验编写处理相关程序 实验实验 8

温馨提示

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

最新文档

评论

0/150

提交评论