STM32F入门LED闪烁程序

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

/* PE0作为LED驱动引脚*/

/* SSC___2012.8.20 */

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

#include"stm32f10x_lib.h"

void RCC_Configuration(void);//时钟配置

void NVIC_Configuration(void);//中断向量表配置

void Delay(int i);

int main()

{

GPIO_InitTypeDef GPIO_InitStructure;//GPIO 配置结构体

RCC_Configuration();

NVIC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//全能GPIOE 时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//设置准备配置的GPIO 引脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置GPIO 速度

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置GPIO 输入、输出模式GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化GPIOE 的0脚配置

while(1)

{

GPIO_SetBits(GPIOE,GPIO_Pin_0);//PE0 置高

Delay(500000);

GPIO_ResetBits(GPIOE,GPIO_Pin_0);//PE0 清除

Delay(500000);

}

}

void RCC_Configuration(void)

{

ErrorStatus HSEStartUpStatus;

RCC_DeInit();

RCC_HSEConfig(RCC_HSE_ON);

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)

{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div2);

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

RCC_PLLCmd(ENABLE);

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() != 0x08);

}

}

void NVIC_Configuration(void)

{

#ifdef VECT_TAB_RAM

/*Set the V ector Table base location at 0x20000000*/

NVIC_SetV ectorTable(NVIC_V ectTab_RAM,0x0);

#else/*VECT_TAB_FLASH*/

/*Set the V ector Table base location as 0x08000000*/

NVIC_SetV ectorTable(NVIC_V ectTab_FLASH,0x0);

#endif

}

void Delay(int i)

{

while((i--)!=0);

}

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。 2. 8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。 3. 8 个发光管来回流动,第个管亮100ms 。 4. 用8 个发光管演示出8 位二进制数累加过程。 5. 8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。重复此过程。 6. 间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。 7. 间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。 1 #include #define uint unsigned int sbit led 仁P"0; void delay(); void main() { while(1) { led1=0; delay(); led1=1; delay(); } } void delay() {

uint x,y; for(x=200;x>0;x--) for(y=100;y>0;y--); } #include #include #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a; void delay(); void main() { a=0xfe; P1=a; while(1) { a=_crol_(a,1); delay(); P1=a; delay(); } } void delay() { uint b; for(b=55000;b>0;b--); } 3 #include #include #define uint unsigned int #define uchar unsigned char void delay() { uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--); } void main() { uchar a,i; while(1) a=0xfe; for(i=0;i<8;i++) { P1=a; delay(100); a=_crol_(a,1); } a=0x7f; for(i=0;i<8;i++) { P1=a; delay(100); a=_cror_(a,1);

单灯闪烁程序

实验一单灯闪烁实验 一、实验要求 发光二极管按照设定的时间间隔闪烁。 二、实验目的 1、了解单片机内部结构和最小系统。 2、掌握单片机与LED的硬件连接。 3、掌握单片机C51语言的程序框架。 4、了解Keil软件和Proteus软件的使用。 5、参考电路图一般最小系统 包括单片机、电源、时钟 电路、复位电路四部分。 根据编写的程序P1.0 口 接发光二极管。

三、实验说明 Proteus仿真时注意与LED连接的电阻阻值,若阻值过大LED 将没有反应。编写程序时,注意for语句于简单延时语句的运用。 四、实验框图 五、实验程序 ORG 0 START: CLR P1.0 LCALL DELAY

SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END

实验二LED流水灯实验 一、实验要求 编写一段流水灯控制程序,用P1 口作为输出控制端,实现八只发光二极管从左至右循环亮灭。 二、实验目的 1、进一步熟悉keil仿真软件、proteus仿真软件的使用。 2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。 3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。。

三、参考电路图复位电路、时钟电路的基础连线。P1端口分 别连接八只发光二极管。 四、实验说明编写程序时注意对延时子程序的使用,以及了解 _crol函数的使用。 unsigned char _crol_(unsigned char c,unsigned char b); 描述: 将字符c循环左移b位。_crol_函数有返回值,返回的是将c循环左移之后 的值。这是c51库自带函数,包含在intrins.h文件中。五、实验框图

