河南理工基于51最小系统单片机实验.docx

上传人:b****7 文档编号:11331606 上传时间:2023-02-27 格式:DOCX 页数:18 大小:1.30MB
下载 相关 举报
河南理工基于51最小系统单片机实验.docx_第1页
第1页 / 共18页
河南理工基于51最小系统单片机实验.docx_第2页
第2页 / 共18页
河南理工基于51最小系统单片机实验.docx_第3页
第3页 / 共18页
河南理工基于51最小系统单片机实验.docx_第4页
第4页 / 共18页
河南理工基于51最小系统单片机实验.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

河南理工基于51最小系统单片机实验.docx

《河南理工基于51最小系统单片机实验.docx》由会员分享,可在线阅读,更多相关《河南理工基于51最小系统单片机实验.docx(18页珍藏版)》请在冰豆网上搜索。

河南理工基于51最小系统单片机实验.docx

河南理工基于51最小系统单片机实验

微机原理与单片机接口技术

实验报告

专 业 班 级:

姓           名:

学         号:

指 导 教 师:

 

实验一流水灯实验

一、实验目的

(1)简单I/O引脚的输出

(2)掌握软件延时编程方法

(3)简单按键输入捕获判断

二、实验实现的功能

(1)开机是点亮12发光二极管,闪烁三下

(2)按照顺时针循环依次点亮发光二极管

(3)通过按键将发光二极管的显示改为顺逆时针方式

三、系统硬件设计

 

四、系统软件设计

#include"at89x51.h"

#defineuintunsignedint

#defineucharunsignedchar

tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfb,0xf7,0xef,0xdf};

tab0[]={0xdf,0xef,0xf7,0xfb,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

tab2[]={0x00,0xff,0x00,0xff,0x00,0xff};

voidshunshi();

uinti;

voiddelay()

{uinti,j;

for(i=0;i<256;i++)

for(j=0;j<256;j++)

{;}

}

voidnishi()

{while

(1)

{uinti;

for(i=0;i<12;i++)

{if(i<4)

{P3=tab0[i];P2=0xff;delay();if(P3_6==0)shunshi();}

else

{P2=tab0[i];P3=0xff;delay();if(P3_6==0)shunshi();}

}

}

}

voidshunshi()

{while

(1)

{P0=0x00;

for(i=0;i<12;i++)

{if(i<8)

{P2=tab[i];P3=0xff;delay();if(P3_6==0)nishi();}

else

{P3=tab[i];P2=0xff;delay();if(P3_6==0)nishi();}}

}

}

voidmain(void)

{uinti;

for(i=0;i<6;i++)

{P2=tab2[i];P3=tab2[i];delay();}

shunshi();

}

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

遇到的问题:

1.对于不同端口的12支发光二极管,如何赋值依次点亮它们?

2.如何通过按键去改变流水灯的流向?

解决的方法:

1.通过建立数组,借助if判断语句,分别给各个二极管端口赋值。

2.借助if语句与子函数,通过软件键盘扫描,改变流水灯方向。

 

指导老师签字:

日期:

 

实验二定时器或实时时钟实验

1、实验目的

1)掌握定时器T0、T1的方式选择和编程方法

2)了解中断服务程序的设计方法

3)学会实时程序的调试技巧

二完成功能要求

1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能

2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)

三电路图设计

 

四系统软件设计

#include"AT89X51.h"

#defineuintunsignedint

#defineucharunsignedchar

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

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

tab2[]={0x00,0xff,0x00,0xff,0x00,0xff};

intk1,k2,k3,k4,m1,m2,m3,m4,a;

k1=0;k2=0;k3=0;k4=0;

m1=0;m2=0,m3=0;m4=0;

voiddelay(n)

