单片机实验一二三Word文档下载推荐.docx
- 文档编号:7592198
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:34
- 大小:184.25KB
单片机实验一二三Word文档下载推荐.docx
《单片机实验一二三Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机实验一二三Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。
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;
9;
{
SPKOUT=1;
LED1=0;
delay(50);
SPKOUT=0;
LED2=0;
LED3=0;
LED4=0;
LED5=0;
LED6=0;
LED7=0;
LED8=0;
P1=0xff;
}
voidinit(void)
PCA0MD=0x00;
//关闭WDT控制
OSCICN=0xc7;
//设置内部振荡器工作(使用内部晶振24.5MHz)
P0MDIN=0xFF;
P0MDOUT=0x11;
P0SKIP=0xCF;
P1MDIN=0xFF;
P1MDOUT=0x00;
P1SKIP=0xFF;
P2MDIN=0xFF;
P2MDOUT=0x04;
P2SKIP=0xFF;
#else
P0MDOUT=0x10;
XBR0=0x01;
XBR1=0x41;
结果截图
实验二单片机内部接口实验
深入理解C8051F411单片机内部的定时器/计数器和串行接口的工作原理;
熟悉单片机通过RS232与PC机进行通信的过程;
了解单片机的接口调试方法。
5、母对母交叉串口线1根
1、课前阅读《C8051F411数据手册》,重点了解系统中断、UART等方面的内容
2、编写串口通信程序,实现将PC机发送过来的字符再回送给PC机。
利用串口监视器软件(实验附件中提供)监视此过程。
1、如何在PC端通过串口下达指令,点亮某一LED,控制蜂鸣器响或不响?
#include<
stdlib.h>
../inc/config.h"
../uart/uart.h"
unsignedcharxdataRdBuf[100];
sbitSPKOUT=P0^0
#else
//板级配置
//sbitSCOMEN=P2^3;
#endif
//配置初始化
//关闭WDT控制
//设置内部振荡器工作(使用内部晶振24.5MHz)
//端口0INPUTMODE寄存器设置初值
//端口0OUTPUTMODE寄存器设置初值
//端口0SKIP寄存器设置初值
//端口1INPUTMODE寄存器设置初值
//端口1OUTPUTMODE寄存器设置初值
//端口1SKIP寄存器设置初值
//端口2INPUTMODE寄存器设置初值
//端口2OUTPUTMODE寄存器设置初值
P2SKIP=0xFF;
//端口2SKIP寄存器设置初值
P0MDIN=0xF0;
//端口2SKIP寄存器设置初值
//端口I/O交叉开关寄存器0设置初值
//端口I/O交叉开关寄存器1设置初值
TMOD=0x21;
TCON=0x05;
TH0=TIMER0CNT/256;
TL0=TIMER0CNT;
TR0=1;
IP=0x00;
ET0=1;
//串口初始化
PCON=0x00;
SCON0=0x50;
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();
RdBuf[99]=0;
for(;
;
)
if(len=ReadBytes(RdBuf))
{
RdBuf[99]=1;
if(KEY1==0)
while(--delayNum);
if(KEY1==0)
SPKOUT=!
结果截图:
实验三单片机实现电子音乐
利用现有资源做一个单片机的八音盒,五个按键切换五首歌曲,并且八个led灯可以随着曲调闪烁。
#include"
#defineOLD_BOARD//如果使用旧电路板,必须定义此语句!
!
#ifdefOLD_BOARD
sbitSPKOUT=P0^0;
sbitSPKOUT=P2^2;
#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;
case3:
LED3=~LED3;
case4:
LED4=~LED4;
case5:
LED5=~LED5;
case6:
LED6=~LED6;
case7:
LED7=~LED7;
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++;
//低音
`'
gaodi=12;
//高音
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;
-'
//有一个音节加长
yinchang+=4;
_'
//有一个音节缩短
yinchang/=2;
.'
//有一个加半拍
yinchang=yinchang+yinchang/2;
}
*(diao+i1)=j;
//记录音符
*(jie+i1)=yinchang;
//记录音长
i1++;
/******************************奏乐函数***************************************/
要演奏的音乐符号串
voidplay(uchar*songdata)
uchari,c,j=0;
uintn;
uchardiaodata[48];
//音调缓冲
ucharjiedata[48];
//音长缓冲
changedata(songdata,diaodata,jiedata);
//解释音乐符号串
while
(1)/////////////////////////////////////////////P0=0xff
for(i=0;
diaodata[i]!
=0;
i++)//逐个符号演奏
//LED1=~LED1;
//LED4=~LED4;
if(diaodata[i]==12){
}
if(diaodata[i]==14){
if(diaodata[i]==16){
if(diaodata[i]==17){
if(diaodata[i]==19){
if(diaodata[i]==21){
}
if(diaodata[i]==23){
tl0_f=freq[diaodata[i]*2];
//取出对应的定时值送给T0
th0_f=freq[diaodata[i]*2+1];
for(c=0;
c<
jiedata[i];
c++)//按照音长延时
for(n=0;
n<
50500;
n++);
//29500
//if(P1!
=0xff)//(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 一二