51单片机闪烁灯

1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒=0.001毫秒(ms) 机器周期微秒 MOV R6,#20 2个 2 2 D1: MOV R7,#248 2个 2+2×248=498 20×(2+2×248)

DJNZ R7,$ 2个2×248=496 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 10002=2+(2+2*248)*20+40 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。 如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示 6.汇编源程序 ORG 0 ; ORG 的意思是什么就是 值不同跟系统程序存贮器地址有关. 以上面的程序来讲ORG 0000H接下来写的程序都在 0000H后。ORG 2000H也一样。(如果ROM够大的话) START: CLR P1.0 LCALL DELAY ;“调用”(ACALL或LCALL)一下,避免重复编写也节省程序存储空间,子程序的最后都 要放一条返回指令既“RET”。 SETB P1.0 ;使P1.0变为1。灯亮。 LCALL DELAY

点亮P1口的多个LED灯闪烁

点亮P1口的多个LED灯闪烁 功能:点亮P1口的多个LED灯闪烁 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit LED0=P1^0;// 用sbit 关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号 sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; sbit LED4=P1^4; sbit LED5=P1^5; sbit LED6=P1^6; sbit LED7=P1^7; void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 while (1) //主循环 { for(i=0;i<10;i++) //加入for循环,表明for循环大括号中 //的程序循环执行10次 { LED0=0; //将P1.0口赋值0,对外输出低电平 LED2=1; LED4=0; Delay(5000); //调用延时程序;更改延时数字可以更改延时长度; //用于改变闪烁频率 LED0=1; //将P1.0口赋值1,对外输出高电平 LED2=0; LED4=1; Delay(5000); } for(i=0;i<10;i++)

用C语言编写程序实现通过按键使LED灯周期闪烁

用C语言编写程序实现通过按键使LED灯周期闪烁(2010-02-24 21:12:44)标签: 循环闪烁周期led灯按键杂谈 一、设计题目 二、程序功能: 开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键LED7以 0.8S周期闪烁,按1键LEDPort以1S周期闪烁。 三、总体设计思想 用中断方式实现定时器的定时,然后通过键盘中断程序实现通过对按键的操作来实现相应的周期闪烁。 在我编写的实验程序中我用到了定时器中断和外部中断。程序共分为两个模块,一个为定时器模块,一个为键盘中断程序模块,在主函数中,首先实现所有LEDPort点亮,然后通过中断方式实现定时2S,在定时器num==20时,设定全局变量为标志位flag=1,然后再主函数中设定条件,通过标志位的变化实现所有LEDPort持续2S后熄灭。然后进入循环,等待按键,在按键中断服务程序中使用switch语句实现通过改变num1的值来实现LED7的闪烁周期。设定标志位b=0,在主函数中使用if语句通过判断b的值来改变LED7的亮灭情况,同时相应的b值会取反。 四、程序具体实现 实验要求开机复位后,LED0到LED7全部点亮2S后熄灭。在主函数中使用LEDPort=0x00;这条语句实现所有灯都亮,使用中断方式实现定时器定时2S,因为实验要求20ms溢出,所以设定num=100,在定时器中断服务程序中使用if语句判断条件,当num加到100,也就是说2S时间到时,执行flag=1;语句(先设定全局变量flag=0)。然后在主函数中使用while语句规定只有在flag=0时才执行所有LEDPort点亮的操作。2S时间到后,所有灯熄灭。然后进入while循环,

单片机控制-闪烁灯

单片机控制-闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

基于单片机(c语言控制的)流水灯程序设计及proteus仿真图

基于单片机(c语言控制的)流水灯程序设计及proteus仿真图

