| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

《单片机原理及应用》实验指导书(C语言)

文***品

贡献于2020-11-21

字数:22248




单 片 机 原 理 应

实 验 指 导 书
(C语言)









XX学物电学院
微机教研室 XX
2011


前 言


单片机具高性超型低价格容易产品化等特点仪器仪表智化实时工业控制实时数采集智终端通信设备导航系统家电器等控制应领域具十分广泛途目前国单片机应中MCS51系列单片机然种流单片机实验指导书学MCS51单片机学生配合单片机原理应课程教学结合学院制单片机教学实验板编写实验指导书
单片机原理应门实践性强课程提高教学质量重环节机实训练学汇编语言程序设计学接口电路外设计算机连接者软硬兼施研制单片机应系统通加强动手获预期效果实验指导书提供实验指导性材料实验定难度选做项目根课时安排教学求进行取舍达某实验目书中提供参考程序实际应中程序会差定优
时间紧迫需赶课程进度实验时间步加编者学识限妥处欢迎读者批评指正
















实 验 须 知

1 实验前必须阅读教科书关部分实验指导书解实验目容步骤做实验前准备工作编写实验中求编修改程序完成实验前求完成准备工作方机实验否机操作
2 种电源电压极性接错严禁带电接线接插元器件通电前须指导教师检查认方通电
3 准意拨弄种实验关旋钮开关次实验关设备禁止动摸弄注意安全
4 严禁手触摸实验系统印制电路板元器件引脚防止静电击穿芯片
5 实验中损坏仪器元器件应时指导教师报告
6 实验室保持安静卫生意走动喧哗集中精力完成实验
7 实验完成关掉电源时整理实验台桌面保持环境整洁
8 规定认真完成实验报告规定时间缴实验报告
9 实验实验报告未规定完成学员参加课程考试考查

单片机实验报告格式


实验报告标题
实验目
二实验容
三实验设计调试:
(1)实验分析容
(2)实验电路:画出实验容关简单实验电路
(3)实验设计调试步骤:根容写出实验程序调试程序观察结果
(4)实验调试程中遇问题解决问题思路解决方法
四实验验教训总结
五实验课建议

目 录

实验 实验板KEIL C51软件 6
实验二 单片机控制LED灯点亮 12
实验三 模拟开关灯 16
实验四 单片机控制数码实验 21
实验五 中断系统应实验 25
实验六 LED 数码动态驱动 29
实验七 定时器计数器 32
实验八 数字电子钟 36
实验九 矩阵键盘识实验 37
实验十 动演奏乐曲 41
实验十 综合实验 交通信号灯控制器设计 45
实验十二 教学板检程序设计 46
实验十三 综合实验:数采集—火灾报警装置软硬件设计 47
附录:实验教学板电路原理图 48
实验 实验板Keil C51软件
实验目
1 熟悉单片机实验板Keil C51软件
二实验说明
实验介绍实验板组成Keil C51软件烧录软件通该实验学生解单片机编程调试方法
三实验容步骤
1启动PC机安装Keil C51软件烧录软件串口线连接计算机实验板(USB线提供电源)
2开Keil uVision2仿真软件首先建立实验项目文件接着建立源程序编译误全速运行程序
3源程序编译成执行文件烧录器烧录89芯片中
四Keilc 软件说明


1开程序: 双击程序

2新建工程:Project → New Project→保存工程→选择CPU(般选ATMEL公司AT89S51)























17
3设置工程右击→Options for Target 1’ →→选择Create HEX (输出HEX文件)


18
4新建源文件:选File→New→输入编辑源程序→保存(汇编源程序:文件名asmC源程序:文件名c)

5工程添加源文件:Project出口File页单击文件组选择Add Files to GroupSource Group 1’选项选择源文件文件类型然点击ADD点击close
19
















6编译:点击 右击Target 1 →Build Target F7源程序进行编译程序语法错误时会输出窗口(Output Windows)中显示错误信息警告信息修改编译成功会生成 HEX文件

7载调试: 编译成功线烧录程序HEX文件载单片机部ROM中运行运行程中发现错误重新修改程序编译载运行


五烧录软件

1开线烧录程序
2选择MCU类型(STC89C51RC)
1 点击 开工程目录hex文件
2 选择端口(般COM1)
3 点击Download烧录程序
4 开实验板电源(果烧录时候出现问题点击stop)
注意: 56 两步骤序颠倒点击Download前先关掉实验板电源
















实验二 单片机控制LED灯点亮

实验目
1进步熟悉编程程序调试
2学P1口方法
3学延时子程序编写
二实验说明
(1)输出控制
图1示 P1 0端口输出高电P10=1时 根发光二极单导电性 知时发光二极L1熄灭 P1 0端口输出低电 P1 0=0时发光二极L 1亮SETB P10指令 P 1 0端口输出高电 CLR P10指令 P1 0 端口输出低电







(2)延时子程序设计方法
作单片机指令执行时间短数量达微秒级果求闪烁时间间隔02秒相微秒说相差太执行某指令时插入延时程序达求样延时程序设计呢?面具体介绍原理:
石英晶体12MHz1机器周期1微秒
机器周期 微秒
MOV R6#20 2机器周期   2
D1 MOV R7#248 2机器周期   2×20       
DJNZ R7 2机器周期   2×248×20           
DJNZ R6D1 2机器周期   2×20=40         10002
面延时程序时间10002ms
知R6=10R7=248时延时5msR6=20R7=248时延时10ms基计时单位求02秒=200ms10ms×R5=200msR5=20汇编延时子程序:
DELAY MOV R5#20
D1 MOV R6#20
D2 MOV R7#248
DJNZ R7
DJNZ R6D2
DJNZ R5D1
RET

