单片机.docx

上传人:b****8 文档编号:28607447 上传时间:2023-07-19 格式:DOCX 页数:18 大小:107.32KB
下载 相关 举报
单片机.docx_第1页
第1页 / 共18页
单片机.docx_第2页
第2页 / 共18页
单片机.docx_第3页
第3页 / 共18页
单片机.docx_第4页
第4页 / 共18页
单片机.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机.docx

《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(18页珍藏版)》请在冰豆网上搜索。

单片机.docx

单片机

实验四

一、实验题目:

当K1键按下后,首先使蜂鸣器响一声,然后使LED1-

LED8完成3种闪亮的花样(自己定义),每一种花样循环

3次,然后周而复始。

二、keil代码:

/*当K1键按下后,首先使蜂鸣器响一声,

然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。

*/

#include

sbitP2_0=P2^0;//接蜂鸣器

sbitP2_7=P2^7;

sbitP1_0=P1^0;

sbitP1_1=P1^1;

sbitP1_2=P1^2;

sbitP1_3=P1^3;

sbitP1_4=P1^4;

sbitP1_5=P1^5;

sbitP1_6=P1^6;

sbitP1_7=P1^7;

 

voidDELAY(inttime)//延时

{

while(time--)

{}

}

voidBUZ_ON()

{

if(P2_7==0)

{

P2_0=1;

}

else

{P2_0=0;

}

}

voidF1(void)

{

inti;

chardata_group_mide[5]={0x00,0x18,0x24,0x42,0x81};//向两边延伸

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

{

P1=data_group_mide[i];

DELAY(20000);

}

P1=0x00;

}

voidF2(void)

{

inti;

chardata_group_left[8]={0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00};//向左延伸

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

{

P1=data_group_left[i];

DELAY(20000);

}

P1=0x00;

}

voidF3(void)

{

inti;

chardate_group_right[8]={0x00,0x01,0x03,0x07,0x0f,0x3f,0x7f,0xff};//向右延伸

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

{

P1=date_group_right[i];

DELAY(20000);

}

P1=0x00;

}

voidmain()

{

unsignedinti;//每种花样循环三次

P2_0=0;

P2_7=1;

BUZ_ON();

P1=0x00;

while(P2_7==0)

{

for(i=0;i<3;i++)//花样1

{F1();}

for(i=0;i<3;i++)//花样2

{F2();}

for(i=0;i<3;i++)//花样3

{F3();}

}

}

三、protues电路图:

四、实验截图:

5、实验小结:

通过本次实验,我们熟悉了protues的编译环境,对以后的单片机学习有很大帮助。

实验五

1、实验题目:

程序启动后4位LED显示器滚动显示“-”,每按下1次K1键后,首先使蜂鸣器响一声。

然后,依次使LED滚动显示CNT的计数值(0-9)。

2、Keil代码:

/*程序启动后4位LED显示器滚动显示“-”,每按下才1次K1键后,首先使蜂鸣器响一声。

然后,依次使LED滚动显示CNT的计数值(0-9)。

1、按键K1采用中断来管理。

(INT0采用边沿触发)

2、中断服务程序完成四个功能:

1)消除按键K1抖动。

2)CNT计数。

3)查表将计数值转换成LED显示器的段代码。

4)将段代码分别放入4个显示缓冲单元。

*/

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitP2_7=P2^7;

sbitP3_3=P3^3;

ucharCORDING[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,};//0,1,2,3,4....9,0,1,2的段码

intdelayms(uintt)

{

uintn;

while(--t)

{

n=200;

while(--n);

};

return0;

}

 

intmain()

{uintCNT=0;

P2_7=0;

P3_3=1;

P1=0xF7;

while

(1)

{

if(P3_3==0)

{uinti;

CNT++;

P2_7=1;

delayms(100);

for(i=1;i<5;i++)

//4位

{P1=CORDING[CNT-1];

switch(i)

{

case1:

P2=0x01;break;//点亮第1位

case2:

P2=0x02;break;//点亮第2位

case3:

P2=0x04;break;//点亮第3位

case4:

P2=0x08;break;//点亮第4位

}

delayms(100);

P2=0x00;//熄灭

}

if(CNT>10)

{

CNT=CNT-10;

}

}

P2_7=0;

}

return0;

}

 

3、protues电路图:

4、实验截图:

5、实验总结:

通过本次实验,我们熟悉了CNT计数,学会了如何使LED灯上显示0-9数字。

实验六

1、实验题目:

两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,重新计数。

二、keil代码:

/*两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,

重新计数。

按键K1,K2采用中断来管理。

(INT0采用边沿触发)*/

#defineucharunsignedchar

#defineuintunsignedint

#include

ucharCNT=0;

ucharm=0;

sbitP3_7=P3^7;

sbitP3_2=P3^2;

sbitP0_0=P0^0;

ucharCORDING[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0,1,2,3,4....9的段码

voidDelay(uinta)

{while(--a){};

}

voidintproc()interrupt0

{

TR0=0;

}

voidTime0()interrupt1

{

m++;//中断一次,m加1

if(m==20)

{m=0;//中断次数清零

CNT++;//秒加1

if(CNT==60)

{CNT=0;}

P1=CORDING[CNT/10];//显示十位

Delay(10);

P2=CORDING[CNT%10];//显示个位

Delay(10);

}

}

 

voidinit()

{

TMOD=0x01;//使用定时器T0使用方式1

TH0=0x3c;

TL0=0xb0;//50ms中断一次

ET0=1;

TR0=1;

EX0=1;

IT0=1;

EA=1;

}

 

voidmain()

{

P1=0x3f;

P2=0x3f;

P3_7=1;

while

(1)

{

if(P3_7==0)//控制是否开启

{

init();

}

}

}

3、protues电路图:

四、实验截图:

5、实验总结:

本次实验,我们用到了中断,按键K1,K2采用中断来管理。

(INT0采用边沿触发),通过本次实验加强了中断的学习,更加有利于单片机的学习。

 

 

实验七

一、实验题目:

晶振12MHz,波特率1200,程序启动后单片机主动发出HelloServer,PC使用串口助手应答单片机,单片机收到数据后,不做任何修改返回PC。

二、keil代码:

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]="HELLOSERVER!

";

uintflag=0;

uchara,b;

voidinit()

{

TMOD=0x20;

TH1=0xFD;

TL1=0XFD;

SCON=0X50;

TR1=1;

EA=1;

ES=1;

}

voidSendByte(ucharch)

{

SBUF=ch;

while(!

TI);

TI=0;

}

voidSendString(ucharcode*str)

{

while(*str)

SendByte(*str++);

}

voidmain()

{

init();

SendString("HELLOSERVER!

");

while

(1)

{

if(flag==1)

{

ES=0;

SBUF=a;

while(!

TI);

TI=0;

ES=1;

flag=0;

}

}

}

voidser()interrupt4

{

if(RI==1)

{

RI=0;

a=SBUF;

flag=1;

}

}

三、protues电路图:

四、实验截图:

6、实验总结:

本次实验,我们利用了中断来实现,通过本次实验我们对中断有了更加深刻的了解,让我们在以后的为以后的学习之中打下了一定的基础。

 

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

当前位置:首页 > 经管营销 > 经济市场

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

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