第7组单片机实验总结Word文件下载.docx

上传人:b****8 文档编号:22466146 上传时间:2023-02-04 格式:DOCX 页数:83 大小:353.37KB
下载 相关 举报
第7组单片机实验总结Word文件下载.docx_第1页
第1页 / 共83页
第7组单片机实验总结Word文件下载.docx_第2页
第2页 / 共83页
第7组单片机实验总结Word文件下载.docx_第3页
第3页 / 共83页
第7组单片机实验总结Word文件下载.docx_第4页
第4页 / 共83页
第7组单片机实验总结Word文件下载.docx_第5页
第5页 / 共83页
点击查看更多>>
下载资源
资源描述

第7组单片机实验总结Word文件下载.docx

《第7组单片机实验总结Word文件下载.docx》由会员分享,可在线阅读,更多相关《第7组单片机实验总结Word文件下载.docx(83页珍藏版)》请在冰豆网上搜索。

第7组单片机实验总结Word文件下载.docx

voiddelayms(uintxms)

uinti,j;

for(i=xms;

i>

0;

i--)

for(j=110;

j>

j--);

②8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

//2

intrins.h>

uintaa;

sbitbeep=P1^5;

P2=0xff;

aa=0xfe;

beep=1;

P2=aa;

beep=0;

delayms(500);

P2=0xff;

beep=1;

aa=_crol_(aa,1);

③8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。

//3

uintaa,i;

sbitbeep=P2^3;

P1=0xff;

delayms(500);

for(i=0;

i<

8;

i++)

{

P1=aa;

beep=1;

delayms(100);

beep=0;

aa=_crol_(aa,1);

if(aa==0xfe)break;

}

aa=0x7f;

aa=_cror_(aa,1);

④用8个发光管演示出8位二进制数累加过程,结合两个开关(一加一减)实现加减运算。

//4

#defineucharunsignedchar

sbits0=P2^0;

sbits1=P2^1;

uchara;

voiddelayms(uintz)

inti,j;