C语言延时子程序:
void delay02s(void) 延时02秒子程序
{
unsigned char ijk
for(i20i>0i)
for(j20j>0j)
for(k248k>0k)
}

三实验步骤参考例子
实验步骤说明:
实验需单片机应系统
P1口做输出口程序功发光二极点亮
1串行数通信线连接计算机实验板USB实验板提供电源
3开Keil uVision2仿真软件首先建立实验项目文件输入源程序(参考程序1)进行编译直编译误生成hex文件
5通STC-ISP载软件hex文件载实验板观察发光二极显示情况
参考例子:
(1) 点亮板子第灯D0
(2) 第灯闪烁
四参考程序
()适mini80E实验板
1)
#include
void main()
{
P10xfe

}

2)
#include
#define uint unsigned int
#define uchar unsigned char
delay()
void main()
{
while(1)
{ P10xfe
delay()
P10xff
delay()

}
}
void delay()
{
uint xy
for(x100x>0x)
for(y600y>0y)
}

(二)适制系统实验板
(1)
#include
void main (void)
{ P20x00
P20x10
P00xfe

}

(2)
#include
void delay(void)
void main (void)
{ P20x00
while(1)
{P20x10
P00xfe
delay()
P20x00
P00xff
delay()

}

}

void delay(void)
{ int xy
for(x600x>0x)
for(y100y>0y)
}


六实验容
请keil环境编写程序:
1)点亮LED(者意LED者意LED)
2)点亮LED闪烁
3)点亮板子D0D2D4D6灯D1D3D5D7灯交闪烁
4)设计出流水灯程序D7—D0D0D7


实验三 模拟开关灯
1.实验目
1进步熟悉编程程序调试
2学独立键方法
2.实验说明
果系统需键直接采IO线构成单键电路键间相互独立根线键状态会影响输入线工作状态称独立式键盘接口电路
检测否键闭合键闭合键抖动判断键号转入相应键处理编写单片机键盘检测程序时般检测时加入抖延时检测松手时加
3参考例子
1)通四键控制LED灯显示情况:
S1:D0点亮
S2:D1点亮
S3:D2点亮
S4:D3点亮

4参考程序
()适制实验板
#include
#define uint unsigned int
#define uchar unsigned char
uchar flag
uchar key_down
sbit LED2 P0^0
sbit LED3 P0^1
sbit LED4 P0^2
sbit LED5 P0^3
****************************
void delay(uint k)
{
uint data ij
for(i0i{for(j0j<121j++)
{}}
}
**********************************
uchar scan_key(void)
{
uchar temp
tempP3
return temp
}
***********************************
void main(void)
{
key_down0
P30xf7
P20x10
P00xff
while(1)
{
P30xf7
if((P30xf7)&&(key_down0))
{
delay(20)
if((P30xf7)&&(key_down0))
{
flagscan_key()
key_down1
switch(flag)
{
case 0xe7LED2 ~LED2break
case 0xd7LED3 ~LED3break
case 0xb7LED4 ~LED4break
case 0x77LED5 ~LED5break

default
break
}
}
}
if(P30xf7)
{
key_down0
}

}
}
(二)适mini80E板
#include
#define uint unsigned int
#define uchar unsigned char
uchar flag
****************************
void delay(uint k)
{
uint data ij
for(i0i{for(j0j<121j++)
{}}
}
**********************************
uchar scan_key(void)
{
uchar temp
tempP3
return temp
}
***********************************
void main(void)
{
while(1)
{
P30xff
if(P30xff)
{ delay(20)
if(P30xff) flagscan_key()
}
else flag0
switch(flag)
{
case 0xfeP10xfebreak
case 0xfdP10xfdbreak
case 0xfbP10xfbbreak
case 0xf7P10xf7break

defaultP10xffbreak
}
}
}

include
#define uint unsigned int
#define uchar unsigned char
uchar flag
uchar key_down
sbit LED2 P1^0
sbit LED3 P1^1
sbit LED4 P1^2
sbit LED5 P1^3
****************************
void delay(uint k)
{
uint data ij
for(i0i{for(j0j<121j++)
{}}
}
**********************************
uchar scan_key(void)
{
uchar temp
tempP3
return temp
}
***********************************
void main(void)
{
key_down0
P30xff
P10xff
while(1)
{
P30xff
if((P30xff)&&(key_down0))
{
delay(20)
if((P30xff)&&(key_down0))
{
flagscan_key()
key_down1
switch(flag)
{
case 0xfeLED2 ~LED2break
case 0xfdLED3 ~LED3break
case 0xfbLED4 ~LED4break
case 0xf7LED5 ~LED5break

default
break
}
}
}
if(P30xff)
{
key_down0
}

}
}

5实验容
1)8键分应8盏led灯亮灭(针制教学板)
2)通四键控制LED灯显示情况:
S1:D0D3点亮
S2:D2点亮
S3:D0D7点亮
S4:D0D5点亮

实验四 单片机控制数码实验
实验目
1 掌握数码显示出字符
2 进步掌握延时子程序

二实验原理
1数码两种接法











2 阴极数码编码
§ 0x3f 0x06 0x5b 0x4f 0x66 0x6d
§ 0 1 2 3 4 5
§ 0x7d 0x07 0x7f 0x6f 0x77 0x7c
§ 6 7 8 9 A B
§ 0x39 0x5e 0x79 0x71 0x00
§ C D E F 显示
请思考阳极数码编码
三参考例子
1)第数码显示8字
A) MINI80E实验板(阴极) 数码选通通P2口控制三八译码器第数码显示8字数码位选关闭开第数码位选控制位选P2口输出数位0xf7(二进制1111 0111)位选确定确定段选显示8dp段0余段1P0口输出0x7f(二进制0111 1111)
B) 制实验板(阳极)数码选通通P2口控制第数码显示8字数码位选关闭开第数码位选控制位选P2口输出数位0x08(二进制0000 1000)位选确定确定段选显示8dp段1余段0P0口输出0x80(二进制1000 0000)
2)四数码显示1234

