东南大学 单片机实验 解答.docx
- 文档编号:7069788
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:21
- 大小:18.19KB
东南大学 单片机实验 解答.docx
《东南大学 单片机实验 解答.docx》由会员分享,可在线阅读,更多相关《东南大学 单片机实验 解答.docx(21页珍藏版)》请在冰豆网上搜索。
东南大学单片机实验解答
实验一
#include
sbitLed1=P1^0;
sbitLed2=P1^1;
voidDelay1s(void)
{
unsignedcharh,i,j,k;
for(h=10;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
voidmain()
{
while
(1)
{
Led1=1;
Led2=0;
Delay1s();
Led1=0;
Led2=1;
Delay1s();
}
}
实验二
#include
#include
sbitLed1=P1^0;
sbitLed2=P1^1;
unsignedcharflag,sdata;
voidLed1Invert(void)
{
if(Led1==0)
{
Led1=1;
}
else
{
Led1=0;
}
}
voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8位数据
PCON=0x00;//不进行2分频
TMOD=0x20;//定时器1设为模式2
TL1=0xfd;//设置波特率为19200=22118400/(32*12*(256-0xfd))
TH1=0xfd;//设置波特率
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
voidSen(unsignedcharch)
{
ES=0;
TI=0;
SBUF=ch;
while(!
TI){}//等待发送结束信号
TI=0;
ES=1;
}
voidSer_ISR()interrupt4//串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
voidmain()
{
unsignedchartemp,state;
InitSerial();
EA=1;//允许系统中断
Led1=0;//点亮Led1
temp=XBYTE[0x8000];//读输入状态
Sen(temp);//将状态号码通过串口发送
while
(1)
{
if(flag)
{
Led1Flush();
Sen(sdata+1);//将收到的数据加一后回送
flag=0;
}
state=XBYTE[0x8000];//访问按键状态
if(state!
=temp)//按键和拨码状态改变
{
temp=state;
Sen(temp);
}
}
}
实验三
#include
#include
sbitSCK=P1^7;
sbitRCK=P1^6;
sbitSER=P1^5;
unsignedcharnum[]={0x41,0xf9,0x83,0xa1,0x39,0x25,0x05,0xf1,0x01,0x21,0x11,0x0d,0x47,0x89,0x07,0x17,0xff};//先移低位
unsignedcharflag,sdata;
voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8位数据
PCON=0x00;//不进行2分频
TMOD=0x20;//定时器1设为模式2,
TL1=0xfa;//设置波特率为960019200=22118400/(32*12*(256-0xfd))
TH1=0xfa;
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
voidSer_ISR()interrupt4//串口中断服务程序//串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
voiddelay()//延时0.5秒
{
inti,j;
for(i=0;i<500;i++)
for(j=0;j<230;j++);
}
voidmove_in(unsignedchara)
{
unsignedchari;
for(i=0;i<8;i++)
{
SCK=0;
SER=(num[a]>>i)&(0x01);
SCK=1;
}
}
voidmain()
{
unsignedcharstate,i,j;
InitSerial();//初始化串口
EA=1;//允许系统中断
while
(1)
{
state=XBYTE[0x8000];
if(state==0xff)//显示第一种模式
{
for(i=0;i<16;i++)
{
for(j=0;j<4;j++)move_in(i);
RCK=0;
RCK=1;
delay();
}
}
else
{
if(flag)
{
for(i=0;i<4;i++)move_in(16);//清除当前显示
RCK=0;
RCK=1;
move_in(sdata&(0x0f));
move_in((sdata>>4)&(0x0f));
RCK=0;
RCK=1;
flag=1;
}
}
}
}
实验四
#include
#include
sbitSCK=P1^7;
sbitRCK=P1^6;
sbitSER=P1^5;
sbitLed1=P1^0;
sbitLed2=P1^1;
unsignedcharnum[]={0x41,0xf9,0x83,0xa1,0x39,0x25,0x05,0xf1,0x01,0x21,0x11,0x0d,0x47,0x89,0x07,0x17,0xff};//先移低位
unsignedcharflag,sdata;
voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8位数据
PCON=0x00;//不进行2分频
TMOD=0x20;//定时器1设为模式2,
TL1=0xfa;//设置波特率为960019200=22118400/(32*12*(256-0xfd))
TH1=0xfa;
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
voidLed1Invert()
{
if(Led1==0)Led1=1;
elseLed1=0;
}
voidSer_ISR()interrupt4//串口中断服务程序//串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
voiddelay()//延时1秒
{
inti,j;
for(i=0;i<1000;i++)
for(j=0;j<230;j++);
}
voidmove_in(unsignedchara)
{
unsignedchari;
for(i=0;i<8;i++)
{
SCK=0;
SER=(num[a]>>i)&(0x01);
SCK=1;
}
}
voidmain()
{
unsignedinti,j;
unsignedcharstate,temp,addr=0;
InitSerial();//初始化串口
EA=1;//允许系统中断
for(i=0;i<32768;i++)XBYTE[i]=0;//初始化RAM
while
(1)
{
state=XBYTE[0x8000];
if(state==0xff)//显示第一种模式
{
Led2=1;
addr=0;
for(i=0;i<10;i++)
{
Led1Invert();
for(j=0;j<4;j++)move_in(16);//清除当前显示
RCK=0;
RCK=1;
temp=XBYTE[0x100+i];//从RAM中读数据并显示
move_in(temp&(0x0f));
move_in((temp>>4)&(0x0f));
RCK=0;
RCK=1;
delay();
}
}
else
{
Led2=0;
if(flag)
{
XBYTE[0x100+addr]=sdata;
addr=(addr+1)%10;
flag=0;
}
}
}
}
实验五
#include
#include
#defineucharunsignedchar
sbitSCK=P1^7;
sbitRCK=P1^6;
sbitSER=P1^5;
sbitLed1=P1^0;
sbitLed2=P1^1;
sbitscl=P1^3;
sbitsda=P1^4;
unsignedcharnum[]={0x41,0xf9,0x83,0xa1,0x39,0x25,0x05,0xf1,0x01,0x21,0x11,0x0d,0x47,0x89,0x07,0x17,0xff};//先移低位
unsignedcharflag,sdata;
/*voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8位数据
PCON=0x00;//不进行2分频
TMOD=0x20;//定时器1设为模式2,
TL1=0xfa;//设置波特率为960019200=22118400/(32*12*(256-0xfd))
TH1=0xfa;
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
voidLed1Invert()
{
if(Led1==0)Led1=1;
elseLed1=0;
}
voidSer_ISR()interrupt4//串口中断服务程序//串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
voiddelayqq()//延时1秒
{
inti,j;
for(i=0;i<1000;i++)
for(j=0;j<230;j++);
}
*/
voidmove_in(unsignedchara)
{
unsignedchari;
for(i=0;i<8;i++)
{
SCK=0;
SER=(num[a]>>i)&(0x01);
SCK=1;
}
}
///////////////////////////////////////////////
voiddelay()
{;;}
voidstart()//开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
voidstop()//停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
voidrespons()//应答
{
uchari;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
voidinit()
{
sda=1;
delay();
scl=1;
delay();
}
voidwrite_byte(uchardate)
{
uchari,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
ucharread_byte()
{
uchari,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
returnk;
}
voiddelay1(ucharx)
{
uchara,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
voidwrite_add(ucharaddress,uchardate)
{
start();
write_byte(0xa2);
respons();
write_byte(0x00);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
ucharread_add(ucharaddress)
{
uchardate;
start();
write_byte(0xa2);
respons();
write_byte(0x00);
respons();
write_byte(address);
respons();
start();
write_byte(0xa3);
respons();
date=read_byte();
stop();
returndate;
}
//////////////////////
//voidmain()
//{
//uchartemp;
//init();
//write_add(0x23,0xa7);
//delay1(10000);
//temp=read_add(0x23);
//move_in(temp&(0x0f));
//move_in((temp>>4)&(0x0f));
//RCK=0;
//RCK=1;
//while
(1);
//}
/*voidmain()
{
unsignedinti,j;
unsignedcharstate,temp,addr=0;
InitSerial();//初始化串口
EA=1;//允许系统中断
for(i=0;i<32768;i++)XBYTE[i]=0;//初始化RAM
while
(1)
{
state=XBYTE[0x8000];
if(state==0xff)//显示第一种模式
{
Led2=1;
addr=0;
for(i=0;i<10;i++)
{
Led1Invert();
for(j=0;j<4;j++)move_in(16);//清除当前显示
RCK=0;
RCK=1;
temp=XBYTE[0x100+i];//从RAM中读数据并显示
move_in(temp&(0x0f));
move_in((temp>>4)&(0x0f));
RCK=0;
RCK=1;
delay();
}
}
else
{
Led2=0;
if(flag)
{
XBYTE[0x100+addr]=sdata;
addr=(addr+1)%10;
flag=0;
}
}
}
}*/
实验六
#include
#include
#defineucharunsignedchar
sbitSCK=P1^7;
sbitRCK=P1^6;
sbitSER=P1^5;
sbitLed1=P1^0;
sbitLed2=P1^1;
sbitscl=P1^3;
sbitsda=P1^4;
unsignedcharnum[]={0x41,0xf9,0x83,0xa1,0x39,0x25,0x05,0xf1,0x01,0x21,0x11,0x0d,0x47,0x89,0x07,0x17,0xff};//先移低位
unsignedcharflag,sdata;
voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8位数据
PCON=0x00;//不进行2分频
TMOD=0x20;//定时器1设为模式2,
TL1=0xfa;//设置波特率为960019200=22118400/(32*12*(256-0xfd))
TH1=0xfa;
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
voidLed1Invert()
{
if(Led1==0)Led1=1;
elseLed1=0;
}
voidLed2Invert()
{
if(Led2==0)Led2=1;
elseLed2=0;
}
voidSer_ISR()interrupt4//串口中断服务程序//串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
voiddelay()//延时0.4秒
{
inti,j;
for(i=0;i<400;i++)
for(j=0;j<230;j++);
}
voidmove_in(unsignedchara)
{
unsignedchari;
for(i=0;i<8;i++)
{
SCK=0;
SER=(num[a]>>i)&(0x01);
SCK=1;
}
}
voidmain()
{
unsignedcharstate,temp,i,j=0;
unsignedcharnum[4];
InitSerial();//初始化串口
EA=1;//允许系统中断
for(i=0;i<4;i++)move_in(16);//清空显示
RCK=0;
RCK=1;
Led1=0;Led2=0;
while(j<4)
{
if(flag)
{
num[j]=sdata;
j++;
flag=0;
}
}
Led1=1;Led2=1;
for(i=0;i<4;i++)move_in(num[i]);//显示
RCK=0;
RCK=1;
while
(1)
{
state=XBYTE[0x8000];
if(state==0xef)//左移数码管显示
{
delay();
temp=num[3];
num[3]=num[2];
num[2]=num[1];
num[1]=num[0];
num[0]=temp;
for(i=0;i<4;i++)move_in(num[i]);//显示
RCK=0;
RCK=1;
}
if(state==0xdf)//右移数码管显示
{
delay();
temp=num[0];
num[0]=num[1];
num[1]=num[2];
num[2]=num[3];
num[3]=temp;
for(i=0;i<4;i++)move_in(num[i]);//显示
RCK=0;
RCK=1;
}
if(state==0xbf)//Led1
{
delay();
Led1Invert();
}
if(state==0x7f)//Led2
{
delay();
Led2Invert();
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东南大学 单片机实验 解答 单片机 实验