导航:首页 > 操作系统 > 单片机c51习题

单片机c51习题

发布时间:2025-04-06 19:02:38

‘壹’ 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;

}

}

‘贰’ 单片机C51 C语言编程问题!!!!

voiddisplay(ucharshi,ucharge)

{

uintledout[1],i;//这里应该是ledout[2]

我在proteus上进行了仿真,但是不知道什么原因,只对共阳极LED数码管好使。我就把程序稍微做了改动,仿真结果可以正确计时。

我把程序贴在下面供参考

#include<reg52.h>

#define禅悔ucharunsignedchar

#defineuintunsignedint

ucharnum=0,count=0,num2=0,shi=0,ge=0;

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//共阳//段选数据表

//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodewei[2]={0xfe,0xfd};//位选数据表

voiddisplay(uchar,uchar);

voiddelay(uint);

voidmain()

{

TMOD=0x10;//设定定时器1工作在方式1

TH1=(65536-50000)/256;//装载初值

TL1=(65536-50000)%256;//开总中断

//开定时器1中断

ET1=1;//启动定时器1

TR1=1;//程序在此不停对于数码管动态扫描等待中断

EA=1;

while(1)

{

display(shi,ge);//显示函数

}

}

voiddisplay(ucharshi,ucharge)

{

uintledout[2],i;

ledout[0]=table[shi];雹袭锋//段选数据十位

ledout[1]=table[ge];//段选数据各个

for(i=0;i<2;i++)

{//用P0输出位选数据

P0=wei[i];

//这里用查表的方式来赋值

P2=ledout[i];//用P2输出段选数据

delay(1);//扫描间隔

}

}

//1S中断函数

voidT1_time()interrupt3

{

TH0=(65536-50000)/256;源晌//重新装载初值

TL0=(65536-50000)%256;

count++;

if(count==20)//如果到了20次,说明1秒到

{//把COUNT清零重新计数20次

count=0;

num2++;//用NUM2向来数码管显示到60后归零

if(num2==60)

num2=0;

shi=num2/10;//把NUM2分成2个数十位和个位

ge=num2%10;

}

}

voiddelay(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)//延时程序

for(j=110;j>0;j--);

}

‘叁’ 51单片机的问题

7.定时/计数器工作于定时方式时,是通过89C51片内振荡器输出经12分频后的脉冲进行计数,
--对。

直至溢出。
--这要看你的软件,也可以让它永远不溢出。

8.80C51单片机的扩展程序存储器与片内程序存储器存储空间重叠。
--可以重叠,也可以不重叠。
--这要看,是谁设计电路了。

9.在中断响应时断点地址自动入栈
--对。

‘肆’ 求解几道MCS51单片机的答案

11. C51 中,若定义8 位有符号类型的变量,可定义为 char 型变量,其值域为 -128~127 ;unsigned int 型变量的长度为 无符号整型 ,其值域为 0~65535 。5. 若MCS-51 晶振频率为12MHz,则T0 工作于计数方式时,可以接受的计数脉冲频率范围为 1000000~1000000/65536 。11.欲对300个外部事件计数,可以选用定时器/计数器T1的模式 0 或模式 1 。 10.MCS-51 单片机的串行口工作于方式0 时用于 同步 移位寄存器。MCS-51单片机串行方式0通信时,数据从 Rxd 引脚发送/接收。

‘伍’ 第八届蓝桥杯单片机组预赛真题解析

第八届蓝桥杯单片机组预赛真题解析如下

  1. 单片机基础知识

    • 定时器0的4种工作模式被重点考察,需理解每种模式的工作原理及其最大定时长度,如最大定时长度为4、65536 us。
  2. 电路分析

    • 第二题涉及三级放大电路的输出电压计算,答案为2.4V,要求参赛者具备电路分析和计算能力。
  3. 滤波器类型识别

    • 当有用信号为固定频率时,应选择带通滤波器;
    • 直流电源滤波则选用低通滤波器,答案为D和B,考察了对滤波器类型的理解和应用。
  4. 逻辑门功能

    • OC门能够实现线与功能,这是逻辑门电路中的一个重要知识点,答案为D。
  5. 数电表达式简化

    • 第五题要求简化数电表达式,考察了对数字电路的理解和逻辑运算能力,答案为C。
  6. 中断优先级

    • 第六题中断优先级表中,外部中断0的请求优先级最高,这是单片机中断机制中的一个重要知识点,答案为D。
  7. 地址分配

    • 第七题讨论了地址分配,P2口作为输出高8位地址,P0口用于外部存储器低8位地址/数据传输,这是对单片机地址分配机制的理解和应用,答案为D。
  8. 数码管消除阴影

    • 第八题代码中数码管消除阴影的方法是全灭,这是对数码管显示原理的理解和应用,答案为A。
  9. 存储区分析

    • 第九题考察存储区分析,xdata指向外部存储空间,C51的code存储区写入后不可更改,常用于ROM,这是对单片机存储结构的理解和应用,答案为D。
  10. 复位与程序下载

    • 第十题考察复位后P0P3口的配置以及程序下载的特性,要求理解单片机的复位机制和程序下载过程,A和D选项有误。

实验总结: 本部分真题涵盖了定时器、滤波器、中断优先级等多个单片机领域的核心知识点,要求参赛者具备扎实的理论基础和实际应用能力。

阅读全文

与单片机c51习题相关的资料

热点内容
google开源程序员 浏览:920
登录火山怎么就服务器出错啥原因 浏览:286
苹果手机怎么把文件夹变成第一页 浏览:70
java程序员面试书籍 浏览:41
按名称顺序解压 浏览:947
插件化注解代码加密 浏览:776
如何编译py格式文件 浏览:859
四库全书里的算法 浏览:630
androidstudio示例 浏览:474
苹果手机通迅录怎么复制到安卓手机里 浏览:136
java接口构造函数 浏览:610
随云游戏app怎么下载 浏览:593
算法bt 浏览:587
西铁城l20机床编程 浏览:907
linux文件x 浏览:389
学编程的人都聪明吗 浏览:276
电脑服务器是什么联机 浏览:48
佛山3轴编程 浏览:369
中国加密市场交易量排行 浏览:102
单片机最小的系统封装 浏览:350