51单片机led闪烁程序及仿真图
c51流水灯四种效果仿真图+程序
P0=0xff; delay(300); } void liushuier() { P0=0xaa; delay(300); P0=0x55; delay(300); } void liushuisan(uchar x) { switch (x)
{ case 1: P0=0x01; break; case 2: P0=0x02; break; case 3: P0=0x04; break; case 4: P0=0x08; break; case 5: P0=0x10; break; case 6: P0=0x20; break; case 7: P0=0x40; break; case 8: P0=0x80; break; } } void liushuisi() { uint f,h; for(f=0;f<4;f++) { P0=tab[f]; delay(300); } for(h=0;h<3;h++) { P0=tab[2-h]; delay(300); } } void main() { uint a,b,c,d,e,g; init(); while(1) {
实验1 KEIL+PROTEUS使用——单灯闪烁
(9)弹出如图1-10所示的“Add Files to Group‘Source Group 1’”对话框中选择“main.c”文件,单击“Add”按钮,将“main.c”文件添加到工程中,然后单击“Close”按钮。
图1-10添加文件对话框
(10)在工程窗口中可以看到文件“main.c”已经添加,如图1-11所示。
(2)打开仿真软件,如图1-18所示。
图1-18 PROTEUS界面
※新建仿真文件
(3)每次打开PROTEUS软件,系统会自动创建名为“UNTITLID”的仿真文件。在常用工具栏中单击保存文件,弹出保存对话框,如图1-19所示。将仿真文件保存在“test1”文件夹中,并将仿真文件命名为“test1”,单击保存按钮。
2.掌握单片机控制LED的方法
3.掌握C51程序基本结构
4.了解软件延时的方法
三、实训内容
1
当二极管外加正偏电压时点亮,外加反偏电压时熄灭。本实训电路中二极管阳极恒接电源VCC(高电平),因此,想要使发光二级管D1点亮,只须控制单片机使P1.0输出低电平,想要使发光二极管D1熄灭,只须控制单片机P1.0输出高电平即可。若要亮灭闪烁变化,则需要控制单片机P1.0输出高、低电平循环交替。为看到持续亮灭效果,需要亮后延时一段时间,然后在熄灭LED,之后再延时一段时间,如此重复即可。
注意:最好将仿真文件和刚才创建的程序文件都放在一个工程文件夹下面,以便以后维护。
51单片机数字时钟-proteus仿真原理图及keil C51编译的C51程序
51单片机数字时钟-proteus仿真原理图及keil C51编译
的C51程序
该实验采用proteus 7.4 sp3进行的仿真,仿真原理图如下图所示,该实验采用定时器0的工作方式1定时500ms,等待20次定时1s进行时钟计数。通过定时器1的工作方式1定时500ms,用来调整数码管闪烁的时间。K1是用来选中时分秒,按一下选中时,再按一下选中分,再按一下选中秒,再按一下退出选中状态。K2按一下数加一,K3按一下数减一。在调整时间时,时钟停走。
/******************************************************************* ***
* 程序名; 时钟实验
* 功能: 数码管通过动态扫描显示时间,时间可设定,调整时间时时钟不走.
* 编程者: ZPZ
* 编程时间:2009/8/9
******************************************************************** **/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit _led=P2^7;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
uchar num=0,temp=0,count=0; uchar aa;
uchar hour,min,sec;
uchar code
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
51单片机设计交通灯仿真图
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while(1)
{
RED_ZHU=1;
RED_ZHI=0;
GREEN_ZHU=0;
GREEN_ZHI=1;
YELLOW_ZHU=1;//第二个状态:主干道亮绿灯30S、支干道亮红灯
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit RED_ZHU = P1^0;
sbit YELLOW_ZHU = P1^1;
sbit GREEN_ZHU = P1^2;
sbit RED_ZHI = P1^3;
sbit YELLOW_ZHI = P1^4;
sbit GREEN_ZHI = P1^5;
uint aa, bai,shi,ge,bb; //定义变量
/*数码管显示0-9*/
uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*子函数声明*/
void delay(uint z);
YELLOW_ZHI=1;
51单片机闪灯
51单⽚机闪灯
上⼀篇写了点亮⼀个灯,这⼀篇写⼀下闪⼀个灯
⾸先,流⽔灯实现起来就是⼀个⼀个点灯,中间加⼊⼀个延时就⾏了
我们先实现闪⼀个灯,从上⼀个代码添加⼀些代码即可完成
最重要的就是这个延时函数的实现,我们是通过不精准延时,单⽚机啥也不⼲在计数实现
这⾥同时可以再讲讲while的⽤法
unsigned int count = 0;
while(count <= 50000)
{
count = count + 1;
}
这样就是通过单⽚机不停计数来实现延时(具体延时多久,不⽤太在意)
加⼊到代码实现闪灯
#include "reg52.h"
sbit D1 = P2^0;
unsigned int count = 0;
void main(void)
{
while(1)
{
D1 = 0;//灯亮
while(count <= 50000)
{
count = count + 1;
}
D1 = 1;//灯灭
while(count <= 50000)
{
count = count + 1;
}
}
}
这样就能实现闪灯了吗?想想应该可以,下载进去看下效果
这⾥说道下载就要提⼀下,⽣成下载hex⽂件
点击魔法棒点击选项卡output,勾选上
,点击确定
然后最重要的是要在编译⼀次,下⾯输出这个
创建了hex⽂件到⼯程⽬录的\Objects\led.hex这个⽂件了,下载就不说了下载进去发现,咦,怎么不⾏,仔细看⼀下就能分析出来是变量没有清零了 = =!改⼀改
#include "reg52.h"
sbit D1 = P2^0;
unsigned int count = 0;//unsigned int 范围0到65535
51单片机定时器1sLED闪烁简单容易理解解析程序
/*#include<reg51.h>预处理名命令#define led P2 定义P大口typedef unsigned char u8; 定义变量typedef unsigned int u16;
void Time0int0() 控制中断
{
TMOD|=0x01;
TH0=0xFC;
TL0=0x18;
ET0=1;
EA=1;
TR0=1;
}
void main() 主函数
{
while(1);
Time0int0();
}
void Time0() interrupt 1 中断函数{
static u16 i; 静态变量
TH0=0xFC;
TL0=0x18;
i++;
if (i==1000)
{
i=0;//1s
led=~led;
}
}
*/
#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led =P2^1;
void delay(u16 x)
{
while(x--)
{
u8 i;
i=150;
while(i--);
}
}
void Timeint0 ()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x18;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
Timeint0 ();
}
void TimeInt0 () interrupt 1
{
static u16 i;
TH0=0xFC;
TL0=0x18;
i++;
if (i==10)
{
i=0;//1s
led=~led;
}
}
51单片机led灯闪烁代码
51单片机led灯闪烁代码
51单片机是一种比较流行的微控制器,通过它我们可以实现各种功能,其中led灯的闪烁是我们最常接触的一个项目。本文将围绕51单片机led灯闪烁代码展开阐述,具体操作如下:
1. 准备工作
在开始编写代码前,我们需要准备好工作环境,包括51单片机开发板、Keil C51编译器、下载器等。将开发板与电脑连接好,打开编译器。
2. 设置引脚
我们需要设置led灯的引脚,通常我们将led灯接在P1.0口,因此需要对该口进行设置。代码如下:
sbit LED=P1^0; // 定义P1.0口为LED引脚
3. 主函数
在主函数中,我们需要对led灯进行闪烁操作。代码如下:
void main()
{
while(1) // 无限循环
{
LED=0; // 灯亮
delay(1000); // 延时1秒
LED=1; // 灯灭
delay(1000); // 延时1秒
}
}
4. 定义延时函数
为了让led灯闪烁更加稳定,我们需要定义一个延时函数。代码如下:
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
{
for(j=112;j>0;j--);
}
}
5. 编译下载
完成以上步骤后,我们需要进行编译下载。在Keil C51编译器
中按下F7编译,编译成功后按下F8下载程序到开发板上。
通过以上步骤的操作,我们就可以实现51单片机led灯的闪烁
功能。当然,led灯的闪烁频率及闪烁次数可以根据实际需求进行调整。同时,在实际操作中,我们还需要注意引脚的接线及芯片的电压等问题,确保操作安全可靠。
51单片机仿真100实例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例
第 01 篇基础程序设计
01 闪烁的LED
/* 名称:闪烁的LED
说明:LED按设定的时间间隔闪烁
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0;
//延时
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
while(1)
{
LED=~LED;
DelayMS(150);
}
}
02 从左到右的流水灯
/* 名称:从左到右的流水灯
说明:接在P0口的8个LED
从左到右循环依次点亮,产生走
马灯效果
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
P0=0xfe;
while(1)
{
P0=_crol_(P0,1); //P0的值向左循环移动
DelayMS(150);
}
}
03 8只LED左右来回点亮
/* 名称:8只LED左右来回点亮
说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/
单片机实验--实验报告-LED灯闪烁实验
单片机实验--实验报告-LED灯闪烁实验
为了深入了解单片机,本次实验我们选取LED灯闪烁实验,研究单片机控制LED闪烁
的原理。经过这次实验,初步了解了单片机实验的基本设备及操作步骤,掌握了单片机语
言操控LED进行简单应用。
实验做法如下:
一、设计流程:
1.实验目的
本次实验的目的是了解单片机的原理,掌握单片机语言的基本使用方法,编制可控制LED灯闪烁的程序,完成LED灯闪烁的控制。
2.实验设备
实验设备主要包括:单片机51系列主控板,51单片机芯片,备有LED等硬件。
3.原理描述
本次实验主要是利用单片机来实现LED灯发出的闪烁效果,将单片机的P0作为一个
数据口出口实现闪烁的控制,这里使用一个定时器定时,通过程序实现数据口的翻转,可
以实现LED的闪烁效果。
二、实验步骤:
1.硬件的准备及接线
准备所需要的硬件,将单片机的芯片插入51系列主控板,将LED灯接线到主控板上。
2.软件编译
打开Keil软件,创建一个单片机工程文件,然后调用单片机库函数,建立用于控制LED灯闪烁的相关函数。
3.程序下载
编译、链接生成hex文件,将hex文件下载到单片机芯片上,运行程序(此处使用51编程器),完成LED的闪烁控制。
4.程序调试
完成程序的编写、下载即可实现LED的闪烁,对程序做个完整的测试,保证程序的可
靠性。
51单片机输出不同频率的PWM控制LED灯以不同的频率闪烁
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit P1_0=P1^0;
uchar tt;
void main()//主函数
{
TMOD=0x01;//设置定时器0为工作方式1
/*
此处利用定时/计数器T0从P1.0输出PWM为1hz的方波为例,
让发光二极管以1HZ闪烁,要输出其他频率的PWM改中断变程序中aa的值即可,
ห้องสมุดไป่ตู้设晶振频率为12MHz。?
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//等待中断产生
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
51单片机仿真100实例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例
第 01 篇基础程序设计
01 闪烁的LED
名称:闪烁的LED/*
LED按设定的时间间隔闪烁说明:*/#include<reg51.h>#define uchar unsigned char
#define uint unsigned int sbit LED=P1^0;延时//void DelayMS(uint x){uchar i; while(x--)
{
for(i=0;i<120;i++);
}
}//主程序void main(){ while(1) {LED=~LED;
DelayMS(150);
}
}
从左到右的流水灯02
/* 名称:从左到右的流水灯LED个P0口的8接在说明:产生走从左到右循环依次点亮,马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define
uint unsigned int//延时
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
P0=0xfe;
while(1)
{
P0=_crol_(P0,1); //P0的值向左循环移动
DelayMS(150);
}
}
03 8只LED左右来回点亮
/* 名称:8只LED左右来回点亮
说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/
基于51单片机智能灯设计与仿真
五、结论
本次演示详细介绍了基于51单片机的智能灯设计与仿真过程。通过电路设计和 软件编程,我们实现了对环境光照的智能检测和LED灯的亮灭控制。通过仿真 分析,我们验证了该系统的准确性和节能效果。51单片机智能灯的设计与仿真 为智能家居的发展提供了新的思路和方法,具有广泛的应用前景和推广价值。
参考内容
软件设计是智能交通灯系统的核心,基于51单片机的软件设计主要涉及中断处 理、定时器控制、串口通信等功能。通过编写程序,实现车辆和行人的流量检 测、交通灯状态控制、时间显示等功能。
三、功能实现
1、车辆和行人流量检测
通过红外传感器和视频传感器,检测车辆和行人的流量。当有车辆或行人通过 时,传感器输出高电平信号,单片机通过中断处理程序接收信号并计数。根据 车流量和行人数量,调整交通灯的状态和时间。
3、启动仿真
在完成电路设计和程序编写后,我们可以启动仿真来观察系统的运行情况。通 过调整光照传感器的参数或程序中的逻辑,我们可以测试智能灯在不同情况下 的亮灭状态和性能表现,从而对设计进行优化。
四、结果分析
通过仿真,我们可以观察到51单片机智能灯在不同的光照条件下可以实现准确 的亮灭控制。同时,通过测量仿真过程中的电压和电流数据,我们可以分析智 能灯在不同场景下的能耗表现。结果表明,51单片机智能灯控制系统在实现智 能化控制的同时,还有效降低了能源消耗,达到了节能减排的目的。
51单片机仿真100实例
//延时
voidDelayMS(uintx)
{
uchart;
while(x--)for(t=0;t<120;t++);
}
//主程序
voidmain()
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例
第01篇基础程序设计
01闪烁的LED
/*名称:闪烁的LED
说明:LED按设定的时间间隔闪烁
*/
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitLED=P1^0;
}
//主程序
voidmain()
{
uchari,wei=0x80;
while(1)
{
for(i=0;i<8;i++)
{
P2=0xff;
P0=DSY_CODE[i];//发送段码
wei=_crol_(wei,1);
P2=wei;//发送位码
DelayMS(2);
}
}
}
098只数码管闪烁显示数字串
单片机_LED灯闪烁实验报告
实验报告
一、实验目的
1、掌握51单片机实验开发板的使用步骤。
2、以LED闪烁为例子,通过keil4软件进行汇编程序的输入、运行、调试、仿真。
3、掌握STC-ISP的使用方法,将程序下载到实验板中。
二、实验设计
1、实验仪器、设备:计算机、型号为STC89C52RC的51单片机开发板
2、软件:USB驱动软件、keil4开发软件、STC-ISP
3、实验流程图设计:
4、软件设计:
1)keil4软件使用
A.双击keil4标志,执行keil4软件
B.在E盘中新建文件夹:zuoye1,以保存本实验中所产生的文件。将计算机中原有的main.c文件复制到文件夹zuoye1中。
C.点击“project”“New uVision project”,给工程取名为zuoye1,保存在文件夹zuoye1中。在新出现的窗口中选择“Atmel”“AT89C51”,按“OK”后在新出现的窗口选择“否”。
D.点击“file”“New”,新建一个原文件。双击“source Group1 ”,添加main.c文件。添加成功后将LED程序输入文件中。
#include<AT89X51.H>
//=======================================
#define uint unsigned int;
#define uchar unsigned char;
//=======================================
uint x,y;
uchar idx;
//=======================================
proteus的51单片机仿真-用不同的数据类型控制LED灯的闪烁频率
单片机的程序设计离不开对各种数据的处理,数据在单片机内存中的存放情况由数据结构决定。c语言的数据结构是以数据类型出现的。数据类型可分为基本数据类型和复杂数据类型,复杂数据类型是由基本数据类型构造而成的。
C语言中的基本数据类型有:char,int,short,long,float和double这几种。其中
char,int,short,long常用于指示整型数据,因此有包含有符号型和无符号型两种,float 和double常用于表示实型数据。
另外在c51中还有一些用于实现位操作和寄存器操作的数据类型。
接下来我们将利用几个实例来演示数据类型、数据运算等操作
1、本例分别使用无符号整型数据和无符号字符型数据来设计延时函数,跟别用于控制D1
和D2的闪烁,从而研究这两种数据的特性。
2、实现方法
为比较两种数据的使用效果,本例中将延时函数的循环次数设置相同,然后通过比较延时时间,直观地观察两种数据类型的使用效果。
3、在keil c51中新建工程ex5,编写如下程序代码,并编译生成ex5.hex文件
//实例5,用不同数据类型的延时函数控制LED灯的闪烁时间
#include <reg51.h>
/*******************************************
函数功能:用整型数据延时一段时间
********************************************/
void int_delay(void) //定义整型数据实现的延时函数
{
unsigned int i,j; //定义无符号整型变量,双字节数据,数值范围0-65535
51单片机程序及仿真
目录
1、交叉流水灯---------------------------------------------1
2、倒序流水灯---------------------------------------------3
3、正序流水灯---------------------------------------------7
4、交替流水灯--------------------------------------------11
5、2 0个LED显示--------------------------------------14
6、单个数码管显示0~ F ---------------------------------16
7、两个数码管显示00~ 99 ------------------------------20
8、4个数码管显示固定数值-------------------------------24
9、6个数码管同步显示----------------------------------26
10、6个数码管依次显示数字1~6 -------------------------29
11、一个按键控制LED灯---------------------------------33
12、矩阵按键控制LED灯---------------------------------36
13、矩阵键盘控制数码管依次显示0~F --------------------39
14、中断控制LED灯的依次亮灭--------------------------46
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
Delay10ms(50); //调用延时程序,修改括号里面的值可以调整延时时间,50代表50*10=500ms
LED1 = 1; //置P1^0口为高电平
Delay10ms(50); //调用延时程序
}
}
void Delay10ms(unsigned int c) //误差0us
{Βιβλιοθήκη Baidu
unsigned char a, b;
#include <reg51.h>//此文件中定义了51的一些特殊功能寄存器
//--声明全局函数--//
void Delay10ms(unsigned int c); //声明延时10ms的函数
sbit LED1=P1^0;
void main()
{
while(1)
{
LED1 = 0; //置P1^0口为低电平