单片机实验一二三.docx

上传人:b****4 文档编号:5543026 上传时间:2023-05-08 格式:DOCX 页数:34 大小:184.25KB
下载 相关 举报
单片机实验一二三.docx_第1页
第1页 / 共34页
单片机实验一二三.docx_第2页
第2页 / 共34页
单片机实验一二三.docx_第3页
第3页 / 共34页
单片机实验一二三.docx_第4页
第4页 / 共34页
单片机实验一二三.docx_第5页
第5页 / 共34页
单片机实验一二三.docx_第6页
第6页 / 共34页
单片机实验一二三.docx_第7页
第7页 / 共34页
单片机实验一二三.docx_第8页
第8页 / 共34页
单片机实验一二三.docx_第9页
第9页 / 共34页
单片机实验一二三.docx_第10页
第10页 / 共34页
单片机实验一二三.docx_第11页
第11页 / 共34页
单片机实验一二三.docx_第12页
第12页 / 共34页
单片机实验一二三.docx_第13页
第13页 / 共34页
单片机实验一二三.docx_第14页
第14页 / 共34页
单片机实验一二三.docx_第15页
第15页 / 共34页
单片机实验一二三.docx_第16页
第16页 / 共34页
单片机实验一二三.docx_第17页
第17页 / 共34页
单片机实验一二三.docx_第18页
第18页 / 共34页
单片机实验一二三.docx_第19页
第19页 / 共34页
单片机实验一二三.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机实验一二三.docx

《单片机实验一二三.docx》由会员分享,可在线阅读,更多相关《单片机实验一二三.docx(34页珍藏版)》请在冰点文库上搜索。

单片机实验一二三.docx

单片机实验一二三

=实验一简单程序设计实验

一、实验目的

掌握单片机程序设计的基本方法,熟悉程序交叉编译和调试执行的过程。

二、实验器材

1、PC机(安装Keil软件)1台

2、实验开发板1块

3、U-EC5型仿真器1只

4、直流稳压电源1台

三、实验要求

1、课前温习和回顾C语言程序设计方面的知识。

2、搭建集成开发环境(参考所给实验附件中《Keil软件与仿真驱动程序安装.doc》)。

3、编写简单的C程序,熟悉Keil环境下的调试方法,包括跟踪、单步运行和断点设置等。

4、仔细观察实验板电路图,并结合《C8051F411数据手册》给出自己I/O端口配置方案。

5、编写程序,实现LED的亮灭、蜂鸣器的鸣叫以及按键状态识别等控制功能。

四、扩充实验(思考题)

1、如何实现蜂鸣器的间歇鸣叫(1秒)?

2、如何实现依次点亮LED的控制功能?

 

实验代码:

#include"c8051F410.h"

#defineOLD_BOARD

#ifdefOLD_BOARD

sbitLED8=P1^7;

sbitLED7=P1^6;

sbitLED6=P1^5;

sbitLED5=P1^4;

sbitLED4=P1^3;

sbitLED3=P1^2;

sbitLED2=P1^1;

sbitLED1=P1^0;

sbitKEY5=P2^2;

sbitKEY4=P2^1;

sbitKEY3=P2^0;

sbitKEY2=P0^2;

sbitKEY1=P0^1;

sbitSPKOUT=P0^0;

#else

sbitLED8=P2^1;

sbitLED7=P2^0;

sbitLED6=P0^7;

sbitLED5=P0^6;

sbitLED4=P0^3;

sbitLED3=P0^2;

sbitLED2=P0^1;

sbitLED1=P0^0;

sbitKEY5=P1^7;

sbitKEY4=P1^6;

sbitKEY3=P1^5;

sbitKEY2=P1^4;

sbitKEY1=P1^3;

sbitSPKOUT=P2^2;

#endif

voiddelay(intm){

inti,j;

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

for(j=0;j<250*m;j++);

}

voidinit(void);//初始化子程序

voidmain()

{

unsignedchari;

init();//初始化子程序

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

LED8=1;

SPKOUT=0;

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

{

SPKOUT=1;

LED1=0;

delay(50);

SPKOUT=0;

LED2=0;

delay(50);

SPKOUT=1;

LED3=0;

delay(50);

SPKOUT=0;

LED4=0;

delay(50);

SPKOUT=1;

LED5=0;

delay(50);

SPKOUT=0;

LED6=0;

delay(50);

SPKOUT=1;

LED7=0;

delay(50);

SPKOUT=0;

LED8=0;

delay(50);

P1=0xff;

delay(50);

}

}

