当前位置:首页 » 编程语言 » c51语言指针灯闪烁控制电路
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c51语言指针灯闪烁控制电路

发布时间: 2022-04-18 11:22:32

① 用C51单片机。通过2个按键,按制LED的变化。条件一2个按键都是低电平,led灯做闪烁。条件二,

1.1 单片机基础知识 3
1.2 PWM简介 4
1.3 PWM控制LED亮暗原理 4
二、 程序设计思路 5
三、 总体方案设计 7
3.1 主控电路: 7
3.2 LED驱动 8
3.3 手动控制 9
四、系统软件设计 10
4.1 系统软件设计 10
4.2 控制程序代码 10
五、 总结 13
前 言 二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑通常是指个人计算

② 利用C51单片机控制8个LED灯同时闪烁的程序

#include<reg51.h>
#defineucharunsignedchar
voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
while(1)
{
P0=0x00;
delay(200);
P0=0xff;
delay(200);
}
}

③ 用c51单片机控制一个闪光灯循环闪光5次以后熄灭不再闪光,用c语言编程,求程序……

用C语言编程,求程序的方法:

#include//包含单片机寄存器的头文件

/****************************************函数功能:延迟一段时间

*****************************************/

Voiddelay(Void)//Void表示没有返回值,也没有传递参数。

Unsignedint我;定义一个最大值为65535的无符号整数。

For (I = 0;我< 20000;i++) //执行20000个空循环。

;//什么也不做,等待一个机器周期。

/*******************************************************

函数函数:主函数(C语言规则必须有且只能有一个主函数)。

********************************************************/空白主要(空白)

而(1)//无限循环。

P0=0xfe;//P1=11111110B,P0.0输出低电平。

延迟();//推迟一段时间。

P0=0XFF;//P1=11111111B,P0.0输出高电平。

延迟();//推迟一段时间。

单片机驱动LED光源程序:

#include//头文件。

定义uint无符号int

#定义uchar无符号字符

SbitLED1=P1^7;//定义。

空白delay_ms(单位);//带参数的ms级延时函数。

Voidmain()

而(1)

LED1=0;

Delay_ms(1000);

LED1=1;

Delay_ms(1000);

Voiddelay_ms(uintz)//delay子例程

使用Uintx,y;

For (x = z;X > 0;X -)

For (y = 110;Y > 0;Y -);

(3)c51语言指针灯闪烁控制电路扩展阅读:

单片机应用分类:

一般类型:

这是关于微控制器的。例如80C51通用型单片机,它并不是为特定的目的而设计的;专用单片机是为某一类产品甚至某一种产品而设计生产的。例如,为了满足电子体温计的要求,芯片中集成了具有ADC接口的温度测量控制电路等功能。

主线:

这是由微控制器是否提供并行总线来区分的。总线微控制器一般安装有并行地址总线、数据总线、控制总线,这些引脚扩展并行外围设备可以通过串口与单片机连接。

另外,很多单片机都需要将外围设备和外围设备的接口集成在一块,所以在很多情况下不能并行扩展总线,大大降低了封装成本和芯片体积,这种单片机被称为非总线单片机。

控制类型:

这是关于微控制器的一般应用。一般来说,工业控制寻址范围大,计算能力强。家用电器的单片机大多是专用的。

它通常是小包装、低价格、高集成的外围设备和外围接口。显然,上述分类并不独特和严格。例如,80C51类单片机既是通用的,又是总线的,还可以用于工业控制。

④ 基于51单片机控制交通灯的电路图与C语言程序

思路:

红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。

东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。

三、硬件电路设计

此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。

四、软件程序(C语言)

以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。

//*****************************//

//程序名:十字路口交通灯控制

//编写人:黄庭剑

//初写时间:2009年1月2日

//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.

//CPU说明:AT89C51型单片机;24MHZ晶体振荡器

//完成时间:2009年1月6日

//*****************************//

#include<stdio.h>

#include<reg51.h>

#include<intrins.h>

sfrp0=0x80;

sfrp1=0x90;

sfrp2=0xA0;

sfrp3=0xb0;//这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。

sbitsw=p0^0;

sbitOE=P0^6;

sbitLE=P0^7;//74LS373锁存器控制端定义

chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;

//函数声明begin

voiddelay1(intcount);

voiddelay_long(intnumber1,intnumber2);

voidpeople_car_drive();

//函数声明end

//***********************//延时子程序

voiddelay1(intcount)

{inti;

for(i=count;i>0;i--)

{;}

}

voiddelay_long(intnumber1,intnumber2)

{

inta,b;

for(a=number1;a>0;a--)

{

for(b=number2;b>0;b--)

{_nop_();}

}

}

//**********************//延时子程序

voidpeople_car_drive()

{

intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒

p2=0x09;//南北红灯亮

p3=0x24;//东西绿灯亮

while(p_1-->0)

{LE=1;

OE=0;

if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数

p1=display[p_1];

delay1(1000);

LE=0;

j=9;

for(i=10;i>0;i--)

{

if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示

p1=display[j--];

delay_long(16000,2);

if(sw==1)return;

}

}

//*******************************************************************************//

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意

p3=0x12;

p1=display[3];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[2];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[1];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

//*****************以下是车辆通行时延时60秒//

p2=0x24;//南北绿灯亮

p3=0x09;//东西红灯亮

while(p_2-->0)

{LE=1;

OE=0;

if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数

p1=display[p_2];

delay1(1000);

LE=0;

j=9;

for(i=10;i>0;i--)

{

if(p_2==0&&j==3)break;//减到2时退出循环

p1=display[j--];

delay_long(16000,2);

if(sw==1)return;

}

}

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意

p3=0x12;

p1=display[3];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[2];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[1];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);//南北黄灯闪烁三秒完毕

}

