单片机实验报告.docx
- 文档编号:5902786
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:25
- 大小:58.81KB
单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
单片机实验报告
单
片
机
实
验
报
告
实验一流水灯实验
一、实验目的
1)简单I/O引脚的输出
2)掌握软件延时编程方法
3)简单按键输入捕获判断
二、实验实现的功能
1)开机是点亮12发光二极管,闪烁三下
2)按照顺时针循环依次点亮发光二极管
通过按键将发光二极管的显示改为顺逆时针方式
三、系统硬件设计
四、系统软件设计
见附录1
五、实验过程中遇到的问题及解决方法
1,咱们的流水灯有12个二极管组成,在由P3,P2共同进行控制,这样在设计时就要对两者进行考虑,比平常的比较麻烦。
2,P3口的P3^2也是外部中断的入口,所以想要用外部中断进行控制就不行了。
首先我打算将P2^3口移走到P3^6口进行控制然后利用外部中断进行正反顺序控制,之后发现二极管顺序发生变化也比较麻烦,最后我常识了使用内部中断的方法。
指导老师签字:
日期:
实验二定时器或实时时钟实验
一,实验目的
1)数码管动态显示技术
2)定时器的应用
3)按键功能定义
二,实验实现的功能
1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
上述二个功能至少完成一种功能。
三、系统硬件设计
四、系统软件设计
见附录2
五、实验过程中遇到的问题及解决方法
我做的是电子表实验,电子表实验的四个数码管分别显示分钟和秒。
首先我考虑的是显示时间的问题,我利用了定时中断1对时间进行设置。
我设定时时间为10ms,这样循环100次为一秒,1000次为1000秒,通过定时中断达到了时间显示。
在设定时间的时候我用了三个按键对前三个可以分别设置,这用外部中断1实现的。
指导老师签字:
日期:
实验三双机通信实验
一、实验目的
UART串行通信接口技术应用
二、实验实现的功能
用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
三、系统硬件设计
四、系统软件设计
见附录3
五、实验过程中遇到的问题及解决方法
我在做双机通信的时候,对于其不是很了解,我参考了课本的例题进行了学习,发现在做的时候仍然会有问题。
如:
1)刚开始忽略了对单片机的串行口方式的设置,调试时查找资料设置了工作方式。
2)对定时器的初值设置计算错误,导致计时紊乱。
发现后修改解决问题。
3)串口初始化后,需要核对两机的奇偶校验位。
4)发出数据与接收的数据不吻合,发现接收端的初始化程序有误,修改后完成功能。
之后我有看了郭天祥版的教学视频进行了学习,也是受益匪浅。
指导老师签字:
日期:
实验四交通灯实验
一、实验目的
1)按键、数码管、发光二极管综合应用编程技术
2)数据存储于EEPROM的技术(也可以不使用)
3)定时中断技术
4)按键中断技术
二、实验实现的功能
1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。
3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。
再按该键,恢复正常显示。
三、系统硬件设计
四、系统软件设计
见附录4
五、实验过程中遇到的问题及解决方法
1,对于该实验的设计我参考了前三个实验的设计思路,并进行了一下综合。
在中断上沿用了实验二的内部中断的使用方法,通过定时,来对键盘进行扫描。
2,在实验时我不能很好的处理数码管显示和延时的关系,导致数码管动态扫描频率太低,不能点亮。
之后我仍然使用定时器的效果进行延时解决了该问题。
指导老师签字:
日期:
附录1
#include<10f08.h>
#include
#defineucharunsignedchar
#defineuintunsignedint
#definef11059200
#defineT0.01//定时10ms
#defineTH(65536-(unsignedint)(f*T/12+0.5))/256
#defineTL(65536-(unsignedint)(f*T/12+0.5))%256
/**********流水灯**********/
//ucharcoded[11]=
sbitd1=P2^0;sbitd2=P2^1;sbitd3=P2^2;
sbitd4=P2^3;sbitd5=P2^4;sbitd6=P2^5;
sbitd7=P2^6;sbitd8=P2^7;sbitd9=P3^2;
sbitd10=P3^3;sbitd11=P3^4;sbitd12=P3^5;
/*******按键**************/
sbith1=P3^6;
sbith2=P3^7;
sbitl1=P0^5;
sbitl2=P0^6;
sbitl3=P0^7;
voiddelay500ms();
voiddelay100ms();
voiddelay10ms();
unsignedchara,b,c=20,i,j,k,h=0;
//************闪烁三次**********//
voidshanshuo()
{
ucharx;
for(x=0;x<3;x++)
{
P2=0x00;
P3=0xc3;
delay500ms();
P2=0xff;
P3=0x3c;
delay500ms();
}
}
//************顺时针********//
voidshunshizhen()
{
a=0xfe;
P2=a;
P3=0x3c;
delay500ms();
for(i=7;i>0;i--)
{
a=_crol_(a,1);//左移后面跟1
P2=a;
delay500ms();
}
P2=0Xff;
P3=0xbf;
b=0xfb;
P3=b;
delay500ms();
for(j=3;j>0;j--)
{
b=_crol_(b,1);
P3=b;
delay500ms();
}
}
//*************逆时针********//
voidnishizhen()
{
P2=0Xff;
b=0xdf;
P3=b;
delay500ms();
for(j=3;j>0;j--)
{
b=_cror_(b,1);
P3=b;
delay500ms();
}
P3=0xff;
a=0x7f;
P2=a;
delay500ms();
for(i=7;i>0;i--)
{
a=_cror_(a,1);
P2=a;
delay500ms();
}
}
//////////////////////
main()
{
TMOD=0X10;
TH1=TH;
TL1=TL;
EA=1;
ET1=1;
TR1=1;
shanshuo();
while
(1)
{
shunshizhen();
if(h==1)
nishizhen();
}
}
//********中断3**********//
voidintt1()interrupt3
{
TH1=TH;
TL1=TL;
c-=1;
if(c==0)
{
c=20;l1=0;l2=1;l3=1;
if(h1==0)
{
h=1;
}
if(h2==0)
{
h=0;
}
}
}
//*************延时程序*********//
voiddelay500ms()//@11.0592MHz
{
unsignedchari,j,k;
_nop_();
_nop_();
i=22;
j=3;
k=227;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
voiddelay100ms()//@11.0592MHz
{
unsignedchari,j,k;
_nop_();
_nop_();
i=5;
j=52;
k=195;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
voiddelay10ms()//@11.0592MHz
{
unsignedchari,j;
i=108;
j=145;
do
{
while(--j);
}while(--i);
}
附录2
#include<10f08.h>
#include
#defineucharunsignedchar
#defineuintunsignedint
#definef11059200
#defineT0.02//定时10ms
#defineTH(65536-(unsignedint)(f*T/12+0.5))/256
#defineTL(65536-(unsignedint)(f*T/12+0.5))%256
unsignedintb=100,c=1000,d=6000,e=60000;
unsignedchari=0,j=0,h=0,k=0;
bita;
intm,n;
/*******数码管编码********/
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0x77,0x7c,0x39,0x5e,0x79,0x71
/*******数码管段选********/
sbitw1=P0^0;
sbitw2=P0^1;
sbitw3=P0^2;
sbitw4=P0^3;
sbith1=P3^6;
sbith2=P3^7;
sbitl1=P0^5;
sbitl2=P0^6;
sbitl3=P0^7;
//************中断1***********//
voidintt0()interrupt2
{a=1;
h1=0;
//if(l3==0)
//j++;
}
//***********中断3**********//
voidintt1()interrupt3
{
TL0=TL;
TH0=TH;
b-=1;
c-=1;
if(b==0)
{
b=100;
i++;
if(i==10)
{i=0;
j++;}
if(j==6)
{
j=0;
h++;
}
if(h==10)
{
h=0;
k++;
}
if(k==6)
k=0;
}
}
//***************//
voiddelay()
{
for(m=0;m<500;m++)
for(n=0;n<500;n++)
;
}
voidDelay5ms()//@11.0592MHz
{
unsignedchari,j;
_nop_();
_nop_();
i=54;
j=198;
do
{
while(--j);
}while(--i);
}
voidDelay500ms()//实际是200ms//@11.0592MHz
{
unsignedchari,j,k;
_nop_();
_nop_();
i=9;
j=104;
k=139;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
//*************电子表********//
voiddianzibiao()
{
if(a=1)
{
a=0;
h1=0;
if(l2==0)
{
Delay500ms();
if(l2==0)
h++;
}
if(l1==0)
{Delay500ms();
if(l1==0)
k++;
}
if(l3==0)
{Delay500ms();
if(l3==0)
j++;
}
}
w4=0;
P1=table[i];
Delay5ms();
w4=1;
P1=0x00;
w3=0;
P1=table[j];
Delay5ms();
w3=1;
P1=0;
w2=0;
P1=table[h];
Delay5ms();
w2=1;
P1=0;
w1=0;
P1=table[k];
Delay5ms();
w1=1;
P1=0;
}
//**************************//
main()
{
IT1=1;
EX1=1;
EA=1;
ET1=1;
TR1=1;
PX0=1;
P1M1=0x00;
P1M0=0xff;
delay();
while
(1)
{
P2=0xff;
dianzibiao();
}
P2=0;
}
//*************秒表********//
附录3
主机程序
#include<10f08.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidsend(ucharkey_num)
{
SBUF=key_num;
while(!
TI);
TI=0;
}
voiddis(ucharkey)
{
P0&=0xfe;
P1=table[key];
delayms(10);
}
/************按键扫描************/
voidsaomiao()
{
{ucharkey;
P2=0xff;
P3=0xff;
P0=0x0f;
if((P3&0x40)==0||(P3&0x80)==0)
key=1;
send(key);
dis(key);
}
}
main()
{
P1M1=0x00;
P1M0=0xff;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
TR1=1;
EA=1;
ES=1;
PCON=0x00;
while
(1)
saomiao();
}
从机程序
#include<10f08.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchardatadisplay[4]={0};//数码管显示
voiddelayms(uintz)//基准延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**********数码管**********/
voiddis(ucharkey)
{
P0&=0xfe;
P1=table[key];
delayms(10);
}
/********主函数********/
main()
{
P1M1=0x00;
P1M0=0xff;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
PCON=0x00;
while
(1);
}
voidser()interrupt4
{
ucharkey;
RI=0;
key=SBUF;
dis(key);
}
附录4
#include<10f08.h>
#include
#defineucharunsignedchar
#defineuintunsignedint
#definef11059200
#defineT0.01//定时10ms
#defineTH(65536-(unsignedint)(f*T/12+0.5))/256
#defineTL(65536-(unsignedint)(f*T/12+0.5))%256
/**********交通灯**********/
//ucharcoded[11]=
sbitd1=P2^0;sbitd2=P2^1;sbitd3=P2^2;sbitd4=P2^3;sbitd5=P2^4;sbitd6=P2^5;
sbitd7=P2^6;sbitd8=P2^7;sbitd9=P3^2;sbitd10=P3^3;sbitd11=P3^4;sbitd12=P3^5;
/*******按键**************/
sbith1=P3^6;
sbith2=P3^7;
sbitl1=P0^5;
sbitl2=P0^6;
sbitl3=P0^7;
/*******数码管编码********/
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0x77,0x7c,0x39,0x5e,0x79,0x71
/*******数码管段选********/
//ucharcodew[]={0,1,2,3};
sbitw1=P0^0;
sbitw2=P0^1;
sbitw3=P0^2;
sbitw4=P0^3;
voidDelay5ms();
voiddelay950ms();
voiddelay990ms();
voidxianshi();
unsignedcharm,t,i,j,b,n,k,t,h=0,p,q,a=80;
//***************//
main()
{
TMOD=0X10;
TH1=TH;
TL1=TL;
EA=1;
ET1=1;
TR1=1;
P1M1=0x00;
P1M0=0xff;
while
(1)
{
P2=0x9e;//左右通行前后禁止d1,6,7,12
d12=0;
if(h!
=0)
m=h;
for(m=h;m>0;m--)
delay950ms();
P2=0Xff;
d12=1;
P2=0X5d;//左右黄亮前后禁止d2,6,8,12
d12=0;
for(t=5;t>0;t--)
delay990ms();
P2=0xff;
P2=0xf3;//左右禁止前后通行d3,4,9,10
d9=0;d10=0;d11=1;d12=1;
if(h!
=0)
m=h;
for(m=h;m>0;m--)
delay950ms();
P2=0xff;
P2=0xeb;//左右禁止前后换黄d3,5,9,11
d9=0;d11=0;d10=1;d12=1;
for(t=5;t>0;t--)
delay990ms();
P2=0XFF;
P3=0XFF;
}
}
//*********数码管显示******//
voidxianshi()
{
w4=0;
n=(unsignedint)(m%10);
P1=table[n];
Delay5ms();
w4=1;
P1=0x00;
w3=0;
k=(unsignedint)(m/10);
P1=table[k];
Delay5ms();
w3=1;
P1=0x00;
w3=1;
P1=0;
w2=0;
p=(unsignedint)(h%10);
P1=table[p];
Delay5ms();
w2=1;
P1=0;
w1=0;
q=(unsignedint)(h/10);
P1=table[q];
Delay5ms();
w1=1;
P1=0;
}
//*********延时*********//
voidDelay5ms()//@11.0592MHz
{
unsignedchari,j;
i=54;
j=199;
do
{
while(--j);
}while(--i);
}
voiddelay950ms()//@11.0592MHz
{
unsignedchari,j,b;
_nop_();
_nop_();
i=40;
j=236;
b=232;
do
{xianshi();
do
{
while(--b);
}while(--j);
}while(--i);
}
voiddelay990ms()//@11.0592MHz
{
unsignedchari,j,b;
_nop_();
_nop_();
i=42;
j=155;
b=55;
do
{
do
{
w4=0;
P1=table[t];
while(--b);
}while(--j);
}while(--i);
}
//********中断3**********//
voidintt1()interrupt3
{
TH1=TH;
TL1=TL;
a-=1;
if(a==0)
{a=80;l1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告