{uinti,j;

for(i=0;i

for(j=0;j<256;j++)

{;}

}

voidDisshow()

{P0=acode[0];P1=num[m4];delay(10);

P0=acode[1];P1=num[m3];delay(10);

P0=acode[2];P1=num[m2];delay(10);

P0=acode[3];P1=num[m1];delay(10);

}

voidSet_time()

{staticintk1,k2,k3,k4;

if(a==1){k1=k1+1;m1=k1%10;}

if(a==2){k2=k2+1;m2=k2%10;}

if(a==3){k3=k3+1;m3=k3%10;}

if(a==4){k4=k4+1;m4=k4%10;}

if(a==5){EA=1;TMOD=0x10;TH1=0xd8;TL1=0xf0;ET1=1;TR1=1;while

(1){Disshow();};}

}

voidJishi()interrupt3

{staticinti=1;

i++;

TH1=0xd8;TL1=0xf0;

if(i%100==0)

{if(m4>0){m4=m4-1;Disshow();}

elseif(m3>0){m3=m3-1;m4=9;Disshow();}

elseif(m2>0){m2=m2-1;m3=9;m4=9;Disshow();}

elseif(m1>0){m1=m1-1;m2=9;m3=9;m4=9;Disshow();}

else{{P2=0;for(i=0;i<6;i++)

{P2=tab2[i];P3=tab2[i];delay(256);}}while

(1){m1=m2=m3=m4=0;Disshow();}}

}

}

voidmain()

{while

(1)

{Disshow();

P3_6=0;P3_7=1;

if(P0_5==0){delay(256);a=1;Set_time();}

if(P0_6==0){delay(256);a=2;Set_time();}

if(P0_7==0){delay(256);a=3;Set_time();}

P3_6=1;P3_7=0;

if(P0_5==0){delay(256);a=4;Set_time();}

if(P0_6==0){delay(256);a=5;Set_time();}

}

}

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

遇到的问题:

按键消抖控制不好,数码管显示不太亮

解决的方法:

适当调控延时时间,加上消抖程序;打开单片机相关寄存器,使P1口为强推挽输出,使数码管高亮。

 

指导老师签字:

日期:

 

实验三双机通信实验

1、实验目的

UART串行通信接口技术应用

2、完成功能要求

用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

3实验原理实验图

4、系统软件设计

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitH1=P3^6;

sbitH2=P3^7;

sbitL1=P0^5;

sbitL2=P0^6;

sbitL3=P0^7;

sbitW1=P0^0;

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

ucharnum,a,b,c,n;

voidsend();

voiddelay(ucharx)

{

for(a=x;a>0;a--)

for(b=110;b>0;b--);

}

voidmain()

{

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xf4;

TL1=0xf4;

TR1=1;

W1=0;

while

(1)

{

send();

}

}

voidsend()

{

H1=0;

H2=1;

L1=1;

L2=1;

L3=1;

if(!

L1)

{

delay(5);

if(!

L1)

num=1;

while(!

L1);

}

if(!

L2)

{

delay(5);

if(!

L2)

num=2;

while(!

L2);

}

if(!

L3)

{

delay(5);

if(!

L3)

num=3;

while(!

L3);

}

H1=1;

H2=0;

L1=1;

L2=1;

L3=1;

if(!

L1)

{

delay(5);

if(!

L1)

num=4;

while(!

L1);

}

if(!

L2)

{

delay(5);

if(!

L2)

num=5;

while(!

L2);

}

if(!

L3)

{

delay(5);

if(!

L3)

num=6;

while(!

L3);

}

if(num!

=n)

{

SBUF=num;

while(!

TI);

TI=0;

}

if(RI)

{

c=SBUF;

RI=0;

}

P1=tab1e[c];

}

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

遇到的问题:

如何将按键信息互发到对方数码管显示,怎么实现双机通信?

解决的方法:

通过网络上的查询,对有关实验编写好的的程序进行调用,与同学讨论,对程序进行调试后,完成实验,达到实验预期效果。

指导老师签名:

日期:

实验四交通灯实验

一、实验目的

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

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

3)定时中断技术

4)按键中断技术

二、完成功能要求

1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。

2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。

3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。

再按该键,恢复正常显示。

三、电路原理实验图

四、系统软件设计

#include"at89x51.h"

#defineuintunsignedint

#defineucharunsignedchar

uchartable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharzhuhuangdeng[5]={0x5d,0xdf,0x5d,0xdf,0x5d};

ucharcihuangdeng1[5]={0xeb,0xfb,0xeb,0xfb,0xeb};

ucharcihuangdeng2[5]={0x2b,0x3b,0x2b,0x3b,0x2b};

uintnum=0,n,number,k;

ucharsign=0;

voiddelay(uintn)

{

uchari,j;

for(i=n;i>0;i--)

for(j=110;j>0;j--);

}

voidshow(uintnumber)

{

uintge;

ge=number%10;

P0_0=1;

P0_1=1;

P0_2=1;

P0_3=0;

P1=table[ge];

delay(10);

}

voiddingshi()

{

TH0=0xd8;

TL0=0xf0;

TMOD=0X01;

TR0=1;

ET0=1;

EA=1;

}

voidled()

{

if(sign)

{

P2=0xdb;

P3=0x1b;

}

else

{uinti;

if(num<=7)

{if(num<=5){P2=0x9e;P3=0x1f;show(7-num);}

else{

for(i=0;i<5;i++){P3=0x1f;P2=zhuhuangdeng[i];delay(100000);delay(100000);}

show(7-num);}}

elseif(num>7&&num<=15)

{if(num<=12){P2=0xf3;P3=0x32;show(15-num);}else{

for(i=0;i<5;i++){P2=cihuangdeng1[i];delay(100000);delay(100000);P3=cihuangdeng2[i];

delay(100000);delay(100000);}

show(15-num);}}

}

}

voidT0_timer()interrupt1

{

TH0=0xd8;

TL0=0xf0;

if(!

P0_5)

delay

(1);

if(!

P0_5)

{

delay

(1);

while(!

P0_5);

sign=~sign;

}

if(num>=15)

num=0;

if(k<=100)

{

k++;

}

else

{

k=0;

num++;

}

}

voidmain()

{

dingshi();

while

(1)

{

led();

}

}

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

遇到的问题:

1.如何设计主、次干道二极管的亮灭,并使计数在数码管显示?

2.如何通过按键功能,当按下该键时,所有路口变成红灯,再按下时,解除此状态?

解决的方法:

1.通过对不同发光二极管端口赋值,使其对应路口亮灭,借助子函数,使数码管的倒计时数字按定时器依次显示。

2.借助按键扫描,通过判断状态标志sign,改变四个路口的二极管亮灭情况。

 

指导老师签字:

日期:

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

当前位置:首页 > 人文社科 > 哲学历史

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

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