位选:接P2口
左边四数码 DS3 DS2 DS1 DS0
应P2口: 0xf3 0xf2 0xf1 0xf0
右边四数码 DS3 DS2 DS1 DS0
应P2口: 0xf7 0xf6 0xf5 0xf4

段选:接P0口

四参考程序
()mini80e实验板
1)
#include

void main(void)
{
while(1)
{
P20xf7
P00x7f

}
}

2)
#include
#define uint unsigned int
#define uchar unsigned char
void delay()

void main(void)
{
while(1)
{
P20xf7
P00x66
delay()
P20xf6
P00x4f
delay()
P20xf5
P00x5b
delay()
P20xf4
P00x06
delay()
}
}

void delay() 延时程序1
{
uint xy
for(x2x>0x)
for(y112y>0y)

}
(二)制教学实验板(阳极数码)
(1)
#include

void main(void)
{
while(1)
{
P20x08
P00x80

}
}

2)
#include
#define uint unsigned int
#define uchar unsigned char
void delay()

void main(void)
{
while(1)
{
P20x08
P00x99
delay()
P20x04
P00xb0
delay()
P20x02
P00xa4
delay()
P20x01
P00xf9
delay()
}
}

void delay() 延时程序1
{
uint xy
for(x2x>0x)
for(y112y>0y)

}
五原理图












六实验容
1)位数码循环显示0-9
2)数码显示字母AF
3) 交点亮4数码(例:开始时数码显示器右边位显示10字隔05秒0字左移1位直左边位停止显示)
4)结合实验3实现键数字应

实验五 中断系统应实验
实验目
1掌握外部中断技术基方法
2掌握中断处理程序编写方法
二实验说明
1外部中断初始化设置三项容:中断总允许EA1外部中断允许EXi1(i01)中断触发方式设置中断触发方式设置般两种方式:电触发方式脉(边)触发方式实验选者前次高电次低电时效中断请求高电状态低电状态少维持周期中断请求信号引脚INT0(P32)INT1(P33)引入实验INT0(P32)引入
2中断控制原理:
中断控制提供户中断控制手段实际控制寄存器51系列目控制寄存器四:TCON IE SCON IP
3中断响应程:
首先中断采样然中断查询中断响应采样中断处理第步实验脉方式中断请求两相邻周期采样先高电低电中断请求效IE0IE1置1否继续0谓查询CPU测试TCONSCON中标志位状态确定没中断请求发生中断请求中断响应中断请求接受中断查询进行查询效中断请求响应次中断
4 8051中断系统
8051中断系统包括5中断源提供两优先级允许户中断源进行独立控制中断优先级设置8051支持5中断源分外部中断0定时器0溢出中断外部中断1定时器1溢出中断串口中断 应中断号01234寄存器4工作组切换03C51中中断服务程序中断函数方式时实现
5中断函数格式:
void 函数名() interrupt 中断号 using 工作组
{ 中断服务程序容 }
三参考例子
1) 右边三数码000开始进行加法计数动键时计数暂停继续计数

