东南大学 单片机实验 解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一#include
sbit Led1=P1^0;
sbit Led2=P1^1;
void Delay1s(void)
{
unsigned char h,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--);
}
void main()
{
while(1)
{
Led1=1;
Led2=0;
Delay1s();
Led1=0;
Led2=1;
Delay1s();
}
}
实验二
#include
#include
sbit Led2=P1^1; unsigned char flag, sdata; void Led1Invert(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(unsigned char ch)
{
ES=0;
TI=0;
SBUF=ch;
while(!TI){}//等待发送结束信号
TI=0;
ES=1;
}
void Ser_ISR() interrupt 4 //串口中断号为4
{
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
void main()
{
unsigned char temp,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
sbit SCK=P1^7;
sbit RCK=P1^6;
sbit SER=P1^5;
unsigned char
num[]={0x41,0xf9,0x83,0xa1,0x39,0x25,0x05,0xf1,0x01,0x21,0x11,0x0d,0x47,0x89,0 x07,0x17,0xff}; //先移低位
unsigned char flag, sdata;
voidInitSerial()
{
SCON=0x50;//将串口设置为方式1,8 位数据
PCON=0x00;//不进行2 分频
TMOD=0x20;//定时器1 设为模式2,
TL1=0xfa;//设置波特率为9600
19200=22118400/(32*12*(256-0xfd))
TH1=0xfa;
TR1=1;//启动定时器1
ES=1;//允许串口中断
}
void Ser_ISR() interrupt 4 //串口中断服务程序//串口中断号为4 {
ES=0;
if(RI)
{
flag=1;
sdata=SBUF;
RI=0;
}
ES=1;
}
void delay() //延时0.5秒
{
inti,j;
for(i=0;i<500;i++)
for(j=0;j<230;j++);
}
voidmove_in(unsigned char a) {
unsigned char i;
for(i=0;i<8;i++)
{
SCK=0;
SER=(num[a]>>i)&(0x01);
SCK=1;
}
}
void main()
{
unsigned char state,i,j;
InitSerial(); //初始化串口
EA=1; //允许系统中断
while(1)
{
state=XBYTE[0x8000];