89c51与8个发光二极管相连流水控制 一、不同花样的控制源程序代码: /*#include #define uchar unsigned char; uchar ledtab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0 xbf,0x7f}; void delay(int n) {while(n--);} main() { int i; while(1) { for(i=0;i<8;i++) { P1=ledtab[i]; delay(20000); } //1~8号灯依次闪烁 for(i=0;i<8;i++) { P1=ledtab[7-i];

delay(2000); } // 8~1号灯依次闪烁 } } */ /*#include #include #define uint unsigned int #define uchar unsigned char void delay(uint z); void main() { uint i; uchar a; P1=0xfe; while(1) { a=P1; for(i=1;i<=10;i++) {delay(300); P1=0xff;

delay(300); P1=a; } P1=_crol_(P1,1); } } void delay(uint z) {uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } */ //依次闪烁10次后,循环点亮 /* #include #include #define uint unsigned int void delay(uint z); void main() { while(1){ P1=0xf0; delay(1000);

8个LED灯循环闪烁课程设计

摘要 “微机原理与接口技术”是高等学校电子信息工程、通信工程、自动化、电气工程及其自动化等工科电气与电子信息类各专业的核心课程。该课程以INTER 8086微处理器和IBM PC系列微机为主要对象,系统。深入地介绍了微型计算机的基本组成、工作原理、接口技术及应用,把微机系统开发过程中用到的硬件技术和软件技术有机地结合起来。 本文详述了8个LED灯循环闪烁的课程设计。设置8个LED灯,首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。然后是2、4、6、8号LED 依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。 本课程设计,由于自身能力和学习水平有限,可能存在一定的错误和不当之处,敬请批评和指正。 一、设计目的 1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件; 2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力; 3.进一步了解8255A各引脚的功能, 8255A和系统总线之间的连接, 8255A和CPU 之间的数据交换,以及8255A的内部逻辑结构。深入掌握8255A显示电路的基本功能及编程方法,8255等芯片的工作方式、作用。 4.培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。 二、设计内容 根据所学内容和对8255A的应用,整个系统硬件采用8086微处理器和8255A可编程并行接口芯片和8个LED等连成硬件电路。设计8个LED灯,实现如下要求:首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。然后是2、4、6、8号LED依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。 三、设计要求 使用8255A可编程接口芯片实现8个LED灯以十种不同的方式显示。画出硬件电路图,能在PROTEUS中模拟实现。

单片机控制LED灯闪烁原理

一、电路图 二、原理 对于较长时间的定时,应采用复合定时的方法。这里使T/C0工作在定时器方式1,定时100ms,定时时间到后P1.0反相,即P1.0端输出周期200ms的方波脉冲。另设T/C1共作的计数器方式2,对T1输出的脉冲计数,当计数满5次时,定时1时间到,将P1.7端反相,改变灯的状态! 三、源程序 #include /*头文件的定义*/ sbit P1_0=P1^0; /* 定义p1.0端口*/ sbit P1_7=P1^7; timer0() interrupt 1 using 1 { /* 定时器0的中断服务程序*/ P1_0=!P1_0; /* P1.0取反*/ TH0=(65536-50000)/256; /* 赋高八位初值*/ TL0=(65536-50000)%256; /* 赋低八位初值*/ } timer1() interrupt 3 using 2 { /*定时器1中断服务程序*/ P1_7=!P1_7; /*p1.7取反*/ } main() { /*主函数*/ P1_7=0; /* 置灯初始灭*/ P1_0=1; /* 保证第一次反相便开始计数*/ TMOD=0x61; /* 定时器定时和计数*/ TH0=(65536-50000)/256; /* 赋初值*/ TL0=(65536-50000)%256; /* */ TH1=256-5; TL1=256-5; IP=0x08; /* 设置寄存器优先级*/ EA=1; /* CPU开中断*/ ET0=1; /* 开T/C0中断*/ ET1=1; /* 开T/C1中断*/ TR0=1; /* 启动T/C0 */ TR1=1; /* 启动T/C1 */ for(;;)/* */ { } } 四、Keil调试程序过程与结果: 1.新建一个项目

