❶ 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);
}
}