单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx

上传人:b****5 文档编号:21536804 上传时间:2023-01-31 格式:DOCX 页数:32 大小:255.89KB
下载 相关 举报
单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx_第1页
第1页 / 共32页
单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx_第2页
第2页 / 共32页
单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx_第3页
第3页 / 共32页
单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx_第4页
第4页 / 共32页
单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx

《单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx》由会员分享,可在线阅读,更多相关《单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx(32页珍藏版)》请在冰豆网上搜索。

单片机实验报告含流水灯交通灯时钟双机通讯Word下载.docx

do

{

do

{

while(--k);

}while(--j);

}while(--i);

}

//====================延时300毫秒=====================

voidDelay300ms()

i=13;

j=156;

k=83;

//========================流水灯顺时针旋转=======================

voidshun_z()

uintm,n;

bita;

for(m=0;

m==0;

EX0=1;

//开外部中断0

a=P0_5;

//将P0_5口赋给P3_2口

P3_2=a;

P2=0xfe;

P4_4=1;

P3_3=1;

P3_4=1;

P3_5=1;

Delay300ms();

for(n=0;

n<

8;

n++)

{

a=P0_5;

P3_2=a;

P2=P2<

<

1;

P2=P2|0x01;

if(n==7)break;

Delay300ms();

}

P4_4=0;

P3_3=0;

P3_4=0;

P3_5=0;

}

//========================流水灯逆时针旋转(interrupt0)=======

voidint0()interrupt0

EX0=0;

P4_4=1;

P3_3=1;

P2=0xff;

P3_5=0;

Delay300ms();

P3_5=1;

if(P0_5==0)break;

P3_4=0;

P3_4=1;

P3_3=0;

P4_4=0;

P2=0x7f;

for(n=0;

P2=P2>

>

P2=P2|0x80;

if(n==7)break;

if(P0_5==0)break;

}

//============================所有灯点亮并闪烁三下=============

voidSSS()

uintm,n;

EX0=0;

//所有灯顺时针点亮

Delay100ms();

{

Delay100ms();

for(m=0;

m<

4;

m++)//所有灯闪三下

{

P2=0x00;

P4_4=0;

P3_3=0;

P3_4=0;

P3_5=0;

Delay300ms();

P2=0xff;

P4_4=1;

P3_3=1;

P3_4=1;

P3_5=1;

}

//==========================主函数=========================

voidmain()

{

P4SW|=0x10;

//将P4_4口定义为普通I/O口

P3_6=0;

IT0=0;

EX0=1;

EA=1;

SSS();

shun_z();

五、实验过程中遇到的问题及解决方法

1)如何将外部中断0与按键1联系到一起?

解决方法:

通过设置一个中间变量a,将按键1的端口P0^5的值赋给a,再把a的值赋给外部中断0的端口P3^2,这样问题就解决了。

2)外部中断0的端口与灯D9的端口重合,怎样才能使它们相互不受影响?

利用杜邦线吧D9的端口移到空管脚P4^4上,但是在此之前要把P4^4端口定义为普通I/O口才可以用。

定义方法为在主函数里写一条语句,P4SW|=0x10,这样问题就解决了。

指导老师签字:

日期:

实验二定时器实验

1)数码管动态显示技术

2)定时器的应用

3)按键功能定义

利用按键1、2、4、5设置定时器初值,按键1和按键4分别实现十位加一和减一功能,按键2和键5分别实现个位加一和减一功能,按下键3,开始倒计时,时间到所有灯开始闪烁。

试验中用到的硬件有:

1块stc51单片机、5个按键、1个共阴极四位数码管

intrins.h>

#defineucharunsignedchar

Ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0~F的共阴极字段码表

ucharchocode[]={0xfe,0xfd,0xfb,0xf7};

//位选码表

ucharN,M;

//位定义

sbitP0_7=P0^7;

//===================================延时1毫秒======================

voidDelay1ms()

unsignedchari,j;

_nop_();

i=11;

j=190;

while(--j);

//==================================延时300毫秒=====================

//=====================================数码管显示==================

voiddisplay(ucharN,M)

P1M0=0xff;

P1M1=0x00;

P0=chocode[3];

P1=table[M];

Delay1ms();

P0=chocode[2];

P1=table[N];

P0=chocode[1];

P1=table[0];

P0=chocode[0];

//========================扫描键盘,设置倒计时初值===============

voidScan_Key(void)

ucharm;

bitFLAG0=0;

P3_7=1;

P0=0xff;

m=P0;

switch(m&

0xf0)

case0xd0:

N++;

FLAG0=1;

break;

case0xb0:

M++;

default:

break;

if(FLAG0)

while((P0|0x0f)!

=0xff)//松手检测

display(N,M);

else

display(N,M);

P3_6=1;

P3_7=0;

N--;

M--;

//==========================主函数==============================

main()