51单片机LED灯亮灯灭程序设计

1、功能说明:控制单片机P1端口输出,使P1、0位所接的LED点亮,其她7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1, A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2、功能说明:单片机P1端口接8只LED,点亮第1、 3、 4、6、7、8只灯。 程序: 01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02: MOV P1, A ; 点亮灯 03: JMP START ; 重新设定显示值 04: END ; 程序结束 3、功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。程序: 01: START: MOV R0, #8 ;设左移8次 02: MOV A, #11111110B ;存入开始点亮灯位置 03: LOOP: MOV P1, A ;传送到P1并输出 04: RL A ;左移一位 05: DJNZ R0, LOOP ;判断移动次数 06: JMP START ;重新设定显示值 07: END ;程序结束 4、功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。程序: 01: START: MOV R0, #8 ;设右移8次 02: MOV A, #01111111B ;存入开始点亮灯位置 03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序 05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数 07: JMP START ;重新设定显示值 08: DELAY: MOV R5,#50 ; 09: DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ; 11: DJNZ R7,$ ; 12: DJNZ R6,DLY2 ; 13: DJNZ R5,DLY1 ; 14: RET ;子程序返回 15: END ;程序结束 5、功能说明:单片机P1端口接8只LED,每次点亮一只,先把右边的第一只点亮,0、5秒后点亮右数的第二只灯,第一只熄灭,再过0、5秒点亮右数的第三只灯,第二只熄灭,…亮灯按此顺序由右向左移动。当亮灯移到左侧后,开始与上述反方向移动,即亮灯由左向右移动,重复循环。 程序:

实验一LED灯闪烁

单片机小系统设计与制作实验报告 姓名:李文浩 学号:1423102 班级:14级电仪维 指导教师:陈雪莲

实验一八个LED灯闪烁 一、实验要求 仿照图1-1在Proteus中绘制一个基于AT89C51单片机控制八个LED灯进行闪烁。 现象: 八个LED灯闪烁,为黄灯; 图1-1 八个LED灯闪烁电路图 二、实验目的 (1)学会使用Proteus ISIS绘制硬件电路图,掌握加载程序和仿真运行等基本操作。 (2)掌握c语言里调用延时子程序的方法。 (3)掌握proteus的工程建立,仿真,调试。 (4)学会如何在Proteus ISIS上放置元件和连线。 (5)学会如何在Proteus ISIS加载目标代码。 三、实验步骤 1、在Proteus ISIS中设计硬件电路 (1)创建文件名“123”保存在对应的文件夹“E:\123"下。 (2)利用关键字或分类检索的方法将电路原理图中需要的元器件挑选至对象选择列表,主要元件可参照表1-1,然后依次选中在设计区单击,放入电路图。

(3)从模型选择工具栏的终端(Terminal)模型中将地线端子(Ground)和电源端子(Power)放置到电路中。 (4)连接电路原理图,可参考图1-1。 表1-1 (1)启动Keil uVision2软件,创建新工程:123,CPU选择Atmel 89C51。 (2)创建文件,以c为扩展名保存。 (3)执行“Source”菜单下的“Add”命令添加程序“123.c”。 (4)对工程的属性进行设置:目标属性中选择“生成HEX文件” (5)编写源程序,进行汇编/编译、调试。 3、仿真运行 启动Proteus ISIS,打开电路图“123.DSN”,单片机属性中选择目标文件123.HEX,然后进行仿真运行,操作电路中的开关,观察运行结果。 4、程序 #include void delay(unsigned char x); void main() { while(1) { P1=0; delay(1000); P1=0xff; delay(1000); } } void delay(unsigned char x) { unsigned char t;while(x--) for(t=0;t<255;t++); }

LED灯闪烁控制

太原理工大学 单片机原理与应用技术课程实验报告 专业班级 学号 姓名 指导教师