voidmain()//主函数入口处

{

p0=0x01;

p1=0x00;

p2=0x00;

p3=0x00;//初始化各端口

{while(1)

{

if(sw==0)

{people_car_drive();}

else

{

p2=0x00;

p3=0x00;//关闭所有交通灯

}

}

}

}

详情访问:http://hi..com/hjiannew/

⑤ 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语言编程:设当开关为1时,控制2个led交替闪烁,闪烁时间为5秒

#include#,led;sbitkey1=P1^0;sbitkey2=P1^1;voidt0isr()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;times++;}voidrolled(){P0=led;led=(led>>1)|0x80;if(led==0xff)l

⑦ c51单片机交通灯设计程序和电路图

我写这个没有倒计时显示,那个显示的部分就交给你自己完成吧。。。要学习的,不能老是靠别人啊!!

#include<reg52.h>

#defineucharunsignedchar

unsignedcharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

sbitchoice=P0^0;

sbitsel1=P3^6;

sbitsel2=P3^7;

sbitkey1=P3^2;

sbitkey2=P3^3;

sbitm_green=P2^0;

sbits_green=P2^1;

sbitm_red=P2^2;

sbits_red=P2^3;

sbitm_yellow=P2^4;

sbits_yellow=P2^5;

unsignedcharstate,i,flag,num=20;

unsignedintj;

voiddisplay();

voidmain()

{

EA=1;

ET0=1;

EX0=1;//外部中断允许位

EX1=1;

IT0=0;//外部中断方式为电平

IT1=0;

TMOD=0x01;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

while(1)

{

if(j==10)

{

j=0;

flag++;

if(flag==2)state=1;

if(flag==3)state=2;

if(flag==5)state=3;

if(flag==6){flag=0;state=0;}

}

switch(state)

{

case0:

P2=0xf6;

break;

case1:

if(i%2==0){m_green=1;s_red=1;}

else{m_green=0;s_red=0;}

m_yellow=0;

s_yellow=0;break;

case2:

P2=0xf9;

break;

case3:

if(i%2==0){s_green=1;m_red=1;}

else{s_green=0;m_red=0;}

m_yellow=0;

s_yellow=0;

break;

}

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

if(i==20)

{

i=0;

j++;

}

}

voidint0()interrupt0

{

P2=0xf3;

}

voidint1()interrupt2

{

unsignedchari;

if(choice==0)i=0;

elsei=1;

switch(i)

{

case0:

P2=0xf6;

break;

case1:

P2=0xf3;

break;

default:

P2=0xf3;

break;

}

}

⑧ 用C51单片机控制12个LED流水灯的C语言程序怎么写

#include "REG52.H"

//控制引脚定义
sbit LED1 = PX.X; //P0.0-P3.7任意引脚
.... .... .......
sbit LED12 = PX.X;
//宏定义灯亮灯灭
#define LED1_ON( ) LED1 =0 //阳极接电源
#define LED1_OFF( ) LED1 =1 //阳极接电源
....... ............. .............
#define LED12_ON( ) LED12 =0 //阳极接电源
#define LED12_OFF( ) LED12 =1 //阳极接电源

void Init_GPIO( )//端口引脚初始化,关闭所有指示灯
{
LED1_OFF( ) ;
..............
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延时函数
{
u16 i, j;
for(i = dat; i>0; i--)
{
for (j=300; j>0; j--);
}
}
int main( ) //主函数
{
Init_GPIO( );//引脚初始化
while(1) //大循环
{
LED1_ON( );//点亮第一个LED
LED2_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节

LED1_OFF( ); //点亮第二个LED
LED2_ON( );
LED3_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);
............. //按照上面修改;

LED1_OFF( );//点亮第十二个LED
LED2_OFF );
LED3_OFF( );
.............
LED12_ON( );
Delay_ms(1000);
}
}

⑨ 请教c51单片机,c语言编程,关于指示灯定时闪烁的

用定时中断控制闪烁。

时间间隔则由主程序,根据按键次数来变更。

程序可见:

http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d92cc98651bfef3bc75cc387.html

仿真实验截图如下:

⑩ 急求用c语言实现c51编程,8个流水灯,要求有控制按键,包括电路图。谢谢~~~

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit longtime=P3^2; //增加灯的时间 按键
sbit shorttime=P3^3; //减少灯的时间 按键
uchar i,a;
uint num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void init()
{
num=10;
P0=0xFE;
a=P0;
}

void keyscan()
{
if(longtime==0)
{
delay(5);
if(longtime==0)
while(!longtime);
num=num+200;
}
if(shorttime==0)
{
delay(5);
if(shorttime==0)
while(!shorttime);
if(num>=200)
num=num-200;
else
num--;
if(num==0)
num++;
}
}

void main()
{
init();
while(1)
{

for(i=0;i<8;i++)
{
keyscan();
a=_crol_(a,1);
P0=a;
delay(num);
}
}
}

//频率控制的不怎么好,见谅