四参考程序
()适制教学实验板
#include
#define uchar unsigned char
#define uint unsigned int
sbit P37P3^7
uchar code table[10] {0xc00xf90xa40xb00x990x920x820xf80x800x90}
uchar code wei[4] {0x080x040x020x01}
***************************************************************
uint cnt
bit flag
**********************************************
void init(void)
{
bit flag0 设置标志
EA1开中断
EX01 外部中断0开中断
IT01 外部中断0触发方式

}
**************************************************
void delay(uint k)
{
uint data ij
for(i0i {
for(j0j<121j++){}
}
}
**************************************************
void main(void)
{ uchar i
P370
init()
while(1)
{
if(flag)cnt++
if(cnt>999)cnt0
for(i0i<100i++)
{
P0table[cnt100]
P2wei[2]
delay(1)
P0table[(cnt100)10]
P2wei[1]
delay(1)
P0table[cnt10]
P2wei[0]
delay(1)
}
}
}
************************************************
void extern_int0(void) interrupt 0 using 0
{
flagflag
}

(二)适MINI80E实验板
#include
#define uchar unsigned char
#define uint unsigned int
sbit P37P3^7
uchar code table[10] {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f}
uchar code wei[4] {0xf70xf60xf50xf4}
***************************************************************
uint cnt
bit flag
**********************************************
void init(void)
{
bit flag0 设置标志
EA1开中断
EX01 外部中断0开中断
IT01 外部中断0触发方式

}
**************************************************
void delay(uint k)
{
uint data ij
for(i0i {
for(j0j<121j++){}
}
}
**************************************************
void main(void)
{ uchar i
P370
init()
while(1)
{
if(flag)cnt++
if(cnt>999)cnt0
for(i0i<100i++)
{
P0table[cnt100]
P2wei[2]
delay(1)
P0table[(cnt100)10]
P2wei[1]
delay(1)
P0table[cnt10]
P2wei[0]
delay(1)
}
}
}
************************************************
void extern_int0(void) interrupt 0 using 0
{
flagflag
}

五实验容
1外部中断1实现述功(注意C51中中断号)
2数码0000开始计数高两位低两位独立计数采两键应前两位暂停继续应两位暂停继续











实验六 LED 数码动态驱动
实验目
1 学 LED 数码动态驱动编程
2 学定时计数器
二实验容
编写程序实验板4LED数码稳定显示4数字四位数0000开始秒钟加
三实验说明
前面实验中已够某 LED 数码显示需数字选第 LED显示1隔较短时间( 5 毫秒)关闭第 LED第二 LED 显示2周复始 4 LED 次显 1234 4 LED 稳定显示 4 数字然瞬间 LED 点亮家亮时间相均 5 毫秒4 LED数码点亮遍需 20 毫秒秒钟亮 50 次会闪烁感亮度实验四中 LED 亮度四分
实现隔 5 毫秒变换 LED方法定时器中断
四参考程序
()制实验教学板C51参考程序:
#include
#define U8 unsigned char
U8 tab[] {0xc00xf90xa40xb00x990x920x820xf80x800x90}
U8 scn[] {0x010x020x040x08}先点亮左边数码
U8 buf[4] {0000} 显示缓区开机先显示0000
U8 cnt 0 扫描计数
void main(void)
{ EA 1 允许中断
TMOD 0x01 设定时器 0 模式 1(16 位)
ET0 1 定时器 0 中断允许
TH0 0xee 晶振 110592MHz5mS
TL0 0
TR0 1 开始计数
while(1) 死循环等中断
}
void timeint(void) interrupt 1 定时器 0 中断服务程序
{ char i
TH0 0xee 设置定时器时间常数
TL0 0
i cnt & 0x03 求应点亮 LED 号(左右次 0123)
P0 tab[buf[i]] 笔划代码送 P0 口
P2 scn[i] 控制扫描码送 P2 口
if(cnt200)
{ cnt0 1 秒钟显示数字加
for(i3i>0i)
{ buf[i]++
if(buf[i]10) buf[i]0 加 10 前进位
else break
}
}
cnt++
}

(二)mini80e实验板C51参考程序:
#include
#define U8 unsigned char
U8 tab[] {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f}
U8 scn[] {0xf40xf50xf60xf7}先点亮左边数码
U8 buf[4] {0000} 显示缓区开机先显示0000
U8 cnt 0 扫描计数
void main(void)
{ EA 1 允许中断
TMOD 0x01 设定时器 0 模式 1(16 位)
ET0 1 定时器 0 中断允许
TH0 0xee 晶振 110592MHz5mS
TL0 0
TR0 1 开始计数
while(1) 死循环等中断
}
void timeint(void) interrupt 1 定时器 0 中断服务程序
{ char i
TH0 0xee 设置定时器时间常数
TL0 0
i cnt & 0x03 求应点亮 LED 号(左右次 0123)
P0 tab[buf[i]] 笔划代码送 P0 口
P2 scn[i] 控制扫描码送 P2 口
if(cnt200)
{ cnt0 1 秒钟显示数字加
for(i3i>0i)
{ buf[i]++
if(buf[i]10) buf[i]0 加 10 前进位
else break
}
}
cnt++
}

五实验容
1键控制数码意键相应数码实现数字加1
2 4 LED 数码 0000 开始秒钟动加 1前两位代表分两位代表秒?

实验七 定时器计数器

实验目
1学89C51部定时计数器编程方法
2进步掌握中断处理程序编写方法
二实验说明
151单片机两16位部定时器计数器(TCTimer Counter)计数部晶振驱动时钟定时器计数8051输入引脚脉信号计数器定时器实际工作计数方式固定频率脉计数脉周期固定计数值计算出时间定时功
定时器关寄存器工作方式寄存器TMOD控制寄存器TCONTMOD设置定时器计数器工作方式03确定定时计数TCON功定时器溢出时设定标志位控制定时器运行停止等
2TMOD




1) M1M0工作方式控制位
2) CT 定时器方式计数器方式选择位
CT1时 计数器方式 CT 0时 定时器方式 
3)GATE 定时器计数器运行门控标志位
GATE1时 TC启动受双重控制求INT0 (INT1)引脚高电TR0(TR1 )置 1 时 相应TC选通工作GATE0 TC启动仅受TR0 ( TR1)控制置 1 TC选通 INT0 ( INT1)电高低
3TCON




TF0TF1分定时器计数器T0 T1 溢出中断标志位 加法计数器计满溢出时置1 申请中断 中断响应动复 0TF产生中断申请否接受 需中断否开放决定TR1TR0 分定时器 计数器T1 T0 运行控制位 通软件置 1 定时器 计数器开始工作 系统复位时清 0
4初始化
1)初始化步骤
51系列单片机TC前应进行编程初始化TCONTMOD编程需计算装载TC计数初值般完成步骤:
(1)确定TC工作方式——编程TMOD寄存
(2)计算TC中计数初值装载THTL
(3)TC中断方式工作时必须开CPU中断源中断——编程IE寄存器
(4)启动定时器计数器——编程TCON中TR1TR0位
2)计数初值计算
(1)定时器计数初值:
定时器方式TC机器周期脉计数fOSC6MHZ机器周期12fOSC2us
方式0 13位定时器定时间隔213*2us16384ms
方式1 16位定时器定时间隔216*2us131072ms
方式2 8位定时器定时间隔28*2us512us
TC工作定时器方式1时求定时1ms求计数值设计数初值x:
(216x)*2us1000us 推出x216500
THTL置65 536500
(2)计数器计数初值
计数器方式:
方式0 13位计数器满计数值2138192
方式1 16位计数器满计数值21665 536
方式2 8位计数器满计数值28256
TC工作计数器方式2时求计数10脉计数初值设计数初值x
28x10 x 2810
THTL25610
三参考例子
1)设单片机晶振频率 12 MHz利定时器P10脚输出周期 2 ms方波
分析:选定时器 计数器T0 作定时器 输出P10 引脚 2 ms 方波间隔 1 ms高低电相间成 隔 1 ms P10 取反次方波
机器周期12÷12MHz 1 μs
1 msT0 需计数N次 N 1 ms÷1 μs 1000
计数器计数1000计数定时器溢出必须定时器置初值:65 5361000
2) P17端接发光二极求利TC控制LED亮1s灭1s周复始
分析:求定时1sTC三种工作方式满足(什?)较长时间定时应采符合定时方法
l TC0工作定时器方式1定时100ms定时时间P10反相P10端输出周期200ms方波脉设TC1工作计数器方式2T1输出脉计数计满5次定时1s时间P17端方改变灯状态
l 采6MHZ晶振方式1定时达100ms100ms机器周期12fOSC2us需计数次数100*1000250 000初值65 53650 000
方式2满5次溢出中断初值2565

