❶ C51单片机程序设计题,要求用c语言做,模拟交通灯控制单片机电路,答案要详细具体。
晚上随手写,也未调试,权当看看
程序有不严谨地方还得调试修改
#include<REGX51.H>
#defineSTATUS_1S 1
#defineSTATUS_2S 2
#defineSTATUS_3S 3
#defineSTATUS_4S 4
#defineSTATUS_5S 5
#defineSTATUS_15S 15
#defineSTATUS_28S 28
#defineSTATUS_29S 29
#defineSTATUS_30S 30
unsignedcharflag,status,status_temp=1,status_temp_;
sbitK1 = P0^0;
sbitK2 = P0^1;
sbitRLED = P0^2;
sbitYLED = P0^3;
sbitGLED = P0^4;
voidInit(void)
{
ET0=1;
TR0=1;
RLED=0; //亮
YLED=0;
GLED=0;
while(status_temp)
{
switch(status)
{
caseSTATUS_1S: //1S
{
RLED=1; //灭,闪一次
YLED=1;
GLED=1;
} break;
caseSTATUS_2S: //1S
{
RLED=0; //亮,闪一次
YLED=0;
GLED=0;
} break;
caseSTATUS_3S: //1S
{
RLED=1; //灭
YLED=1;
GLED=1;
status_temp=0;
} break;
}
}
status_temp=1;
ET0=0;
TR0=0;
}
voidInit_Timer0(void)
{
TMOD=0x01;
// ET0=1;
// TR0=1;
EA=1;
TH0=0X3C;
TL0=0XB0; //未计算,偷楼上的
}
voidM_Start(void)
{
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
RLED=0; //红亮
while(status_temp)
{
switch(status)
{
caseSTATUS_1S:
{
if(status_temp_==1)
{
YLED=0;
}
} break;
caseSTATUS_2S:
{
if(status_temp_==1)
{
YLED=1;
}
} break;
caseSTATUS_3S:
{
if(status_temp_==1)
{
YLED=0;
status_temp_=0;
}
} break;
caseSTATUS_15S: //15S灭,绿亮
{
RLED=1;
GLED=0;
} break;
caseSTATUS_28S:
{
GLED=1;
} break;
caseSTATUS_29S:
{
GLED=0;
} break;
caseSTATUS_30S:
{
GLED=1;
status=0;
status_temp_=1;
} break;
}
}
ET0=0;
TR0=0;
status=0;
status_temp=1;
YLED=1;
}
voidM_End(void)
{
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
RLED=0; //亮1次
YLED=0;
GLED=0;
while(status_temp)
{
switch(status)
{
caseSTATUS_1S: //1S
{
RLED=1; //灭一次
YLED=1;
GLED=1;
} break;
caseSTATUS_2S: //1S
{
RLED=0; //亮二次
YLED=0;
GLED=0;
} break;
caseSTATUS_3S: //1S
{
RLED=1; ////灭二次
YLED=1;
GLED=1;
} break;
caseSTATUS_4S: //1S
{
RLED=0; ////亮三次
YLED=0;
GLED=0;
} break;
caseSTATUS_5S: //1S
{
RLED=1; ////灭三次
YLED=1;
GLED=1;
status_temp=0;
} break;
}
}
status_temp=1;
ET0=0;
TR0=0;
}
main()
{
Init();//单片机初始化
Init_Timer0();//定时器初始化
while(1)
{
if(K1==0)
M_Start();//模拟开始
if(K2==0)
M_End();//模拟结束
}
}
voidinterrupt_time0()interrupt1 //核对头文件,一致就好
{
TH0=0X3C;
TL0=0XB0;
flag++;
if(flag==20)
{
status++;
flag=0;
}
}
❷ 单片机C语言程序设计题
这是两个题啊。哈哈好做,第一个有C语言的冒泡法排序,第二个用中断,读,输出就可以
❸ 单片机的c语言,求答案。。。。坐等,两个题的程序
1:
CLRRAM:
MOV DPTR,#7000H
MOV R2,#0
LOOP:
CLR A
MOVX @DPR,A
INC DPTR
INC R2
CJNE R2,#0FFH,LOOP
RET
2:
BCDCHG:
MOV A,30H
ANL A,#0FH
CJNE A,#10,LP1
LP1:
JNC ERR
LP2:
PUSH ACC
MOV A,30H
SWAP A
ANL A,#0FH
MOV B,#10
MUL AB
MOV B,A
POP ACC
ADD A,B
CJNE A,#100,LP3
LP3:
JNC ERR
RTN:
MOV DPTR,#1000H
MOVX @DPTR,A
RET
ERR:
MOV A,#0FFH
SJMP RTN
3:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A
LCALL DELAY
RL A
SJMP LOOP
DELAY:
MOV R2,#5
DELAY1:
MOV R3,#126
DELAY2:
MOV R4,#200
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
RET
END
❹ 单片机C语言,题目如下,帮我理解理解,题目和答案都在下面
频率控制的中断服务程序,需要做些修改:
voidtimer0()interrupt1//定时器0中断
{
TR0=0;//进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
tt++;
if(tt>=10)//10*frett应该放在前面
{
if(flag<40)//以下几个if分别用来选取不同的频率{
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=40&&flag<80)
{
tt=0;
fre=5000;//这里数值修改
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
fre=1000;//这里数值修改
beep=~beep;
}
if(flag>=120&&flag<160)
{
tt=0;
fre=500;//这里数值修改
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
fre=250;//这里数值修改
beep=~beep;
}
if(flag>=200&&flag<240)
{
tt=0;
fre=125;//这里数值修改
beep=~beep;
}
if(flag>=240&&flag<280)
{
tt=0;
fre=62;//这里数值修改
beep=~beep;
}
if(flag>=280&&flag<320)
{
tt=0;
fre=50;//这里数值修改已经是1K了
beep=~beep;
}
if(flag>=320&&flag<360)
{
tt=0;
fre=25;//这里数值修改这里是2K了
beep=~beep;
}
TR0=1;
}
❺ 跪求:单片机的c语言应用程序设计 参考答案
建议你去爱问资料共享搜一下!估计会有的
❻ 求一份单片机的C语言程序设计与应用 - 基于Proteus仿真 第二版 课后答案 (姜志海 赵艳雷),谢谢啦
这本书的作者都是我的老师啊,不过我这没有这本书的答案啊,有问题可以问我,我可能可以帮到你。呵呵
❼ 求解一道单片机C语言编程题,急
#include"AT89X52.h"
sbit BUTTON = P1^1;
sbite LED = P1^0;
unsigned int reg;
void main(void)
{
while(1)
{
if (!BUTTON)
{
reg= 5000;
while(--reg);
if (!BUTTON)
{
LED = ~LED;
while(!BUTTON);
}
}
}
}
❽ C语言单片机,彩灯控制器的设计,读程序回答问题。
//稍微改了一下加了一个暂停键,中断方式,你需要将该键接到P3.2
#include<reg51.h>
//包含单片机寄存器的头文件
#include
<intrins.h>
/*****************************
函数功能:延时一段时间
*****************************/
unsigned
char
L[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
unsigned
char
L1[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
bit
pause;
void
ex0isr()
interrupt
0
{
pause=~pause;
}
void
delay1s(unsigned
int
i)
{
unsigned
int
j;
while(i--)
{
for(j=0;j<=151;j++){;}
}
while(pause);//实现暂停,键按一下暂停,再按一下恢复。
}
/*****************************
函数功能:主函数
*****************************/
void
main(void)
{
unsigned
char
i,j;
P0
=
0x00;
P1
=
0x00;
P2
=
0x00;
P3
=
0x00;
pause=0;
while(1)
{
for(j=0;j<8;j++)
{
P0=L[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P1=L[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P2=L[j];
delay1s(100);
};
for(i=0;i<8;i++)
{
P3=L[i];
delay1s(100);
};
for(j=0;j<8;j++)
{
P0=L1[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P1=L1[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P2=L1[j];
delay1s(100);
};
for(i=0;i<8;i++)
{
P3=L1[i];
delay1s(100);
};
}
}
❾ 单片机C语言设计编程题
#include sbit pluse=P1^0; void t0isr() interrupt 1 { TH1=(65536-10000)/256; TL1=(65536-10000)%256; pluse=~pluse; } main() { TMOD=0x10; TH1=(65536-10000)/256; TL1=(65536-10000)%256; TR1=1; ET1=1; EA=1; while(1); }
❿ 求这个单片机题目的答案,基于51单片机,要求用c语言编程并在开发板上实现。来大神
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P1^0;
//延时
void DelayMS(uint ms)
{
uchar
i;
while(ms--)
for(i=0;i<120;i++);
}
//向串口发送字符
void Putc_to_SerialPort(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//主程序
void main()
{
uchar
Operation_No=0;
SCON=0x40; //串口模式1
TMOD=0x20; //T1工作模式2
PCON=0x00; //波特率不倍增
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
while(1)
{
if(K1==0) //按下K1时选择操作代码0,1,2,3
{
while(K1==0);
Operation_No=(Operation_No+1)%2;
}
Putc_to_SerialPort('A'+Operation_No);
DelayMS(100);
}
}
//乙机程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
sfr LED=P0;
//延时
void DelayMS(uint ms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=20)
{
num=0;
LED=~LED;
}
}
//主程序
void main()
{
SCON=0x50; //串口模式1,允许接收
TMOD=0x21; //T1工作模式2
PCON=0x00; //波特率不倍增
TH1=0xfd; //波特率9600
TL1=0xfd;
RI=0;
TR1=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
LED=0xff;
while(1)
{
if(RI) //收到则
{
RI=0;
switch(SBUF)//根据所收到的不同命令字符完成不同动作
{
case'A': TR0=1;break; //LED闪烁
case'B': LED=0xff;TR0=0;break; //LED灭
}
}
DelayMS(100);
}
}