for(i=z;

for(j=110;

a=0;

if(s0==0)

while(a!

=256)

a++;

P1=~a;

a=0xff;

if(s1==0)

=0)

a--;

⑤8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。

重复此过程。

//5

uinta,i,j;

a=0xfe;

for(j=0;

j<

2;

j++)

for(i=0;

{

P1=a;

a=_crol_(a,1);

delayms(200);

}

a=0x7f;

7;

a=_cror_(a,1);

P1=0xff;

5;

P1=0x00;

delayms(300);

P1=0xff;

}

⑥间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

//6

uinti,a;

for(i=0;

P1=a;

a=_crol_(a,1);

delayms(500);

a=0xfc;

4;

a=_crol_(a,2);

a=0xf8;

3;

a=_crol_(a,3);

a=0xf0;

a=_crol_(a,4);

a=0xe0;

a=_crol_(a,5);

a=0xc0;

a=_crol_(a,6);

a=0x80;

a=_crol_(a,7);

a=0x00;

⑦间隔300ms先奇数亮再偶数亮,循环三次;

一个灯上下循环三次;

两个分别从两边往中间流动三次;

再从中间往两边流动三次;

8个全部闪烁3次;

关闭发光管,程序停止。

//7

P1=0xaa;

//01010101

delayms(1000);

P1=0x55;

//10101010

a=0xfe;

for(j=0;

delayms(500);

{

P1=0x7e;

P1=0xbd;

P1=0xdb;

P1=0xe7;

while

(1)

{

心得体验:

本实验主要学习使用单片机的I/O口控制发光二极管的亮灭,同时要熟悉延时子函数的调用,熟练进行移位操作,比如左移<

<

右移>

>

等指令。

应该注意的是:

单片机上电时,没有人为地控制I/O口的状态,所有未控制的I/O口都默认为高电频。

刚开始学习单片机这门课程,因为学过C语言,所以还是稍微能上手的。

学习实验三,从中掌握了I/O口的工作原理和它的数据输出方式,通过P1口观察程序的运行。

而且掌握了二个新软件proteuisis和keil,可以进行仿真实验,也和单片机实物结合理论联系实际,提高动手能力,从而全面掌握单片机的应用。

而在实验三中,首先要理解题目要求,相应地去编程,要有自己的思路,先把大概的脉络写出来,还要不断地去调试,最终才可以满足题目要求,在仿真和实物单片机都能实现需要的现象。

7.实验四LED数码管控制实验

1.单片机AT89C51读入4位开关的输入状态(0~F),并将其输出到数码管显示。

//数码管共阳,按键共阴

(1)

stdio.h>

sbitk1=P2^0;

sbitk2=P2^1;

sbitk3=P2^2;

sbitk4=P2^3;

uinta,b,c,d,m;

ucharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

a=k1;

b=k2;

c=k3;

d=k4;

m=(8*!

d+4*!

c+2*!

b+1*!

a);

P0=table[m];

//P0

2、数码管动态显示。

//数码管共阴

(2)

uinti;

//1//2//3//4//5//6

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

ucharcodewela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};

while

(1)

6;

P2=wela[i];

//P1

P0=dula[i];

P0=0xff;

//消影

本实验主要是熟练掌握I/O口对数码管显示的控制,在编写程序时,应先确定选用的数码管是共阴还是共阳数码管,不同的数码管使用不同的编码。

数码管的动态显示中,一般都要上一句P0=0xff,即是消影。

如果不进行消影,就会出现显示混乱的现象。

学习了P1口和P2口的使用方法,要把P0口、P1口和P2口在keil中调出来调试观察0和1数值(高低电平)变化,由于买的单片机是内部接线固定好,只能通过修改程序和仿真图去满足实验要求,比其他同学所做的工作更多,也更复杂,不过我觉得这样可以让我更深入地去了解了单片机的结构。

8.实验五广告流水灯中断控制

1、利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。

sbitled=P1^0;

uintnum;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

if(num==20)

num=0;

led=~led;

voidT0_time()interrupt1

num++;

2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。

//2单数码管共阳

Ucharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};

uinta,num,i;

TMOD=0x10;

//T1

TH1=(65536-10000)/256;

//10ms

TL1=(65536-10000)%256;

ET1=1;

TR1=1;

num=0;

i=0;

a=0xfe;

if(num==7)

P1=a;

i++;

if(num==10)

if(i==10)

i=0;

//P1=0xff;

voidT1_time()interrupt3

3、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复(电路自己设计)。

//3共阴

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

uintnum,i,j;

P2=wela[j];

//0选中位选

P3=dula[i];

//段选

if(i==16)

{

i=0;

j++;

if(j==6)j=0;

}

//45872

选做:

INT0、INT1同时存在,P1为输出口,INT1优先级高于INT0,均为电平触发。

要求:

主程序8个发光二极管左、右移动2轮,再闪烁2次,INT0的中断服务程序控制P1口的8个发光二极管闪烁5次,INT1的中断服务程序控制P1口的8个发光二极管左、右移动3轮(所有计数通过数码管显示),信号灯优先级控制程序流程图如图8-5所示。

//选做单数码管共阳

ucharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};

//1~9

uinta,b,num0,num1,i,j;

sbitN0=P3^2;

sbitN1=P3^3;

TMOD=0xdd;

TCON=0x00;

PX1=1;

//外部中断1为高优先

PX0=0;

//0为低

//全局允许中断

EX1=1;

//开外部中断1

EX0=1;

//开外部中断0

num0=0;

num1=0;

b=0xff;

j++)//移动2轮

i++)//左

i++)//右

j=0;

j++)//闪2次

P1=~b;

delayms(200);

P1=b;

}

voidexter0()interrupt0

P1=~b;

P0=dula[num0];

P1=b;

num0++;

if(num0==5)

while

(1)

P1=b;

voidexter1()interrupt2

a=_cror_(a,1);

P0=dula[num1];

num1++;

if(num1==3)

实验五心得:

由于水平有限,在实验五花了好长时间,先要了解了定时器/计数器工作方式,而且要搞清楚题目的中断延时要求,既要设计实验仿真电路,又要编程去实现要求。

在实验中学习到了外部中断基本使用方法和中断优先级,学习了中断程序的编写程序方法。

而在选做实验中断嵌套中进一步地利用了中断优先级去控制程

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

当前位置:首页 > 解决方案 > 学习计划

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

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