春季单片机实验报告书28页精选文档.docx
《春季单片机实验报告书28页精选文档.docx》由会员分享,可在线阅读,更多相关《春季单片机实验报告书28页精选文档.docx(36页珍藏版)》请在冰豆网上搜索。
春季单片机实验报告书28页精选文档
实验一I/O口输出实验—LED流水灯实验
一、要练说,得练看。
看与说是统一的,看不准就难以说得好。
练看,就是训练幼儿的观察能力,扩大幼儿的认知范围,让幼儿在观察事物、观察生活、观察自然的活动中,积累词汇、理解词义、发展语言。
在运用观察法组织活动时,我着眼观察于观察对象的选择,着力于观察过程的指导,着重于幼儿观察能力和语言表达能力的提高。
实验电路及连线
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
MCU模块
其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。
不记住那些基础知识,怎么会向高层次进军?
尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。
这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。
日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。
PB-EDU-011
硬件连接表
P20
D1
P21
D2
P22
D3
P23
D4
P24
D5
P25
D6
P26
D7
P27
D8
+5V
+5V
GND
GND
二、、实验流程图
#include//加载头文件
#include//使用库函数
voiddelay()//定义延时函数
unsignedchari,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
main()
P2=0xfe;//最低位是低电位,灌电流
while
(1)
P2=_crol_(P2,1);//移位依次点亮
delay();
实验二定时器实验
一、实验电路及连线
MCU模块
PB-EDU-011
P10
D1
+5V
+5V
GND
GND
硬件连接表
二、实验程序流程图定时中断服务程序
主程序
试验程序如下:
#include
#include//使用库函数
sbitK=P3^2;//定义
voiddelay(inti)//延时
intj;
for(i;i>0;i--)
for(j=0;j<255;j++);
voidinit();//
voidmain(void)
init();//初始化
EA=1;//开总中断
while
(1)
P1=0x00;//全亮
delay(127);
P1=0xff;//全灭
delay(127);//持续
voidinit()
EA=1;//开总中断
EX0=1;//外部中断0
voidinit0()interrupt0
P1=0xfe;//最低位亮
delay(200);
while
(1)
P1=_crol_(P1,1);//带进位循环左移
delay(127);//延时255毫秒
if(K==1)//检测开关状态
break;//
实验三单个外部中断实验
一、实验电路及连线
硬件连接表
MCU模块
PB-EDU-011
P10~P17
D1~D8
INT0
K1
+5V
+5V
GND
GND
二、实验程序流程
主程序框图外部子程序框图
试验程序如下:
#include
unsignedchartime;
sbitK=P1^0;
voidt1_init()
TMOD=0X10;//定时器T1方式1定时16位
IE=0x88;//总中断允许定时器T1中断
TH1=0x3c;//装入时间常数50ms(65536-50000)/256
TL1=0xb0;//(65536-50000)%256
TR1=1;//启动定时器
voidmain()
K=1;//P1.0口置高
t1_init();//中断初始化
time=0;//设定循环初值
while
(1);//等待中断
voidt1_func()interrupt3//中断函数
TH1=0x3c;//装入时间常数50ms
TL1=0xb0;
if(time<20)//循环20次达到1000ms
time=time+1;
elseif(time==20)
time=0;
K=~K;//P1.0口取反闪烁
实验四双单片机通信实验
一、实验电路及连线
硬件连接表
MCU模块
PB-EDU-002
PB-EDU-012
PB-EDU-011
P20~P27
Com1~Com8
P00~P07
L-A—L-H
P10~P13
R1-R4
P14~P17
C1-C4
P33
K1
INT0
INT
+5V
+5V
GND
GND
二、实验流程图
/*试验程序如下*/
#include"reg51.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineoutkP1
#defineoutP0
#defineconP2
ucharcode
seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳极二极管编码
ucharkey_buffer[8]={0xc0,0xc0,0xbf,0xbf,0xbf,0xbf,0xc0,0xc0};//选通数码管,11000000;1100//0000;10111111;10111111;10111111;10111111;11000000;11000000;没什么用,//在程序中重新赋值了
voidseg_scan(void);
ucharscan(void);
voiddelayms(uint);
volatileuchars_seg=0;
bitok;
ucharkey,send,rec;
voidmain(void)
TMOD=0X21;//中断初始化
TH1=0XFD;
TL1=0XFD;//
TR1=1;//启动定时器
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;//装载初值,30ms
TR0=1;//启动定时器0
SCON=0X50;//01010000,
PCON=0X00;//00000000,波特率未加倍
EA=1;//开总中断
EX1=1;//允许外部中断1
IT1=1;//方式1
EX0=1;//允许外部中断0
IT0=1;//方式1
ET0=1;//允许定时器中断
ES=0;//允许串行口中断
while
(1)//
outk=0xf0;
if(ok)//可以显示
ok=0;
seg_scan();//扫描显示
ucharscan(void)
uchark=16,m,n,in;
delayms(10);
outk=0xf0;//判断有键按下
if((outk&0xf0)!
=0xf0)//发生变化,有键按下
for(m=0;m<4;m++)
outk=(0xfe<in=outk;
for(n=0;n<4;n++)
in=outk;
in=in>>(4+n);//移位扫描高四位
if((in&0x01)==0)//若有变化,被改变
delayms(10);//延时消抖
if((in&0x01)==0)
k=n+m*4;//行数乘以4加上列数
break;
if(k!
=16)
break;//k被改变,则跳出不再循环检测
return(k);//返回数值
voiddelayms(uintj)//延时ms级
uchari;
for(;j>0;j--)
i=250;
while(--i);
i=249;
while(--i);
voidseg_scan(void)//数码管扫描程序
out=key_buffer[s_seg];
con=(1<s_seg++;
if(s_seg==8)
s_seg=0;//重新开始扫描
voidext0()interrupt0
EX0=0;//关闭外部中断0
key=scan();
if(key!
=16)
send=key,key_buffer[0]=seg[key/10],key_buffer[1]=seg[key%10];
EX0=1;//开启外部中断0
voidtimer0(void)interrupt1
ok=1;//
TH0=(65536-3000)/256;//
TL0=(65536-3000)%256;//30ms的初值装载
out=0xff;//关闭
voidext1()interrupt2//中断传送数据
EX1=0;//外部中断1关闭
ES=0;//关串行口中断,保证顺利发送
SBUF=send;//缓冲器中送入数据
while(!
TI);//等待发送完成,TI=1时,循环结束
TI=0;//软件置零,关中断
ES=1;//开中断
EX1=1;//开外部中断1
voidcom()interrupt4//串行口中断
RI=0;//接收到数据进入中断,软件置零RI
rec=SBUF;//存储接收到的数据
key_buffer[6]=seg[rec/10],key_buffer[7]=seg[rec%10];//存储十位与个位
实验五单片机与PC之间串行通信实验
一、实验电路及连线
使用MCU模块,用串口延长线将其和PC相连。
使用PB006板接入一按键到P3.5,P3.0接到PB005模块的RXD,P3.1接到PB005模块的TXD,。
四、实验说明
1、主要知识点概述:
本实验用到的主要知识点是:
MAX232工作原理和Proteus虚拟终端使用。
在简单的应用中,最常用的是MAX232电路。
它只需要有3条线即可完成通信,分别是第二脚RXD,第3脚TXD,第5脚GND。
串行通信与单片机之间的接口:
由于串行通信的电平逻辑定义是+15V(高电平1)-15V(低电平0)而单片机中分别用5V,0V来表示1,0它们之间必须通过电平转换才可以完成通信。
此设计中将两个虚拟终端按图示挂于电路中,属性分别设置如下:
VT1:
2、实验效果说明:
PROTEUS中,运行仿真后,在弹出虚拟终端窗口中选上HEXDISPLAYMODE,每次按下按键SW1,两个虚拟终端显示51单片机发送的字符01。
实际硬件实验中,连接好硬件后,按下按键,通过串口调试助手查看单片机发送的字符。
VT2:
五、实验流程图
试验程序如下:
#include
sbita=P3^5;//供查询信号
voidinit()
SCON=0x50;
PCON=0x80;//波特率加倍
TI=0;//定时器0
EA=1;//开总中断
ET1=1;
TMOD=0x20;//定时方式1,
TH1=0xfd;//溢出率:
每秒钟溢出的次数,溢出率*定时时间=1秒
TL1=0xfd;//9600,溢出率/16=波特率,定时时间=1/(16*波特率)秒
TR1=1;
main()
init();
while
(1)
if(a==0)//发出了信号
SBUF=0x01;//装入缓冲器
while(!
TI);//等待发送结束
TI=0;//软件置零
while(!
a);//a==0时,循环;a==1时,跳出
voidt1()interrupt3
实验六8255并行I/O扩展实验
一、实验电路及连线
MCU模块
PB-EDU-011
PB-EDU-06
P27
CS0
P00-P07
DB0-DB7
硬件连接表
K1-K8
PB0-PB7
D1-D8
PA0-PA7
ALE
LE
P36,P37
WR,RD
P35
RESET
+5V
+5V
+5V
GND
GND
GND
二、实验程序流程图
试验程序如下:
#include
unsignedcharxdata*con=0x7fff;//地址
unsignedcharxdata*pa=0x7ffc;//地址
unsignedcharxdata*pb=0x7ffd;//地址
main()
*con=0x82;//10000010:
最高位表示有效,设置为PA输出、PB输入
while
(1)
*pb=0xff;//全关
*pa=*pb;//外部输入被传至pa口
实验七矩阵键盘扫描实验
一、实验电路及连线
硬件连接表
MCU模块
PB-EDU-002
PB-EDU-012
P20~P27
L-A~L-G
P10~P13
R1~R4
P14~P17
C1~C4
+5V
+5V
+5V
GND
GND
GND
五、实验流程图
#include
unsignedchartable[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedcharkey_num;
voiddelay_5ms()
unsignedchari,j;
for(i=0;i<=25;i++)
for(j=0;j<=200;j++)
unsignedcharkey_scan()
/*键盘扫描原理:
①消抖②查询:
key_temp1用于赋给P1口值、key_temp0用于查询P1口值,对低四位赋高电位,按键按下时,高四位赋给是低电位,按键按下时,按下行被置为低,则再反转扫描,查处所在列,综合后知被按下间的位置*/
unsignedcharkey_temp0,key_temp1;
P1=0x0f;
key_temp0=P1;
if(key_temp0!
=0x0f)
delay_5ms();
key_temp0=P1;
if(key_temp0!
=0x0f)
P1=0xf0;
key_temp1=P1;
if(key_temp0==0x0e)
switch(key_temp1)
case0xe0:
key_num=3;break;
case0xd0:
key_num=2;break;
case0xb0:
key_num=1;break;
case0x70:
key_num=0;break;
default:
key_num=0;break;
elseif(key_temp0==0x0d)
switch(key_temp1)
case0xe0:
key_num=7;break;
case0xd0:
key_num=6;break;
case0xb0:
key_num=5;break;
case0x70:
key_num=4;break;
default:
key_num=0;break;
elseif(key_temp0==0x0b)
switch(key_temp1)
case0xe0:
key_num=11;break;
case0xd0:
key_num=10;break;
case0xb0:
key_num=9;break;
case0x70:
key_num=8;break;
default:
key_num=0;break;
elseif(key_temp0==0x07)
switch(key_temp1)
case0xe0:
key_num=15;break;
case0xd0:
key_num=14;break;
case0xb0:
key_num=13;break;
case0x70:
key_num=12;break;
default:
key_num=0;break;
returnkey_num;
main()
while
(1)
key_num=key_scan();//输出键值
P2=table[key_num];//显示
实验八1602液晶显示的控制(44780)
一、实验电路及连线
硬件连接表
MCU模块
PB-EDU-003
PB-EDU-003
P00~P07
DB0~DB7
LD0~LD7
P20
RS
P21
RW
P22
CS
ALE
LE
+5V
+5V
GND
GND
注:
连接好以后,如果液晶无实验现象或显示不对,请通过电位计调整对比度,或按CPU板复位键对系统复位。
二、实验程序流程图
详细的程序流程请参考注释。
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitrs=P2^0;//1602的数据/指令选择控制线
sbitrw=P2^1;//1602的读写控制线
sbiten=P2^2;//1602的使能控制线
ucharcodetable[]="Hello";
ucharcodetable1[]="WelcomeToChina";
voiddelay(uintn)
uintx,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
voidlcd_wcom(ucharcom)//1602写命令函数
rs=0;//选择指令寄存器
rw=0;//选择写
P0=com;//把命令字送入P2
delay(5);//延时一小会儿,让1602准备接收数据
en=1;//使能线电平变化,命令送入1602的8位数据口
en=0;
voidlcd_wdat(uchardat)//1602写数据函数
rs=1;//选择数据寄存器
rw=0;//选择写
P0=dat;//把要显示的数据送入P2
delay(5);//延时一小会儿,让1602准备接收数据
en=1;//使能线电平变化,数据送入1602的8位数据口
en=0;
voidlcd_init()//1602初始化函数
lcd_wcom(0x3c);//8位数据,双列,5*7字形功能6
lcd_wcom(0x0c);//开启显示屏,关光标,光标不闪烁功能4
lcd_wcom(0x06);//显示地址递增,即写一个数据后,显示位置右移一位功能3
lcd_wcom(0x01);//清屏功能1
lcd_wcom(0x80+0x05);//显示地址设为80H(即05H,)上排第一位功能8
voidmain()//主函数
ucharn,m=0;
lcd_init();//液晶初始化
for(m=0;m<5;m++)//将table[]中的数据依次写入1602显示
lcd_wdat(table[m]);
delay(200);
lcd_wcom(0x80+0x40);//重新设定显示地址为0xc4,即下排第5位相对地址到绝对地址的变换
for(n=0;n<16;n++)//将table1[]中的数据依次写入1602显示
lcd_wdat(table1[n]);
delay(200);
while
(1);//动态停机
实验九A/D转换实验
一、实验电路及连线
ADC0808是8位的A/D转换器件,在本实验中,它的输出口连接到单片机的P1口,控制信号ALE和START连接到P21,时钟信号CLOCK连接到P20,EOC连接到P23,输出控制信号OE到P27,输入选择地址ADD_A、ADD_B和ADD_C连接到P24-P26。
硬件连接表
MCU模块
PB-EDU-010
PB-EDU-011
P00~P07
D1~D8
P10~P17
DB0~DB7
P20
0809_CLK
P21
0809_ST
P21
0809-ALE
P23
0809_EOC
P24
0809_A
P25
0809_B
P26
0809_C
P27
0809_OE
+5V
+5V
+5V
GND
GND
GND
二、实验程序流程图
#include
sbitclk=P2^0;//时钟信号
sbitst=P2^1;//启动信号
sbi