voidinit(void)

{

PCA0MD=0x00;//关闭WDT控制

OSCICN=0xc7;//设置内部振荡器工作(使用内部晶振24.5MHz)

#ifdefOLD_BOARD

P0MDIN=0xFF;

P0MDOUT=0x11;

P0SKIP=0xCF;

P1MDIN=0xFF;

P1MDOUT=0x00;

P1SKIP=0xFF;

P2MDIN=0xFF;

P2MDOUT=0x04;

P2SKIP=0xFF;

#else

P0MDIN=0xFF;

P0MDOUT=0x10;

P0SKIP=0xCF;

P1MDIN=0xFF;

P1MDOUT=0x00;

P1SKIP=0xFF;

P2MDIN=0xFF;

P2MDOUT=0x04;

P2SKIP=0xFF;

#endif

XBR0=0x01;

XBR1=0x41;

}

结果截图

实验二单片机内部接口实验

一、实验目的

深入理解C8051F411单片机内部的定时器/计数器和串行接口的工作原理;熟悉单片机通过RS232与PC机进行通信的过程;了解单片机的接口调试方法。

二、实验器材

1、PC机(安装Keil软件)1台

2、实验开发板1块

3、U-EC5型仿真器1只

4、直流稳压电源1台

5、母对母交叉串口线1根

三、实验要求

1、课前阅读《C8051F411数据手册》,重点了解系统中断、UART等方面的内容

2、编写串口通信程序,实现将PC机发送过来的字符再回送给PC机。

利用串口监视器软件(实验附件中提供)监视此过程。

四、扩充实验(思考题)

1、如何在PC端通过串口下达指令,点亮某一LED,控制蜂鸣器响或不响?

实验代码:

#include

#include"../inc/config.h"

#include"../uart/uart.h"

unsignedcharxdataRdBuf[100];

#defineOLD_BOARD

#ifdefOLD_BOARD

sbitLED8=P1^7;

sbitLED7=P1^6;

sbitLED6=P1^5;

sbitLED5=P1^4;

sbitLED4=P1^3;

sbitLED3=P1^2;

sbitLED2=P1^1;

sbitLED1=P1^0;

sbitKEY5=P2^2;

sbitKEY4=P2^1;

sbitKEY3=P2^0;

sbitKEY2=P0^2;

sbitKEY1=P0^1;

sbitSPKOUT=P0^0

#else

//板级配置

//sbitSCOMEN=P2^3;

sbitLED8=P2^1;

sbitLED7=P2^0;

sbitLED6=P0^7;

sbitLED5=P0^6;

sbitLED4=P0^3;

sbitLED3=P0^2;

sbitLED2=P0^1;

sbitLED1=P0^0;

sbitKEY5=P1^7;

sbitKEY4=P1^6;

sbitKEY3=P1^5;

sbitKEY2=P1^4;

sbitKEY1=P1^3;

sbitSPKOUT=P2^2;

#endif

//配置初始化

voidinit(void)

{

PCA0MD=0x00;//关闭WDT控制

OSCICN=0xc7;//设置内部振荡器工作(使用内部晶振24.5MHz)

#ifdefOLD_BOARD

P0MDIN=0xFF;//端口0INPUTMODE寄存器设置初值

P0MDOUT=0x11;//端口0OUTPUTMODE寄存器设置初值

P0SKIP=0xCF;//端口0SKIP寄存器设置初值

P1MDIN=0xFF;//端口1INPUTMODE寄存器设置初值

P1MDOUT=0x00;//端口1OUTPUTMODE寄存器设置初值

P1SKIP=0xFF;//端口1SKIP寄存器设置初值

P2MDIN=0xFF;//端口2INPUTMODE寄存器设置初值

P2MDOUT=0x04;//端口2OUTPUTMODE寄存器设置初值

P2SKIP=0xFF;//端口2SKIP寄存器设置初值

#else

P0MDIN=0xF0;//端口0INPUTMODE寄存器设置初值

P0MDOUT=0x10;//端口0OUTPUTMODE寄存器设置初值

P0SKIP=0xCF;//端口0SKIP寄存器设置初值

P1MDIN=0xFF;//端口1INPUTMODE寄存器设置初值

P1MDOUT=0x00;//端口1OUTPUTMODE寄存器设置初值

P1SKIP=0xFF;//端口1SKIP寄存器设置初值

P2MDIN=0xFF;//端口2INPUTMODE寄存器设置初值

P2MDOUT=0x04;//端口2OUTPUTMODE寄存器设置初值

P2SKIP=0xFF;//端口2SKIP寄存器设置初值

#endif

XBR0=0x01;//端口I/O交叉开关寄存器0设置初值

XBR1=0x41;//端口I/O交叉开关寄存器1设置初值

TMOD=0x21;

TCON=0x05;

TH0=TIMER0CNT/256;

TL0=TIMER0CNT;

TR0=1;

IP=0x00;

ET0=1;

//串口初始化

PCON=0x00;

SCON0=0x50;

TMOD=0x21;

TH1=TL1=TIME1CNT;

TR1=1;

ES0=1;

//SCOMEN=0;

EA=1;

}