{

P4SW|=0x10;

P1=0x0;

while

(1)

uchari;

Scan_Key();

//扫描键盘,确定倒计时初值

if(P0_7==0)//检测是否开始倒计时

while

(1)//定时开始

{

for(i=0;

i<

120;

i++)//循环定时120次,实现定时1秒钟

TMOD=0x01;

TH0=0xd8;

TL0=0xf0;

TR0=1;

display(N,M);

do{display(N,M);

}while(TF0==0);

//检测是否完成一次定时

if((M|N)==0)//定时到,所有灯闪烁

while

(1)

{

P0=0xff;

P2=0x00;

P4_4=0;

P3_3=0;

P3_4=0;

P3_5=0;

Delay300ms();

P2=0xff;

P4_4=1;

P3_3=1;

P3_4=1;

P3_5=1;

}

if(M==0)

M=9;

N--;

elseM--;

1)如何进行按键扫描,使得每一次按键都能有效?

通过看书后面的例题,在结合课设核心板的具体情况,自己慢慢摸索出来了扫描键盘的方法。

2)怎样实现按一下按键,数码管显示的数值加1或者减1?

首先自己试了试很多种方法,但无论如何都无法实现此功能,最后通过询问同学才知道,在按下按键时要才用“松手检测”的方法,即当按下按键时数码管一直显示当前值,此方法用while()语句实现。

3)单片机的定时器最大只能实现几十毫秒的定时,怎样才能实现定时一秒的功能?

解决方法:

利用for循环语句使定时器多执行几次定时功能,然后再跳出循环语句,这样就能实现一秒的定时功能了。

实验三双机通信实验

UART串行通信接口技术应用

双机通信,当两块板的按键按下时,对方的数码管上显示该键键值

实验中用到硬件有:

两块课程设计核心板,四根杜邦线

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

//0~6的共阴极字段码表

sbitP3_6=P3^6;

//位定义

sbitP3_7=P3^7;

sbitP0_3=P0^3;

ucharn;

//==================================延时10毫秒======================

voidDelay10ms()//@11.0592MHz

i=108;

j=144;

//================确定定时器和串行口工作方式以及波特率计算===========

voidUartInit(void)//9600bps@11.0592MHz

PCON&

=0x7F;

//波特率不倍速

SCON=0x50;

//8位数据,可变波特率

AUXR&

=0xBF;

//定时器1时钟为Fosc/12,即12T

=0xFE;

//串口1选择定时器1为波特率发生器

TMOD&

=0x0F;

//清除定时器1模式位

TMOD|=0x20;

//设定定时器1为8位自动重装方式

TL1=0xFD;

//设定定时初值

TH1=0xFD;

//设定定时器重装值

ET1=0;

//禁止定时器1中断

TR1=1;

//启动定时器1

ES=1;

//开串口

EA=1;

//开总中断

//====================================键盘扫描=======================

ucharm,i;

bitFLAG0=0;

P3_6=0;

P3_7=1;

for(i=0;

2;

i++)

P0=0xf7;

//设置P0口,P0^3位是0,即最右边的数码管显示键值

Delay10ms();

//延时10毫秒,给按键消抖

n=i*3+1;

//检测第一列按键是否被按下,如果有则是table[i*3+1]键

//表示有按键被按下

n=i*3+2;

//检测第二列按键是否被按下,如果有则是table[i*3+2]键

case0x70:

n=i*3+3;

//检测第三列按键是否被按下,如果有则是table[i*3+3]键

//================================串行口发送========================

voidsend()

SBUF=table[n];

while(!

TI);

TI=0;

}

//================================串行口接收=========================

voidreceive()

while(RI==0);

P1=SBUF;

RI=0;

//===============================主函数=============================

UartInit();

//强推挽输出,使数码管更亮

Scan_Key();

send();

receive();

1)不懂得双机通信的原理。

仔细看书,不懂的地方问同学,参考书生的例程,最终把双机通信的原理弄懂了。

2)怎样实现串口的接收与发送数据?

翻阅参考资料,与同学一起探讨商量,最终找到了较好的办法。

实验四交通灯实验

1)按键、数码管、发光二极管综合应用编程技术

2)数据存储于EEPROM的技术(也可以不使用)

3)定时中断技术

4)按键中断技术

模拟交通灯:

通过按键1和按键2设置红灯点亮时间,通过按键4和按键5设置绿灯点亮时间(注意:

红灯时间要比绿灯时间多两秒),设置好时间后按下按键3,交通灯开始工作,交通灯工作时按下按键6,所有红灯点亮(出现紧急情况),再次按下按键6恢复正常。

实验中用到的硬件有:

1块stc51单片机、12个发光二极管、6个按键、1个共阴极四位数码管

实验程序如下:

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};

ucharN,U,M,K,a,b,c,d;

//位定义

sbitP1_7=P1^7;

//==========================延时1毫秒=============================

voidDelay1ms()//@11.0592MHz

//===========================延时10毫秒============================

//====================

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1