C51单片机程序设计题,要求用C语言做,模拟交通灯控制单片机电路,答案要详细具体。

作者&投稿:宏柯 (若有异议请与网页底部的电邮联系)
求这个单片机题目的答案,基于51单片机,要求用c语言编程并在开发板上实现。来大神~

#include
#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
#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);
}
}

我博客上有类似的,您可以去参考。

晚上随手写,也未调试,权当看看

程序有不严谨地方还得调试修改

#include <REGX51.H>

#define STATUS_1S 1

#define STATUS_2S 2

#define STATUS_3S 3

#define STATUS_4S 4

#define STATUS_5S 5

#define STATUS_15S 15

#define STATUS_28S 28

#define STATUS_29S 29

#define STATUS_30S 30

unsigned char flag,status,status_temp=1,status_temp_;

sbit K1 = P0^0;

sbit K2  = P0^1;

sbit RLED = P0^2;

sbit YLED = P0^3;

sbit GLED = P0^4;

void Init(void)

{

ET0=1;

TR0=1;

RLED=0;  //亮

YLED=0;

GLED=0;

while(status_temp)

{

switch (status)

{

case STATUS_1S: //1S

{

RLED=1; //灭,闪一次

YLED=1;

GLED=1;

} break;

case STATUS_2S: //1S

{

RLED=0; //亮,闪一次

YLED=0;

GLED=0;

} break;

case STATUS_3S: //1S

{

RLED=1;    //灭

YLED=1;

GLED=1;

status_temp=0;

} break;

}

}

status_temp=1;

ET0=0;

TR0=0;

}

void Init_Timer0(void)  

{

TMOD=0x01;

// ET0=1;

// TR0=1;

EA=1;

TH0=0X3C;

TL0=0XB0;    // 未计算,偷楼上的

}

void M_Start(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0;  //红亮

while(status_temp)

{

switch (status)

{

case STATUS_1S:

{

if(status_temp_==1)

{

YLED=0;

}

} break;

case STATUS_2S:

{

if(status_temp_==1)

{

YLED=1;

}

} break;

case STATUS_3S:

{

if(status_temp_==1)

{  

YLED=0;

status_temp_=0;

}

} break;

case STATUS_15S: //15S灭,绿亮

{

RLED=1;

GLED=0;

} break;

case STATUS_28S:

{

GLED=1;

} break;

case STATUS_29S:

{

GLED=0;

} break;

case STATUS_30S:

{

GLED=1;

status=0;

status_temp_=1;

} break;

}

}

ET0=0;

TR0=0;

status=0;

status_temp=1;

YLED=1;

}

void M_End(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0;  //亮 1次

YLED=0;

GLED=0;

while(status_temp)

{

switch (status)

{

case STATUS_1S: //1S

{

RLED=1; //灭一次

YLED=1;

GLED=1;

} break;

case STATUS_2S: //1S

{

RLED=0; //亮二次

YLED=0;

GLED=0;

} break;

case STATUS_3S: //1S

{

RLED=1;    ////灭二次

YLED=1;

GLED=1;

} break;

case STATUS_4S: //1S

{

RLED=0;    ////亮三次

YLED=0;

GLED=0;

} break;

case STATUS_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();//模拟结束

    }

}

void interrupt_time0() interrupt 1   //核对头文件,一致就好

{

TH0=0X3C;

TL0=0XB0;

flag++;

if(flag==20)

{

status++;

flag=0;

}

}



单片机初始化时,三个指示灯同时闪烁2下,然后熄灭,请写出相应初始化程序;
void Init_Timer0();
{
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
TH0=0X3C;
TL0=0XB0;
}
void start_test()
{
while(1)
{
if ( counter>19) { led = ~led;flag++; counter = 0};
if (flag== 3) break;
}
}
void main()
{
Init_Timer0(); //设置定时器和中断
start_test(); //初始化

while(1)
{
if(K1= =0)
M_Start();//模拟开始
if(K2= =0)
M_End();//模拟结束
}
}
void display_time() //用上动态显示的方法。
{

}

void interrupt_time() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
counter++;

}
就这么多了,你这个很容易!
分太少了,就懒得写太详细了,参考一下网上的也可以啊,好多地方都有类似的