四参考程序
()适制实验教学板
1)设置周期2ms方波
查询方式:
#include
sbit P1_0P1^0
void main()
{
TMOD0x01 TCO工作定时器方式1 16位定时器
TR01 启动TC0
for() 程序循环
{
TH0(655361000)256 预置计数初值
TL0(655361000)256
do
{
P1_0P1_0 P10取反
TF00 软件清TF0
}while(TF0) 查询等TF0置位
}

}

中断方式:
#include
sbit P1_0P1^0

void timer0(void) interrupt 1 using 1 TC中断服务程序入口
{
TF00 清楚中断标志位
P1_0P1_0 P10取反
TH0(655361000)256 计数初值重装载
TL0(655361000)256
}
void main()
{
TMOD0x01 TCO工作定时器方式1
P1_00
TH0(655361000)256 预置计数初值
TL0(655361000)256
EA1 CPU开中断
TF00
ET01 TC0开中断
TR01 启动TC0开始定时
do
{}while(1)

}




2) 灯闪烁时间间隔1s(P10P35相连作定时器1输入)
#include
sbit P1_0P1^0
sbit P0_7P0^7


timer0() interrupt 1 using 1 TC0中断服务程序入口
{
TF00 清楚中断T0标志位
P1_0P1_0 P10取反
TH0(655361000)256 计数初值重装载
TL0(655361000)256
}

timer1() interrupt 3 using 2 TC1中断服务程序入口
{
TF10 清楚中断T1标志位
P0_7P0_7 1s灯改变状态
}

void main()
{
P20x10 开LED电源开关
P0_71 置灯初始灭
P1_01 保证第次方便开始计数
TMOD0x61 TCO工作定时器方式1TC1工作计数器方式2

TH0(6553610000)256 预置计数初值 10毫秒
TL0(6553610000)256
TH1256100
TL1256100
IP0X08 置优先级存储器
EA1 CPU开中断
TF00 清中断T0标志位
TF10 清中断T1标志位
ET01 TC0开中断
ET11 TC1开中断
TR01 启动TC0开始定时
TR11 启动TC1
do{}
while(1)
}

(二)适MINI80E实验板
(2)P07P35相连作定时器1输入
#include
sbit P1_0P1^0
sbit P0_7P0^7

timer0() interrupt 1 using 1 TC0中断服务程序入口
{
TF00 清中断T0标志位
P0_7P0_7 P10取反
TH0(655361000)256 计数初值重装载
TL0(655361000)256
}

timer1() interrupt 3 using 2 TC1中断服务程序入口
{
TF10 清中断T1标志位
P1_0P1_0 1s灯改变状态
}

void main()
{
P20x10 开LED电源开关
P0_71 置灯初始灭
P1_01 保证第次方便开始计数
TMOD0x61 TCO工作定时器方式1TC1工作计数器方式2

TH0(6553610000)256 预置计数初值 10毫秒
TL0(6553610000)256
TH1256100
TL1256100
IP0X08 置优先级存储器
EA1 CPU开中断
TF00 清中断T0标志位
TF10 清中断T1标志位
ET01 TC0开中断
ET11 TC1开中断
TR01 启动TC0开始定时
TR11 启动TC1
do{}
while(1)
}
五电路图














六实验容
1)利定时计数器T1产生定时时钟P1口(P0口)控制8发光二极8指示灯次闪动闪动频率10次秒(8灯次亮遍周期)循环





实验八 数字电子钟
实验目
进步熟悉定时计数器
二实验容
实验板编写程序实现电子钟功时间显示格式 HHMM中间数点秒钟闪烁次两键控制分时调整次分者时加1
三实验说明
前面实验钟 LED 数码笔划代码均含数点(h 位 1数点亮)第 2 LED 数点秒前半秒亮半秒灭应定时器中断子程序中判断前时间前半秒动态扫描第 2 LED 时笔划代码取出 0xDF 相写入 P0 口

实验九 矩阵键盘识实验

实验目
1掌握矩阵键盘检测原理
二实验说明
1矩阵式键盘中行列线分连接键开关两端行线通拉电阻接+5V键时行线处高电状态键时行列线导通时行线电行线相连列线电决定点识矩阵键否关键然矩阵键盘中行线列线键相连键否均影响该键行线列线电键间相互影响必须行线列线信号配合起作适处理确定闭合键位置
扫描方式利CPU完成工作空余调键盘扫描子程序响应键盘输入求执行键功程序时CPU响应键输入求直CPU重新扫描键盘止键盘扫描程序般应包括容:
(1)判键
(2)键盘扫描取闭合键行列值
(3)计算法查表法键值
(4)判断闭合键否释放没释放继续等
(5)闭合键键号保存时转执行该闭合键功

三参考例子
1)矩阵键盘面key0key15第数码分显示09AF