voidTime0_ISR(void)interruptINTERRUPT_TIMER0

{

staticintCounter=0;

Counter++;

if(Counter>999)

{

Counter=0;

if(RdBuf[99]==1)

{SPKOUT=!

SPKOUT;

LED5=0;

LED2=0;

LED1=0;

SendBytes("内蒙古工业大学欢迎你!

\r\n",24);

RdBuf[99]=0;

}

}

TH0=TIMER0CNT/256;

TL0=TIMER0CNT;

TR0=1;

}

voidmain(void)

{

intlen=0;

intdelayNum=240000;

init();

SPKOUT=0;

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

LED8=1;

RdBuf[99]=0;

for(;;)

{

if(len=ReadBytes(RdBuf))

{

RdBuf[99]=1;

}

if(KEY1==0)

{

while(--delayNum);

if(KEY1==0)

SPKOUT=!

SPKOUT;

}

}

}

结果截图:

实验三单片机实现电子音乐

一、实验目的

深入理解C8051F411单片机内部的定时器/计数器和串行接口的工作原理;熟悉单片机通过RS232与PC机进行通信的过程;了解单片机的接口调试方法。

二、实验器材

1、PC机(安装Keil软件)1台

2、实验开发板1块

3、U-EC5型仿真器1只

4、直流稳压电源1台

5、母对母交叉串口线1根

三、实验要求

利用现有资源做一个单片机的八音盒,五个按键切换五首歌曲,并且八个led灯可以随着曲调闪烁。

实验代码:

#include"c8051F410.h"

#defineOLD_BOARD//如果使用旧电路板,必须定义此语句!

#ifdefOLD_BOARD

sbitLED8=P1^7;

sbitLED7=P1^6;

sbitLED6=P1^5;

sbitLED5=P1^4;

sbitLED4=P1^3;

sbitLED3=P1^2;

sbitLED2=P1^1;

sbitLED1=P1^0;

 

sbitKEY5=P2^2;

sbitKEY4=P2^1;

sbitKEY3=P2^0;

sbitKEY2=P0^2;

sbitKEY1=P0^1;

sbitSPKOUT=P0^0;

#else

sbitSPKOUT=P2^2;

#endif

 

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

//sbitSPKOUT=P2^0;//接蜂鸣器管脚

ucharth0_f;

uchartl0_f;

//ucharfuhao[];

ucharcodejie8[8]={12,14,16,17,19,21,23,24};

/**************************中断函数*******************************************/

timer0()interrupt1

{

TL0=tl0_f;TH0=th0_f;

SPKOUT=~SPKOUT;//取反音乐输出IO

/*

LED8=~LED8;

LED7=~LED7;

LED6=~LED6;

LED5=~LED5;

LED4=~LED4;

LED3=~LED3;

LED2=~LED2;

LED1=~LED1;

*/

//P1=~P1;

//LED1=~LED1;

/*

switch(fuhao){

case1:

LED1=~LED1;

break;//7

case2:

LED2=~LED2;

break;//7

case3:

LED3=~LED3;

break;//7

case4:

LED4=~LED4;

break;//7

case5:

LED5=~LED5;

break;//7

case6:

LED6=~LED6;

break;//7

case7:

LED7=~LED7;

break;//7

default:

break;

}

*/

 

}

/********************T0的值,及输出频率对照表***********************************/

ucharcodefreq[36*2]={

0xA9,0xEF,//00220HZ,1//0

0x93,0xF0,//00233HZ,1#

0x73,0xF1,//00247HZ,2

0x49,0xF2,//00262HZ,2#

0x07,0xF3,//00277HZ,3

0xC8,0xF3,//00294HZ,4

0x73,0xF4,//00311HZ,4#

0x1E,0xF5,//00330HZ,5

0xB6,0xF5,//00349HZ,5#

0x4C,0xF6,//00370HZ,6

0xD7,0xF6,//00392HZ,6#

0x5A,0xF7,//00415HZ,7

0xD8,0xF7,//00440HZ1//12

0x4D,0xF8,//00466HZ1#//13

0xBD,0xF8,//00494HZ2//14

0x24,0xF9,//00523HZ2#//15

0x87,0xF9,//00554HZ3//16

0xE4,0xF9,//00587HZ4//17

0x3D,0xFA,//00622HZ4#//18

0x90,0xFA,//00659HZ5//19

0xDE,0xFA,//00698HZ5#//20

0x29,0xFB,//00740HZ6//21

0x6F,0xFB,//00784HZ6#//22

0xB1,0xFB,//00831HZ7//23

0xEF,0xFB,//00880HZ`1

0x2A,0xFC,//00932HZ`1#

0x62,0xFC,//00988HZ`2

0x95,0xFC,//01046HZ`2#

0xC7,0xFC,//01109HZ`3

0xF6,0xFC,//01175HZ`4

0x22,0xFD,//01244HZ`4#

0x4B,0xFD,//01318HZ`5

0x73,0xFD,//01397HZ`5#

0x98,0xFD,//01480HZ`6

0xBB,0xFD,//01568HZ`6#

0xDC,0xFD,//01661HZ`7//35

};

/***************************音乐符号串解释函数****************************/

//入口:

要解释的音乐符号串,输出的音调串,输出的时长串

changedata(uchar*song,uchar*diao,uchar*jie)

{

uchari,i1,j;

chargaodi;//高低+/-12音阶

ucharbanyin;//有没有半个升音阶

ucharyinchang;//音长

ucharcodejie7[8]={0,12,14,16,17,19,21,23};//C调的7个值

*diao=*song;

for(i=0,i1=0;;)

{

gaodi=0;//高低=0

banyin=0;//半音=0

yinchang=4;//音长1拍

if((*(song+i)=='|')||(*(song+i)==''))i++;//拍子间隔和一个空格过滤

switch(*(song+i))

{

case',':

gaodi=-12;i++;//低音

break;

case'`':

gaodi=12;i++;//高音

break;

}

if(*(song+i)==0)//遇到0结束

{

*(diao+i1)=0;//加入结束标志0

*(jie+i1)=0;

return;

}

//j=*(song+i);

//fuhao[i]=j;

j=*(song+i)-0x30;i++;//取出基准音

j=jie7[j]+gaodi;//加上高低音

yinc:

switch(*(song+i))

{

case'#':

//有半音j加一个音阶

i++;j++;

gotoyinc;

case'-':

//有一个音节加长

yinchang+=4;

i++;

gotoyinc;

case'_':

//有一个音节缩短

yinchang/=2;

i++;

gotoyinc;

case'.':

//有一个加半拍

yinchang=yinchang+yinchang/2;

i++;

gotoyinc;

}

*(diao+i1)=j;//记录音符

*(jie+i1)=yinchang;//记录音长

i1++;

}

}

/******************************奏乐函数***************************************/

//入口:

要演奏的音乐符号串

voidplay(uchar*songdata)

{

uchari,c,j=0;

uintn;

uchardiaodata[48];//音调缓冲

ucharjiedata[48];//音长缓冲

changedata(songdata,diaodata,jiedata);//解释音乐符号串

TR0=1;

while

(1)/////////////////////////////////////////////P0=0xff

{

for(i=0;diaodata[i]!

=0;i++)//逐个符号演奏

{

//LED1=~LED1;

//LED4=~LED4;

if(diaodata[i]==12){

LED1=~LED1;

}

if(diaodata[i]==14){

LED2=~LED2;

}

if(diaodata[i]==16){

LED3=~LED3;

}

if(diaodata[i]==17){

LED4=~LED4;

}

if(diaodata[i]==19){

LED5=~LED5;

}

if(diaodata[i]==21){

LED6=~LED6;

}

if(diaodata[i]==23){

LED7=~LED7;

}

tl0_f=freq[diaodata[i]*2];//取出对应的定时值送给T0

th0_f=freq[diaodata[i]*2+1];

for(c=0;c

{

for(n=0;n<50500;n++);//29500

//if(P1!

=0xff)//(

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2