LED 灯闪烁控制 一、实验目的 (1)掌握C语言、汇编语言编写单片机控制程序的方法; (2)掌握使用Keil C软件编写、编译、调试程序的方法; (3)掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试; (4)理解LED灯控制电路原理和延时程序的编写。 二、实验硬件和软件 计算机1台,并安装Proteus软件和Keil C51软件。 三、实验任务 在单片机I/O口上外接一个发光二极管LED,通过程序实现LED闪烁显示,即不停地一亮一灭,亮、灭持续时间均为0.2秒。 四、实验电路及分析 实验电路如图所示,在P1.7口(也可选择其它端口)外接一个发光二极管D1,分析可知P1.7输出“0”时,D1点亮,P1.7输出“1”时D1熄灭。 LED 灯闪烁控制电路图

五、实验程序编写 1.程序编写 (1)C语言程序 #include sbit D1=P1^7; void Delayms(unsigned int n) { unsigned int i, j; for(j=n; j>0;j--) for(i=112; i>0; i--); } int main( ) { while(1) { D1=0; Delayms(200); D1=1; Delayms(200); } } (2)程序流程图

六、实验步骤 1.利用Proteus软件绘制仿真电路图 (1)打开Proteus软件,File→New Project进入工程创建向导,选择项目文件存放路径,项目文件名为“实验1.pdsprj”。 (2)创建原理图(schematic),默认模板为default,可根据电路规模选择合适的图纸大小。 (3)选择“Do not create a PCB layout”,即不绘制PCB图。 (4)选择第一项“No Firmware Project”,即不在Proteus平台下创建源程序。需要在Keil C环境下编写源程序并成功编译生成hex文件,然后加载到Proteus 仿真电路的单片机上。 (5)工程创建向导结束,配置情况确认。 (6)点击“P”按钮在器件库中搜索并添加电路中所需要的器件。 (7)根据电路图将器件放置到绘图区并合理布局,右键单击器件弹出快捷菜单,可以进行旋转、镜像、修改参数(如电容、电阻大小、晶振频率)等操作,双击器件也可以打开参数设置对话框,例如电容C1的设置对话框,将电容参数设置为30pF。

单片机八个灯闪烁控制程序

#include #define uchar unsigned char uchar flag,m,n,light,i; void delay05s(void) { uchar i,j,k; for(i=0;i<10;i++) for(j=200;j>0;j--) for(k=200;k>0;k--); } void delay10s() { uchar i,k; for(i=20;i>0;i--) for(k=100;k>0;k--); } void left() { light=0x01; for(m=0;m<8;m++) { P1=~light; light=light<<1; delay05s(); } } void right() { light=0x80; for(n=0;n<8;n++) { P1=~light; light=light>>1; delay05s(); } } void huayang() { unsigned char code huayang[8]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0x00}; for(i=0;i<8;i++) { P1=huayang[i]; delay05s(); }

} void main() { IT0=1; EX0=1; EA=1; flag=0; light=0x01; i=0; while(1) { switch(flag) { case 0:left();break; case 1:right();break; case 2:huayang();break; } } } void int0() interrupt 0 using 0 { delay10s(); if(INT0==0) { flag++; if(flag==3) flag=0; } }

51单片机:LED灯亮灯灭程序设计

1.功能说明:控制单片机P1端口输出,使位所接的LED点亮,其他7只灯熄灭。程序: 01: MOV A , #B ; 存入欲显示灯的位置数据 02: MOV P1, A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序: 01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02: MOV P1, A ; 点亮灯 03: JMP START ; 重新设定显示值 04: END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01: START: MOV R0, #8 ;设左移8次 02: MOV A, #B ;存入开始点亮灯位置 03: LOOP: MOV P1, A ;传送到P1并输出 04: RL A ;左移一位 05: DJNZ R0, LOOP ;判断移动次数 06: JMP START ;重新设定显示值 07: END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01: START: MOV R0, #8 ;设右移8次 02: MOV A, #01111111B ;存入开始点亮灯位置