四参考程序
1)矩阵键盘(适MINI80E板)
#include
#define uchar unsigned char
#define uint unsigned int
uchar code DIS_SEG7[16]{0x3f0x060x5b0x4f0x66
0x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x790x71}
uchar code DIS_BIT[8]{0xf70xf60xf50xf40xf30xf20xf10xf0}
uchar code SKEY[16]{1314150910111256781234}
uchar code act[4]{0xf70xfb0xfd0xfe}

void delay(uint k)
{
uint data ij
for(i0ifor(j0j<121j++)
{}}
}

char scan_key(void)
{
uchar ijininiinj
bit find0
for(i0i<4i++)
{
P3act[i]
delay(10)
inP3
inin>>4
inin|0xf0
for(j0j<4j++)
{
if(act[j]in)
{find1
injjinii
}
}
}
if(find0)return 1
return (ini*4+inj)
}

void main(void)
{ char c
uchar key_value
while(1)
{
cscan_key()
if(c1)key_valueSKEY[c]
P0DIS_SEG7[key_value]
P2DIS_BIT[0]
delay(2)
}
}
(二)适制教学实验板
#include
#define uchar unsigned char
#define uint unsigned int
uchar code DIS_SEG7[8]{0xc00xf90xa40xb00x99
0x920x820xf8}
uchar code DIS_BIT[4]{0x080x040x020x01}
uchar code SKEY[8]{45670123}
uchar code act[4]{0xf70xfb0xfd0xfe}

void delay(uint k)
{
uint data ij
for(i0ifor(j0j<121j++)
{}}
}

char scan_key(void)
{
uchar ijininiinj
bit find0
for(i0i<2i++)
{
P3act[i]
delay(10)
inP3
inin>>4
inin|0xf0
for(j0j<4j++)
{
if(act[j]in)
{find1
injjinii
}
}
}
if(find0)return 1
return (ini*4+inj)
}

void main(void)
{ char c
uchar key_value
while(1)
{
cscan_key()
if(c1)key_valueSKEY[c]
P0DIS_SEG7[key_value]
P2DIS_BIT[0]
delay(2)
}
}


五电路图
1)矩阵键盘





实验十 动演奏乐曲
实验目
(1)进步熟悉 89C51 定时器计数器功应
(2)掌握初始化中断服务程序编程方法
(3)掌握定时器计数器产生频率方波编程方法
二实验容
单片机定时器计数器 0 作定时器工作模式 1中断产生方波发声根
简谱中音阶频率计算应定时时间常数定时器中断常数赋初值发
出应音调歌曲音调节拍编成表(数组)音调作定时器初值节
拍控制发音时间 实现动演奏乐曲
三实验说明
产生音阶定时初值计算:
根表音阶频率计算应音阶周期 T T2 计算定时周期数(晶振110592MHz)填入表中定时器计数初值 65536-定时周期数程序计算产生定时周期数增加 1 倍音阶降低八度定时周期数降低 1 倍音阶升高八度



音阶表编码规音阶 17 1117 表示高八度音阶 17 2127 表示低八度
音阶 1.7. 17 表示
节拍表编码规1 拍 16约 570mS12 拍 814 4类推
面康定情歌简谱编码行数字音阶编码行数字节拍编码



动演奏康定情歌乐曲 C51 程序:
() 适mini80E板
#include
#define U8 unsigned char
sbit SPKP1^2
sbit P3_2P3^2
code unsigned int cyc[]{180016001440135112001079960}音阶 17 半周期数
code U8 tone[]{1315161615161312121315161615161313 131516
16151613121215131213121112661215131266151312131211
126560xff} 乐曲康定情歌简谱表
code U8 time[]{888448812488844816888844881248844
448248248248168884444816832} 节拍表
U8 H0L0cnt
void cntint0(void) interrupt 1 定时器 0 中断产生音阶方波
{ TH0H0
TL0L0
SPK~SPK P12 音乐信号输出脚P12 反相产生方波
}
void cntint1(void) interrupt 3 定时器 1 中断产生节拍延时
{ cnt++ 计数初值 0赋值
}
void main(void)
{ U8 iat
unsigned int b
nextTMOD0x11
EA1
ET01
ET11
cnt0
TR11
i0
while(1)
{ ttone[i] 读音调
if(t0xff) break 0xff 结束符
if(t0) 0 休止符
{ bcyc[t101] 根基音阶求出半周期数
if(t<10) bb*2 低八度音阶半周期数加倍
if(t>20) bb2 高八度音阶半周期数减半
H0(65536b)256 根半周期数计算 T0 初值高字节低字节
L0(65536b)256
TR01 启动定时器 0 发音
}
cnt0
atime[i] 读节拍
while(a>cnt)
TR00
i++
for(b0b<1000b++) 稍加延时增强节奏感
}
SPK1 关闭喇叭
while(P3_21) 等 INT 键
goto next 重放遍
}

(二) 适制实验教学板
#include
#define U8 unsigned char
sbit P2_5P2^5
sbit P3_2P3^2
code unsigned int cyc[]{180016001440135112001079960}音阶 17 半周期数
code U8 tone[]{1315161615161312121315161615161313 131516
16151613121215131213121112661215131266151312131211
126560xff} 乐曲康定情歌简谱表
code U8 time[]{888448812488844816888844881248844
448248248248168884444816832} 节拍表
U8 H0L0cnt
void cntint0(void) interrupt 1 定时器 0 中断产生音阶方波
{ TH0H0
TL0L0
P2_5~P2_5 P25 音乐信号输出脚P25 反相产生方波
}
void cntint1(void) interrupt 3 定时器 1 中断产生节拍延时
{ cnt++ 计数初值 0赋值
}
void main(void)
{ U8 iat
unsigned int b
nextTMOD0x11
EA1
ET01
ET11
cnt0
TR11
i0
while(1)
{ ttone[i] 读音调
if(t0xff) break 0xff 结束符
if(t0) 0 休止符
{ bcyc[t101] 根基音阶求出半周期数
if(t<10) bb*2 低八度音阶半周期数加倍
if(t>20) bb2 高八度音阶半周期数减半
H0(65536b)256 根半周期数计算 T0 初值高字节低字节
L0(65536b)256
TR01 启动定时器 0 发音
}
cnt0
atime[i] 读节拍
while(a>cnt)
TR00
i++
for(b0b<1000b++) 稍加延时增强节奏感
}
P2_50 关闭喇叭
while(P30x7b) 等 INT 键
goto next 重放遍
}

