单片机C51程序设计实验报告书Word格式.docx
- 文档编号:17817974
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:24
- 大小:662.42KB
单片机C51程序设计实验报告书Word格式.docx
《单片机C51程序设计实验报告书Word格式.docx》由会员分享,可在线阅读,更多相关《单片机C51程序设计实验报告书Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
sel=_crol_(sel,1);
//改变显示变量
}
四、实验结论:
用while语句实现发光二极管循环流水点亮,从上到下一次点亮。
实验二C51分支程序设计
学习多分支选择结构和switch语句,了解循环的嵌套。
dowhile循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。
(仿真电路图)
(流程图)
#include<
voidmain()
{chara;
do
{P1=0xff;
a=P1;
a=a&
0x03;
switch(a)
{case0:
P2=0x0e;
break;
case1:
P2=0x0d;
case2:
P2=0x0b;
case3:
P2=0x07;
}
}while
(1);
多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。
实验三外部中断实验
掌握外部中断的原理以及中断处理程序的编写方法。
外部中断0和外部中断1均为下降沿触发,当外部中断0发生时,P0端口的电平反向,当外部中断1发生时,P1端口的电平反向,LED状态取反,引脚P3.2、P3.3是外部中断INT0和INT1的输入端,本实验仿真电路图、流程图如下:
(主程序)(中断服务程序)
stdio.h>
voidISO(void)interrupt0
{P0=~P0;
}//P0端口反向
voidIS1(void)interrupt2
{P1=~P1;
}//P1端口反向
voidmain()
{P0=0x00;
P1=0xFF;
SCON=0x50;
TMOD=0x22;
TH1=0xF3;
TR1=1;
IT0=1;
IT1=1;
//设置下降沿触发方式
EX0=1;
EX1=1;
EA=1;
//中断允许
while
(1);
利用外中断程序可控制LED的亮灭,P0口、P1口电平反向,LED状态取反。
实验四定时/计数器实验
学习定时计数器的使用和编写方法,进一步掌握中断处理程序的方法以及对示波器的了解。
启动定时器T1延时10ms,当定时时间到产生中断,执行中断程序,LED熄灭,T1再延时10ms,点亮LED,如此循环,本实验仿真电路图、流程图如下:
sbitWave=P1^0;
//位定义
voidT1ISR(void)interrupt3//定时器T1中断响应
{Wave=~Wave;
//反向
TL1=0x0F0;
//重置计数初值
TH1=0x0D8;
voidmain(void)
{Wave=0;
//初始化P1.0=0
TMOD=0x10;
//设置定时器T1为模式1
//启动定时计数器
ET1=1;
//开中断
while
(1){}
T1工作于模式1,定时器产生10ms的定时,定时中断产生,P1.0端口的输出在示波器中显示,LED闪烁。
利用定时计数器可控制LED的显示时间变化。
实验五外中断使用
更熟练的掌握外部中断的原理与应用以及中断处理程序的编写方法。
引脚P3.2、P3.3分别是外部中断INT0和外部中断INT1的输入端,均为低电平有效,下降沿触发。
外中断0发生,8只LED全部点亮,外中断1发生,8只LED闪烁,本实验仿真电路图、流程图如下:
sbitP32=P3^2;
voiddelay(unsignedintd)//定义延时子函数
{while(--d>
{P0=0xFF;
//熄灭LED
//外中断0、1脉冲触发方式
for(;
;
)//延时等待中断发生
{;
}
voidINT0_ISR()interrupt0//外中断0中断服务函数
voidINT1_ISR()interrupt2//外中断1中断服务函数
{while(P32!
=0)//如果有外中断0,退出
{delay(5000);
P0=0x00;
delay(5000);
P0=0xFF;
当外中断0发生,即按下了So按钮,8只LED点亮;
当外中断1发生,即按下了S1按钮,8只LED闪烁,遇到外中断0发生,8只LED停止闪烁并保持点亮状态。
实验六串行口双机通信实验
理解串行通信的基本概念和C51单片机的串行通信接口结构,熟悉串口的4种工作方式、通信连线和应用编程。
单片机1将P1口拨动开关数据装入SBUF,经由TXD将数据发送给单片机2,单片机2将接收数据存入SBUF,再由SBUF装入累加器,并输出至P1,点亮相应端口的LED,本实验仿真电路图、流程图如下:
(程序流程图)
单片机1的代码:
#defineuintunsignedint
#defineucharunsignedchar
{uchari;
TMOD=0x20;
TH1=TL1=0xff;
PCON=0x80;
P1=0xff;
i=P1;
SBUF=i;
while(TI==0){;
TI=0;
单片机2的代码:
{uchari=0;
{while(RI==0){;
RI=0;
i=SBUF;
P1=i;
当开关拨动到左边则对应的LED点亮,反之LED熄灭。
将双片单片机串行通信,结果存入SBUF并输出至P1使相应的LED点亮。
实验七单片机串口通信
(二)
加深对串行通信的基本概念和C51单片机的串行通信接口结构的了解,以及串口的工作方式、通信连线和应用编程。
甲、乙两机以方式1进行串行通信,甲机首先发送信号AA,乙机接收到后应答BB,甲收到BB后发送数据,数据发送完毕立即发送校验和。
乙机收齐一个数据块后,再接收甲发来的校验和,并将其与乙求得的校验和比较,若相等,说明接收正确,乙回答00H,若不等,说明接收不正确,乙回答0FFH,请求重新发送。
#defineTR1//TR=1,发送
ucharidatabuf[10];
ucharpf;
/*串行口初始化子函数*/
voidinit(void)
{TMOD=0x20;
//T1工作于方式2
TH0=0xE8;
TL0=0xE8;
SCON=0X50;
//串行口工作于方式1,REN=1
/*发送子函数*/
voidsend(ucharidata*d)
{uchari;
{SBUF=0xAA;
//发送联络信号
while(TI==0)//等待一帧发送完毕
//发送完毕,标志位清0
while(RI==0)//等待乙机应答信号
}while(SBUF^0xBB!
=0);
//乙机未准备好,继续联络
{pf=0;
//校验和变量清0
10;
{SBUF=d[i];
//发送一个数据
pf+=d[i];
//计算校验和
while(TI==0)
TI=0;
SBUF=pf;
//发送校验和
while(TI==0)TI=0;
while(RI==0)RI=0;
//等待乙机应答
}while(SBUF!
//回答出错,则重新发送
/*接收函数*/
voidreceive(ucharidata*d)
{while(RI==0)RI=0;
}while(SBUF^0xAA!
//判断甲机是否请求
SBUF=0xBB;
//发应答信号
//清校验和
{d[i]=SBUF;
//接收数据
}//计算校验和
//接收甲校验和
if((SBUF^pf)==0)//比较校验和
{SBUF=0x00;
}//校验和相等,发0x00
else
{SBUF=0xFF;
//校验和不相等,发0xFF
{init();
//串行口初始化子函数
if(TR==0)
{send(buf);
}//发送
{receive(buf);
}//接收
甲、乙两单片机通过P3口连接,设置寄存器SBUF,串口工作于方式1.根据TR的设置,利用发送函数和接收函数分别实现发送和接收功能。
实验八多位七段数码动态显示
掌握数码管动态显示数字的原理和连接方式,学习端口输入输出的应用,以及74LS245驱动LED显示的电路设计。
轮流选中各位LED数码管,同时给P0口送不同的码字,并做一定的视觉残留,数码管就会同时出现不同的数字。
uchardatadis_buf[6];
//显示缓冲区
ucharcodetable[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};
//代码表
voidd1_ms()//延时1ms函数
{unsignedintj;
for(j=0;
j<
200;
j++);
voiddisplay(void)//显示函数
{ucharsegcode,bitcode,i;
bitcode=0xfe;
//位码赋初值
6;
{segcode=dis_buf[i];
//显示缓冲器内容查表
P0=table[segcode];
P3=bitcode;
d1_ms();
P3=0xff;
//关闭显示
bitcode=bitcode<
<
1;
//调整位码
bitcode=bitcode|0x01;
voidmain(void)
{dis_buf[0]=1;
dis_buf[1]=2;
//显示缓冲区赋初值
dis_buf[2]=3;
dis_buf[3]=4;
dis_buf[4]=5;
dis_buf[5]=6;
{display();
七段数码管动态显示是一位一位轮流点亮各位数码管,每隔一段时间显示,设置点亮延时时间短,循环扫描点亮,使人眼分辨不出,看到各位数码管同时发光。
实验九数/模转换实验
学习掌握D/A转换基本原理,掌握D/A转换程序设计方法。
D/A转换器的功能主要是将输入的数字量信号转换成模拟量,检测按键执行相应的D/A转换,显示结果。
absacc.h>
#defineDAC0832XBYTE[0x7fff]
sbitP10=P1^0;
sbitP12=P1^2;
{DAC0832=0x80;
if(P10==0)
{DAC0832=0xff;
if(P12==0)
{DAC0832=0x00;
通过手动按键将数字量DAC0832转换输出模拟电压信号。
实验十模/数转换实验
学习掌握A/D转换基本原理,掌握用无条件方式、查询方式、中断方式完成模/数转换程序的编写方法。
A/D转换是将模拟量转换为一定码制的数字量。
调节滑动变阻器将模拟量转换成数字量通过P1口输出显示。
#defineADC08080XBYTE[0x78ff]
sbitP33=P3^3;
sbitP27=P2^7;
sbitP36=P3^6;
sbitP37=P3^7;
{EA=1;
ADC08080=0;
//启动A/D
voidint0()interrupt2
{P1=ADC08080;
//读取数据
当A/D转换结束时,引脚EOC由低电平转换为高电平输出信号LED亮,调节滑动变阻器显示相应的LED亮。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 C51 程序设计 实验 报告书