单片机原理及应用实验报告 2Word格式.docx
- 文档编号:19236301
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:35
- 大小:1.02MB
单片机原理及应用实验报告 2Word格式.docx
《单片机原理及应用实验报告 2Word格式.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验报告 2Word格式.docx(35页珍藏版)》请在冰豆网上搜索。
⑴#defineucharunsignedchar
#defineuintunsignedchar可以简便。
⑵延时函数可以用用三个FOR循环加空语句。
8.成绩评定
附录实验源程序
/****预处理部分****/
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedchar
/****变量的定义****/
sbitP1_0=P1^0;
/****子函数部分****/
voiddelay_ms(intx)
{
uchari,j,k;
//定义三个无符号字符型变量
for(i=0;
i<
x;
i++)//三个FOR循环用来延迟
for(j=2;
j>
0;
j--)
for(k=248;
k>
k--);
}
/****主函数部分****/
voidmain(void)
while
(1)
{
P1_0=1;
//P1口输出高电平,让LED点暗
delay_ms(200);
//延迟200MS
P1_0=0;
//P1口输出低电平,让LED点亮
//延迟200MS
}
}
/****中断函数部分****/
实验项目二定时/计算器的基本应用
1.实验目的
⑴掌握MCS-51定时/计数器的基本工作原理与使用方法;
⑵了解MCS-51单片机的中断服务程序的基本设计方法。
用定时器T0实现与P1.0端口相连的发光二极管以1Hz的频率闪烁用定时器T1实现与P1.1端口相连的发光二极管以2Hz的频率闪烁。
3.实验电路框图
4.实验任务分析
设置系统的时钟频率为12MHZ,利用定时/器计数器T0编程实现。
将两个LED分别接在P1.0,P1.1上。
从P1.0输出周期为1s的方波,只需P1.0每隔0.5s取反一次,从P1.1输出周期为2s的方波,只需P1.0每隔1s取反一次。
当系统时钟为12MHZ,定时器/计数器T0工作于方式一,最大的定时时间为65536us,TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P1.0每循环10次取反一次,P1.1每循环20次取反一次。
5.实验流程框图
返回
6.实验过程记录
⑴实验过程
⑵问题及解决方法
系统只能循环一次,不能反复循环。
将num1,num2赋予原值
7.实验总结
⑴学会了用查询方式来定时。
当计数溢出时,TF0为1;
⑵学会用TH0=(65536-50000)/256;
来确定初值的第四位,高四位。
(3)学会了定时器/计数器的初始化。
①确定工作方式,对TMOD赋值。
②计算定时或计数的初值,将初值写入TH0,TL0或TH1,TL1。
③根据需要开启定时器/计数器中断,对IE寄存器赋值。
④启动定时器/计数器工作,将TR0或TR1置“1”。
8.成绩评定
/**********预处理部分**********/
#include<
reg51.h>
#defineuintunsignedint
/**********变量定义部分**********/
sbitled1=P1^0;
sbitled2=P1^1;
/**********子函数部分**********/
voidtimer0_init()
TMOD=0x01;
//设置定时器0为为工作方式1
TH0=(65536-50000)/256;
//设置初值
TR0=1;
/**********主函数部分**********/
ucharnum1=0,num2=0;
timer0_init();
{
do{}while(!
TF0);
//等待直到查询计数溢出
num1++;
num2++;
TH0=(65536-50000)/256;
TF0=0;
if(num1>
=10)
{
led1=!
led1;
//发光管状态取反
num1=0;
//num1清零,从新再计
}
if(num2>
=20)//1s时间到
led2=!
led2;
num2=0;
//num2清零,从新再计
/**********中断函数部分**********/
⑴掌握MCS-51中断系统的基本工作原理与使用方法;
⑵掌握MCS-51单片机的中断服务程序的基本设计方法。
基本部分:
在P2端口接8个LED灯,用定时器T0,采用中断方式,每隔1s使点亮的LED增加1个;
当8个LED全部点亮后,重新开始下一个循环。
提高部分:
在P3.2端口接一个按键开关,由它来控制以上LED的循环点亮,要求也采用中断控制方式。
3.实验电路框图
在P2端口接8个LED灯,用定时器T0,采用中断方式,系统的震荡周期为12MHz,它的机器周期为1us.
⑵软件设计说明每隔1s使点亮的LED增加1个;
当系统时钟为12MHZ,定时器/计数器T0工作于方式一,最大的定时时间为65536us,TL0=(65536-50000)%256;
TH0=(65536-10000)/256;
一经过100次中断,P2向左移动个0;
SEC=0
系统一开始只有一个循环,一个循环结束后不能回到起点。
if(P2==0x00){P2=0x7f;
}使得系统重新从第一个灯开始循环点亮。
⑴学会用中断函数来计时。
(2)学会用依次向左移0来循环点亮小灯
8.成绩评定
/*******预处理部分**********/
ucharnum1;
void_init_timer0()
ET0=1;
EA=1;
{
init_timer0();
P2=0xff;
//P2端口设置初值
{
if(P2==0x00)//8个灯循环后,再回到第一个灯
P2=0x7f;
if(num1==100)//1s到
num1=0;
//num1清零,重新计时
P2=P2<
<
1;
//向左移一个灯
voidint_timer0(void)interrupt1
num1++;
TH0=(65536-10000)/256;
//重置初值
TL0=(65536-10000)%256;
⑴了解LED数码管的基本工作原理与使用范围;
⑵掌握LED数码管静态显示程序的基本设计方法;
⑶掌握LED数码管动态显示程序的基本设计方法;
基本部分:
用LED数码管设计一个0—99秒的计数器,LED的显示方式可以采用静态显示方式实现;
用LED数码管设计一个0—99.99秒的计数器,LED的显示方式采用动态显示方式实现。
4.实验任务分析
Y
⑵问题及解决方法
怎么实现0—99依次增加?
将各位十位用延迟函数分开显示。
⑴知道了P0=0xff;
P2=0x00;
是消影,使显示更加清楚。
⑵用switc(i&
0x01)case语句来控制AT89C51的P2^0,P2^1是输出高电平还是低电平。
/****变量定义****/
unsignedchari,second;
unsignedseg_table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidtimer0_init()
TH0=(65534-2000)/256;
TL0=(65534-2000)%256;
//开启中断
ET0=1;
//开启定时器0中断
//开启定时器
voidmain(void)
second=00;
switch(i&
0x01)//个位十位分开显示
case0:
P0=0xff;
P0=seg_table[second%10];
P2=0x02;
}break;
case1:
P0=seg_table[second/10];
P2=0x01;
}break;
default:
break;
/****中断函数****/
voidtimer0_int()interrupt1
TH0=(65536-2000)/256;
//重置初值
TL0=(65536-2000)%256;
i++;
if(i==250)
second++;
if(second==100)
second=0;
//时间到100秒是清零
⑴了解独立式键盘的基本工作原理与使用范围;
⑵掌握独立式键盘的识别方法、软件消抖的原理;
⑶掌握独立式键盘程序的基本设计方法。
在MCS-51的P3.2管脚接一独立按键,再P1端口接8个LED,要求用按键来控制LED的循环点亮;
将基本部分中LED的点亮方式改为闪烁。
让8盏LED灯分别接在AT89C51的P1端口。
P3.2接按键。
软件主要包括延时函数,移动函数,和一个主函数。
移动函数用位运算,实行灯的循环移动。
a=temp<
count;
b=temp>
>
(8-count);
P1=a|b;
不知道怎么样才能让灯闪烁?
在主函数里加上一个P1端口为高电平。
怎样让灯依次向左移动?
b=temp>
怎么让按键锁定?
Button=0.
实验总结
⑴软件消影的原理:
P1=0xff.
⑵确认按键按下的步骤:
(1)初次判断是否按下键盘。
(2)延时函数。
(3)再次判断是否按下键盘。
sbitbutton=P3^2;
//定义按键的输入端
unsignedcharcount;
//按键计数,每按一下,count加1
unsignedchartemp;
unsignedchara,b;
voiddelay10ms(void)//延迟程序
unsignedchari,j;
for(i=20;
i>
i--)
for(j=248;
j--);
key()//按键判断程序
if(button==0//判断是否按下键盘)
delay10ms();
//延迟,软件去干扰
if(button==0)//确定按键按下
{count++;
//按键计数加1
if(count==8)//计8次重新开始
{count=0;
//将count清零
}while(button==0);
//按键锁定,每按一下count只加1
move()//led向左移动移动函数
{a=temp<
P1=a|b;
main()
{count=0;
temp=0xfe;
P1=0xff;
P1=temp;
while
(1)//永远循环,扫描判断按键是否按下
{key();
//调用按键识别函数
move();
//调用led移动函数
⑴了解MCS-51单片机串口的基本工作原理与使用范围;
⑵掌握MCS-51单片机串口通讯程序的基本设计方法。
在PROTEUS软件中采用串口虚拟终端,编写一个发送程序,将自己的学号发送到虚拟终端显示;
在单片机甲的P1口接8个开关,再单片机乙的P1口接8个LED,编写程序,将单片机甲的开关状态再单片机乙上显示出来。
基本部分
提高部分
基本实验:
AT89C51的振荡频率为6MHZ,P3.0/RX0与串口检测工具的TX0相连,P3.0/TX0与串口检测工具的RX0相连。
提高部分:
单片机甲发送机,它的P1端口接8个开关;
单片机乙接受机,它的P1端口接8个LED。
单片机甲的开关闭合为低电平,不闭合为高电平。
将单片机甲P3.0/TX0与单片机已P3.0/RX0相连。
设置串口方式一,SCON=0x40;
PCON=0x00;
设置计数器方式二,TMOD=0x20;
设置波特率为1200,TH1=0xf3;
TL1=0xf3;
启动定时器TR1=1。
接收数据
提高部分
1.起先输不出学号,是连串的乱码。
89C51的频率没有匹配,要设定为6兆。
⑴要进行串口初始化,并且要设定好串行口的工作方式。
⑵
voidmain()
unsignedchara[]={"
201005014102"
};
unsignedinti;
SCON=0x40;
//设置串行口为工作方式2
PCON=0x00;
//系统复位
TMOD=0x20;
//设置定时器1为工作方式2
TH1=0xf3;
//设置计数器初值
TR1=1;
while
(1)
12;
i++)
SBUF=a[i];
//输入学号
while(!
TI){;
TI=0;
}
提高部分发射
/********预处理部分********/
/********变量定义部分********/
/********子函数部分********/
/********主函数部分********/
SCON=0X40;
//设置串行口为工作方式2(10000000)
PCON=0X00;
//系统复位(00000000)波特率不倍增
TMOD=0X20;
//设置定时器1为工作方式2(00000010)
TH1=0XF3;
TL1=0XF3;
TR1=1;
//开启定时器/计数器工作,开始提供1200波特率
SBUF=P1;
//串行传送
do{;
}while(!
TI);
//等待串行传送完毕
//T1软件清零,为下一次传送数据做准备
/********中断函数部分**
接受部分
/********变量定义部分********/
//unsignedinti;
SCON=0X50;
//设置串行口为工作方式2(10010000)
{
RI);
//等待串行接收完毕
RI=0;
//R1软件清零,为下一次接收数据做准备
P1=SBUF;
//将串行数据传递给P1
/********中断函数部分********/
⑴了解ADC0808基本工作原理与使用方法;
⑵掌握MCS-51单片机ADC程序的基本设计方法。
利用AT89C51和ADC0808设计一个简单的数字电压表,测量范围0-4.99V,采用3位LED数码管将采样后的结果进行显示;
⑴将数字电压表的测量范围改为0-9.99V;
⑵将基本部分的单通道数字电压表设计成一个8通道的数字电压表。
Adc0808的A,B,C接地选通0通道,在0通道上外接0~5v变化的电源,adc808的输出端口与at89c51的P1端口相连,P2端口作为控制端口,P0端口与显示译码管相连。
软件组要由显示函数,中断函数,主函数构成。
返回
怎样将将二进制转换成十进制?
将P0=n/5.1*10;
⑴用switch来选择显示百,十,个。
⑵学会用adc808来进行ad转换。
/*****预处理部分*****/
/*****变量定义*****/
sbitST_abc0808=P3^6;
sbitOE_abc0808=P3^5;
sbitEOC_abc0808=P3^2;
sbitALE=P3^7;
unsignedinta1,a2,a3,n,i;
unsignedcharcodetable0[]={0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x78,0x00,0x10};
//数码管编码,小数点点亮
unsignedcharcodetable1[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管编码,小数点不点亮
/***子函数***/
voidtime0_init()
//设置定时器0为为工作方式1(00000001)
TR0=1;
voiddisplay()//显示函数
a1=n/100;
//百位
a2=(n%100)/10;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理及应用实验报告 单片机 原理 应用 实验 报告