五思考题
1)程序改成演奏乐曲
2)键设计成16(8)音调意弹奏想表达歌曲
实验十 综合实验 交通信号灯控制器设计
实验目
学定时器综合运
二实验容
参实验实验二电路实验三程序编写交通信号灯控制器程序实验板
左边两数码发光二极分作南北方红绿灯时间显示右边两数码
发光二极分作东西方红绿灯时间显示图示求南北方绿灯亮
25 秒红灯亮 30 秒东西方绿灯亮 30 秒红灯亮 25 秒
三实验说明
时间显示参前面实验程序采动态扫描方式
四思考题
1键盘设置红绿灯亮时间
2设定时间保存 flash 存储器中开机动设定时间运行




实验十二 教学板检程序设计
实验目
1.通实验掌握EEPROM
2 掌握串行AD应
3 掌握单片机串行通信收发接口
4.学系统应程序设计调试方法
二实验设备
PC机台 实验教学板块
三实验容原理
程序运行前先TXDRXD短接
程序完成功:
1.检程序先数码点亮显示0~9秒变换次
2 编写走马灯程序LED逐位显示次
3检程序EEPROM单元置0读出检查否0置EEPROM单元FFH读出检查否全1成功显示器显示— — — 1
4启动串行口进行发收检查发收数否相成功显示— — — 2
5 启动AD数码显示AD转换值
6 等键键蜂鸣器发声05秒次
四实验求
1.实验题目求设计硬件电路画出电路原理图
2 求画出程序子程序中断服务程序流程图设计出相应程序程序加较详细注释
3 Keil C51编译环境完成程序编译
4 通载线载软件STCISP V39编译程序载单片机
5 运行程序实验结果验证程序正确性达求分析原查找错误修改源程序次汇编连接载运行直达题目求
思考题
1 8路AD原电路应作修改?
2块实验板串行通信速度高够做少波特率?请出计算方法 初始设置程序

实验十三 综合实验:数采集—火灾报警装置软硬件设计
实验目
1.掌握串行AD应
2 掌握单总线器件18B20应
3 掌握温度检测方法
4.学系统应程序设计调试方法
二实验设备
PC机台 实验教学板块18B20芯片块390欧电阻1K电位器
三实验容原理
完成火灾数采集系统硬件电路设计编写调试运行程序系统技术指标:
1系统监测1路燃气体浓度
注:传感器浓度00~100LEL(Low Expiosion Limit爆炸极限)输出4~20mA信号(电位器代)
2系统监测1路温度变化值
3设干位显示设置键进行浓度温度显示转换
4系统设置气体浓度安全值温度变化安全值
5旦超出安全范围进入动报警
四实验求
1.实验题目求设计硬件电路画出电路原理图
2 说明电路原理设计指标系统操作方法
3 求画出程序子程序中断服务程序流程图设计出相应程序程序加较详细注释
4 Keil C51编译环境完成程序编译
5 通载线载软件STCISP V39编译程序载单片机
6 运行程序实验结果验证程序正确性达求分析原查找错误修改源程序次汇编连接重新载运行直达题目求

附录:实验教学板电路原理图






仅供参考
文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

单片机原理与接口技术实验指导书(2018修订)

本课程是电子信息工程、通信工程、信息工程和自动化专业必修的专业实验课程。通过本课程的教学,使学生深刻体会到单片机原理与接口技术的应用,掌握汇编和C51语言的语法和技巧,熟悉电子系统的设计和调试过程,使其具备研究和开发以单片机为核心的电子系统的能力。

l***o 3年前 上传611   0

编译原理实验指导书

目 录相关问题说明 1实验题 2实验1 词法分析(2课时) 3实验2 语法分析(2课时) 5实验3 语义分析(2课时) 7实验4 代码生成(2课时) 9参考书目 11相关问题说明本课程共有4个实验, 本课程中所实现的程序为普通C或C++程序,在Windows环境下,属于控制台应用程序。提交实验成果:1. 实验成果包括:n 源程序。用学号加姓名方式命名项目或源程序所在

文***品 3年前 上传588   0

汇编原理实验指导书

第一部分 汇编语言程序的上机过程 1 一、 建立汇编语言的工作环境 1 二、在计算机上运行汇编语言的步骤 1 三、 建立ASM文件 1 四、 用MASM程序产生OBJ文件 3 五、 用LINK程序产生EXE文件 3 六、 程序的执行 3 七、 举例 3 第二部分 汇编语言上机调试 4 一、为何需要调试? 4 二、如何进行调试? 5 第三部分 汇编语言上机内容 8 实验一 

藤***树 5年前 上传1109   0

电子测量原理实验指导书

电子测量原理实验指导书XX大学自动化学院目 录电子测量实验系统组成原理及操作………………………… 1电子计数器原理及应用……………………………………… 10示波器原理及应用…………………………………………… 16R、L、C参数测量 …………………………………………… 24逻辑分析仪原理及应用……………………………………… 31交流电压测量 …