#include<reg52.h>
#define uint unsigned int
sbit K1=P0^0;
sbit K2=P0^1;
sbit RLED=P0^2;
sbit YLED=P0^3;
sbit GLED=P0^4;
uint num;
void delayms(uint xms);
void Init();
void Init_Timer0();
void M_Start();
void M_End();
void main()
{
Init();//单片机初始化
Init_Timer0();//定时器初始化
while(1)
{
if(K1==0)
TR0=1;
M_Start();//模拟开始
if(K2==0)
TR0=0;
M_End();//模拟结束
}
}void Init()
{
RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);

RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
void Init_Timer0()
{
TMOD=0x01;
EA=1;
ET0=1;

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void T0_time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void M_Start()
{
if (num<=300)
{
RLED=0;
YLED=1;
GLED=1;
}
else if (num<=840)
{
RLED=1;
YLED=1;
GLED=0;
}
else if (num<=900)
{
RLED=1;
YLED=1;
GLED=1;
delayms(500);

RLED=1;
YLED=1;
GLED=0;
delayms(500);
}
else if (num<=960)
{
RLED=1;
YLED=0;
GLED=1;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
else num=0;
}
void M_End()
{
uint i;
for(i=0;i<3;i++)
{
RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
for(;;)
{
RLED=0;
YLED=0;
GLED=0;
}
}

我也很需要

才20分……


MCS-51单片机C语言程序设计与实践目录
将程序从计算机写入单片机,实现硬件升级。三、ISP下载线 用于在单片机运行时更新程序,方便调试和维护。四、实验设备 包括电源、时钟、测试仪器等,用于测试和验证单片机系统。任务六 程序设计语言与工具软件简介 一、程序设计语言简介 C51是专为MCS-51系列单片机设计的汇编语言,支持结构化编程。二、集成开发...

51单片机,利用0和1两个数字组成16种模式,并用四个开关控制数码显示一...
以下是使用51单片机(如STC89C52)和4个开关来控制数码管显示一位密码的简单示例代码。假设使用的是共阴数码管,并且数码管的引脚连接到了单片机的P0口。include <reg52.h> \/\/ 引入单片机寄存器定义头文件\/\/ 数码管显示的密码模式,共16种,每种模式使用4位二进制表示unsigned char password[16] = { ...

单片机C51完全学习手册目录
程序设计基础,涉及标识符、关键字、数据类型,详细讲解了整型、浮点型、字符型、指针型和无值型的定义与应用,以及变量的作用域,包括自动型、外部型、静态型和寄存器型变量。C51的分隔符,深入解析“〔〕”、“()”、“{}”、“,”、“:”、“…”、“*”和“=”等分隔符的使用场景和规则。

51单片机,数据块传送程序设计,汇编语言程序怎么写?
51单片机,数据块传送程序设计,汇编语言程序怎么写?将 RAM 中 2000H~2FFFH 存储内容的 前一半复制到 3000H~37FFH 存储区和 3800H~3FFFH 存储区,后一半复制到 4000H~47FFH 存储区和 4800H~ 4FFFH 存储区 --- RAM 中 2000H~2FFFH 的前一半是:2000H~27FFH,送到:3000H~37FFH、4000...

51单片机系列:单片机最小系统
第三部分复位组,单片机自动复位,从零开始执行程序,这个就是复位的概念。第四部分其它功能组,使用单片机的内部存储器,如果内部存储器不够容量,最多选择更高级容量的单片机型号,就可以解决问题。51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。对于一个完整的电子设计来...

51单片机中用4个开关控制4个发光二极管的C语言程序设计
TX-1单片机开发板 独立键盘开关接在P3.4到P3.7口#include<reg52.h>sbit p34=P3^4;sbit p35=P3^5;sbit p36=P3^6;sbit p37=P3^7;void delay(uint z);main(){while(1){if(p34==0)P1=0xfe;if(p35==0)P1=0xfd;if(p36==0)P1=0xfb;if(p37==0)P1=0xf7;}} ...

MCS-51单片机,数据块传送程序设计,汇编语言如何设计?
传送到以 R4、R5 为首地址的目的 RAM 区。设定 R2、R3 所存储的源 RAM 首地址为 2000H(即 R2、R3 分别为 20H、00H),R4、R5 所存储的目的 RAM 首地址为 4000H(即 R4、R5 分别为 40H、00H),R6、R7 所存储 的字节数为 1FFFH(即 R6、R7 分别为 1FH、0FFH)。--- MOV R2...

51单片机课程设计要怎么写
课程设计 的一般要求:1、设计任务书 :说明设计的内容,达到什么程度 2、硬件电路图:设计硬件 电路板 (若不要求做实物的话,可用protues仿真,但无论如何硬件电路一定要有)3、软件设计 :根据硬件电路开发,去实现要设计的目的。4、流程图 :绘制软件流程图(其实,应该是根据先流程图 再设计 程序的...

51单片机设计一个程序:按键每按一次,数码管加1;当数码管加到9后又...
include<reg51.h> sbit k1=P3^3;define uint16 unsigned int define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if...

51单片机 串口设计c语言程序简单设计
第一题,已经测试成功:include <reg52.h> define uchar unsigned char define uint unsigned int uchar flag, a;sbit d = P0^0;void init(){ TMOD = 0x20; \/\/设置定时器1为工作方式2 TH1 = 0xfd;TL1 = 0xfd;TR1 = 1; \/\/开定时器1 REN = 1; \/\/开串口通信.SM0 = 0; ...

大祥区17134235660: 急急急急求,单片机C51的C语言程序 -
线种银盏: ;***************************;; DAC0832 ;;***************************; ORG 0000H START: MOV DPTR,#7FFFH MOV A,#00H MOVX @DPTR,A LCALL DELAY MOV A,#0FEH MOVX @DPTR,A LCALL DELAY SJMP LOOP DELAY: MOV R6,#00H DELAY2: MOV R5,#00H DELAY1: DJNZ R5,DELAY1 DJNZ R6,DELAY2 RET END

大祥区17134235660: C51单片机编程题:编写一个C语言函数,该函数能产生0~10的随机数. -
线种银盏: 软件没办法产生真随机数的,你可以加一个AD采集电路,采集信号噪声,作为随机种子产生随机数

大祥区17134235660: 【一道单片机原理及应用题目】C51程序设计语言及程序设计 -
线种银盏: 甲机程序:#include#define uchar unsigned char uchar tran[100]; main() { uchar num; TMOD=0x20 TH1=0xf9; TL1=0xf9; TR1=1; SCON=0x50; for(num=0;num { SBUF=tran[num]; while(!TI); TI=0; } } 乙机程序:#include#define uchar unsigned char ...

大祥区17134235660: 单片机用c语言编一个程序,要求用内部定时/计数器对30个脉冲进行计数,并同时对这三十个脉冲进行计时. -
线种银盏: 看了一下你的要求,单片机里有个GATE位的设置如果你懂得用,编这个程序就不难了.下面是我个人按照你要求刚编的程序:/*********************** 功能:内部定时/计数器记录脉冲个数和这些脉冲通过后所用的时间.硬件:单片机用AT89c51,...

大祥区17134235660: 51单片机编程练习题 请使用C语言回答 -
线种银盏: #include<reg51.h> 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); }

大祥区17134235660: 基于51单片机的温控遥控电风扇用c语言写的程序 -
线种银盏: #include<stdio.h> void main() {char a[4]=;int i,j,k;char space=' ';for(i=0;i<4;i++){printf("\n");printf(" ");for(j=1;j<=i;j++)printf("%c",space);for(k=0;k<4;k++)printf("%c",a[k]);}printf("\n"); }

大祥区17134235660: 求用C语言编写的交通灯程序,C51单片机控制,无左转右转 -
线种银盏: //以下代码经过Keil C51软件调试通过 #include "reg51.h" //头文件包含//宏定义 #define uint unsigned int #define uchar unsigned char#define ON 0 //0的时候灯亮 #define OFF 1 //1的时候灯亮//管脚定义 //南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 ...

大祥区17134235660: 试用c语言编写一个能输出锯齿波信号的单片机c51程序 -
线种银盏: 程序加一个的LCD1602,你选择使用 的#include <reg52.h>的/ /包含头文件 ?#包括<intrins.h>的 #定义UCHAR无符号的字符/ /宏定义 ?#定义UINT无符号整数 ?UCHAR I,J,N,Z,/ /定义全局变量 SBIT RS = P2 ^ 0; / /定义端口 ?和SBIT RW = P2 ...

大祥区17134235660: 如何用c语言编程实现c51单片机中从串口接收一个字符串? -
线种银盏: 可以的,定义一个缓冲区(数组)接收,到时单片机把字符串顺序处理一下就行了,一般/n来代表字符串的结束标志.

大祥区17134235660: 用单片机c51,c语言编0 - 9计数器程序!谢谢 -
线种银盏: #include<reg51.h> #define uchar unsigned char uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; uchar dat=0; void ext0() interrupt 0 { dat++; dat%=10; P1=table[dat]; } main() { EX0=1; IT0=1; EA=1; P1=table[dat]; while(1);}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网