03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序 05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数 07: JMP START ;重新设定显示值 08: DELAY: MOV R5,#50 ; 09: DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ; 11: DJNZ R7,$ ; 12: DJNZ R6,DLY2 ; 13: DJNZ R5,DLY1 ; 14: RET ;子程序返回 15: END ;程序结束 5.功能说明:单片机P1端口接8只LED,每次点亮一只,先把右边的第一只点亮,秒后点亮右数的第二只灯,第一只熄灭,再过秒点亮右数的第三只灯,第二只熄灭,…亮灯按此顺序由右向左移动。当亮灯移到左侧后,开始与上述反方向移动,即亮灯由左向右移动,重复循环。 程序: 01: START: MOV R0, #8 ;设左移8次 02: MOV A,#0FEH ;存入开始亮灯位置 03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序 05: RL A ;左移一位 06: DJNZ R0, LOOP ;判断移动次数 07: MOV R1, #8 ;设右移8次 08; LOOP1: RR A ;右移一位 09: MOV P1, A ;传送到P1并输出

单片机c语言闪烁灯程序

1.闪烁灯 1.实验任务 如图4.1.1 所示:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮 灭,一亮一灭的时间间隔为0.2 秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0 端口用导线连接到“八路发光二极管指示 块”区域中的L1 端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 2 如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒 机器周期微秒 MOV R6,#20 2 个机器周期2 D1: MOV R7,#248 2 个机器周期2 2+2×248=498 20× DJNZ R7,$ 2 个机器周期2×248 498 DJNZ R6,D1 2 个机器周期2×20=40 10002 因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时10ms,以此为基本的计时单位。如本实验要求0.2 秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管 的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平, 即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0 端口输出高电平,使用CLR P1.0 指令使P1.0 端口输出低电平。 5.程序框图 如图4.1.2 所示 3 图4.1.2 6.汇编源程序 ORG 0 START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2 秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$

Arduino入门教程(2)—LED灯闪烁

Arduino 入门教程(2)—LED 灯闪烁 回顾一下 Lesson 1 的内容,我简单分了以下几点: 了解 Arduino 软件编辑环境-- Arduino IDE 如何通过 Arduino IDE 下载一个 Blink 程序 "//" 和"/*...*/"的含义 setup()和 loop()函数的重要性及作用 pinMode(pin,mode)函数 digitalWrite(pin,value)函数 delay(ms)函数 开始新的一课! 这次我们还是同样要用 Blink 程序,有所不同的是,这里我们需要外接一个 LED 到数字引脚,而不是使用焊在 Arduino 板上的 LED 13(也就是“L”灯)。便于我们能清晰的认识 LED 的工作原理及一些硬件电路的搭建。 STEP 1:需要准备的东西: 1 ×DFduino UNO R3(以及配套 USB 数据线)

STEP 2:硬件连接 首先,从我们的套件中取出 Prototype shield 扩展板和面包板,将面包板背面的双面胶歇下,粘贴到 Prototype shield 扩展板上。再取出 UNO,把贴有面包板 Prototype shield 扩展板插到 UNO 上。取出所有元件,按照下图连接。

图中的蓝色与红色的线用彩色面包线连接,使用面包板上其他孔也没关系,只要元件和线的连接顺序与上图保持一致即可。 确保 LED 连接是否正确的,LED 长脚为+,短脚为-,完成连接后,给 Arduino 接上 USB 数据线,供电,准备下载程序。 STEP 3:输入代码 打开 Arduino IDE,在编辑框中输入样例代码 1-1 所示代码。(输入代码也是一种学习编程的过程,虽然提供代码的压缩包,但还是建议初学者自己输入代码,亲身体验一下。) 样例代码1-1: 1. 3. 描述:LED 每隔一秒交替亮灭一次 5. int ledPin = 10; 6. void setup() { 8. } 9. void loop() { 14. } 15. 输入完毕后,点击 IDE 的“校验(Verify)”,查看输入代码是否通过编译。如果显示没有错误,单击“下载(UpLoad)”,给 Arduino 下载代码。以上每一步都完成了的话,你应该可以看到面包板上的红色 LED 每隔一秒交替亮灭一次。