文***品 3年前 上传608   0

(1小时学会C语言51单片机)C语言入门教程

△Victor Hugo 维克多?雨果相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能

豆***2 4年前 上传744   0

单片机原理及应用试题答案

单片机原理及应用试题答案

明***梦 4年前 上传1093   0

单片机原理及应用课程设计

单片机课程设计数字音频频率测试仪班级:电气姓名:学号:日期:2010年X月X日 目录一、课程设计要求···········································1软硬件设计要求············································1二、设计思路 2.1.程序设计基本思路···················

文***品 3年前 上传809   0

c语言实验报告

c语言实验报告  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验一  上机操作初步和简单的C程序设计  一、 实验目的  1、熟悉C语言运行环境Turbo C++3.0  2、会简单的程序调试  3、熟悉C语言

极***速 11年前 上传806   0

C语言实验报告《指针》

C语言实验报告《指针》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验五  指针  一、 实验目的  1、掌握指针的概念、会定义和使用指针变量  2、掌握指向数组的指针变量  3、掌握字符串指针的使用  

D***1 11年前 上传967   0

C语言实验报告《数组》

C语言实验报告《数组》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验三  数组  一、 实验目的  1、掌握一维和二维数组的定义、赋值和输入输出  2、掌握字符数组和字符串数组的使用  3、掌握与数组有关的排

我***海 11年前 上传889   0

计算机组成原理实验指导书

 计算机组成原理 实验指导书 目 录 实验一 8位算术逻辑运算实验 1 实验二 带进位控制8位算术逻辑运算实验 5 实验三 16位算术逻辑运算实验 8 实验四 移位运算器实验 12 实验五 存储器实验 14

文***品 5年前 上传1516   0

C语言实验报告《综合实验》

C语言实验报告《综合实验》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验六  综合实验  一、 实验目的  1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。  2、掌握C程序的结构化程序设计方法,能

q***u 10年前 上传872   0

C语言综合实验2报告

实验报告实验名称 小型学生信息管理系统 实验项目 编写一学生信息管理系统,用来管理学生基本信息及成绩信息专业班级 姓名 学号 指导教师 成绩 日期 一、

文***品 3年前 上传451   0

C语言实验报告《函数》

C语言实验报告《函数》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________    成绩:__________  实验四  函数  一、 实验目的  1、掌握函数定义、调用和声明的方法  2、掌握实参和形参之间的传递方式  3、函数的嵌套调用  二、 实

t***g 12年前 上传1375   0

C语言程序设计实验报告

C语言程序设计实验报告  实验名称 计算出1000以内10个最大素数之和   实验目的   1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。  2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循

大***6 10年前 上传966   0

c语言综合性实验总结

华北科技学院计算机学院综合性实验实 验 报 告 课程名称 程序设计语言(C) 实验学期 2011 至 2012 学年 第 二 学期学生所在学院 建筑工程学院 年级 11级 专业班级 土木B112班

l***i 4年前 上传602   0

C语言程序设计实验教案

 《高级语言程序设计》 实验指导书 实验一 顺序结构程序设计 一、实验目的及要求 1. 掌握C语言中使用最多的一种语句——赋值语句的使用方法。 2. 掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 二、实验学时 4学时 三、实验任务 1.以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该

文***品 5年前 上传1477   0

《数据库原理及应用》实验报告

 数据库原理及应用 实验报告 实验课程: 学 号: 学生姓名: 班级: XXX年

文***享 5年前 上传4495   0

实验2.正规式的定义与应用 编译原理实验报告

实验2. 正规式的定义与应用一、 实验目的1. 熟悉正规式的构造方法;2. 熟悉从字符串中识别特定字符串的方法;3. 复习对文件的操作。二、 实验内容和要求已知一段C语言程序:#include “stdio.h“int gcd(int k){ int m; m=k+2; return m;}main(){ /*main function*/ int i, main

文***品 1年前 上传414   0

C语言代码大全

 乘法口诀表 #include <stdio.h> #include <conio.h> void main(void) { int i,j,x,y; clrscr(); printf(“\n\n * * * 乘法口诀表 * * * \n\n“); x=9; y=5; for(i=1;i<=9;i++) { gotoxy(x,y); printf(“%2d “,i);

山***1 5年前 上传1771   0

(汇编语言、微机原理及接口技术)实验交通灯

 课程设计说明书 课程设计名称: 微机原理与接口技术课程设计 课程设计题目: 微机打印口外接交通灯模拟LED显示器 学 院 名 称: 信息工程学院 专业: 计算机科学与技术 班级: 学号: 姓名:

文***品 2年前 上传477   0

2021年c语言实验报告分析总结

 2021年c语言实验报告分析总结撰写人:___________日 期:___________2021年c语言实验报告分析总结在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这

k***8 3年前 上传565   0

操作系统实验报告C语言实现银行家算法

实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调试组员(姓名,学号)主要任务实验报告的完成组员(姓名,学号)主要任务实验报告的完成

文***品 3年前 上传475   0

铜陵学院C语言程序设计实验报告

《C语言程序设计》 实验报告第二学期班 级 学 号姓 名指导教师实验一 Visual C++ 6.0编程环境与C语言程序的调试过程一、实验学时2 学时。二、实验目的1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。三、预习

文***享 1年前 上传268   0

C语言实验报告《逻辑结构程序设计》

C语言实验报告《逻辑结构程序设计》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成绩:__________  实验二  逻辑结构程序设计  一、 实验目的  1、学会正确使用逻辑运算符和逻辑表达式  2、熟练掌握if语句和switch语句 

s***0 12年前 上传747   0