51单片机交通灯程序及PROTEUS仿真 集合

51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序)2010-04-21 22:01 CONTROL EQU 7FFFH PORTA EQU 7FFCH ORG 0 START: MOV DPTR,#7FFFH MOV A,#80H MOVX @DPTR,A MOV DPTR,#7FFCH MOV A,#0FFH MOVX @DPTR,A LOOP: MOV A,#21H MOV DPTR,#7FFCH MOVX @DPTR,A ;东西红,南北绿 CALL DELAYLONG MOV A,#11H MOV DPTR,#7FFCH MOVX @DPTR,A ;三次闪烁 CALL DELAYSHORT MOV A,#01H MOV DPTR,#7FFCH MOVX @DPTR,A

CALL DELAYSHORT MOV A,#11H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#01H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#11H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#01H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#0CH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYLONG MOV A,#0AH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#08H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#0AH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#08H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#0AH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT MOV A,#08H

单片机c语言闪烁灯程序

单片机c语言闪烁灯程 序 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

1.闪烁灯 1.实验任务 如图所示:在端口上接一个发光二极管L1,使L1 在不停地一亮灭,一亮一灭的时间间隔为秒。 2.电路原理图 图系统板上硬件连线把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示 块”区域中的L1 端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要

求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢下面具体介绍其原理: 2 如图所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒 机器周期微秒 MOV R6,#20 2 个机器周期2 D1: MOV R7,#248 2 个机器周期2 2+2×248=498 20× DJNZ R7,$ 2 个机器周期2×248 498 DJNZ R6,D1 2 个机器周期2×20=40 10002 因此,上面的延时程序时间为。 由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时, 延时10ms,以此为基本的计时单位。如本实验要求秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$

DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1 所示,当端口输出高电平,即=1 时,根据发光二极管 的单向导电性可知,这时发光二极管L1 熄灭;当端口输出低电平,即=0 时,发光二极管L1 亮;我们可以使用SETB 指令使 端口输出高电平,使用CLR 指令使端口输出低电平。 5.程序框图 如图所示 3 图汇编源程序 ORG 0 START: CLR LCALL DELAY

c51闪烁一个led灯的程序

P14插针是8个LED的输出插针,使用8P杜邦线从P14的8个插针连接到单片机P1口。 /*----------------------------------------------- 内容:点亮P1口的1个LED灯闪烁 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit L1=P1^0;// 用sbit 关键字定义L1到P1.0端口, //LED是自己任意定义且容易记忆的符号 void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 while (1) //主循环 { L1=0; //将P0.0口赋值0,对外输出低电平 Delay(10000); //调用延时程序;更改延时数字可以更改延时长度; //用于改变闪烁频率 L1=1; //将P0.0口赋值1,对外输出高电平 Delay(10000); //主循环中添加其他需要一直工作的程序 } } /*------------------------------------------------ 延时函数,含有输入参数unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); }

LED灯闪烁程序

1.闪烁灯程序 MOV R6,#20 2 个机器周期2 D1: MOV R7,#248 2个机器周期2 2+2×248=498 20× DJNZ R7,$ 2 个机器周期2×248 498 DJNZ R6,D1 2 个机器周期2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时10ms,以此为基本的计时单位。如本实验要求0.2 秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管 的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平,即P1.0=0时,发光二极管L1 亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0 指令使P1.0 端口输出低电平。 5.程序框图 如图4.1.2所示 3 图4.1.2 6.汇编源程序 ORG 0 START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2 秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 7.C 语言源程序 #include sbit L1=P1^0;

相关文档
最新文档