闪烁灯程序
stc8h案例程序
stc8h案例程序摘要:一、STC8H案例程序简介1.STC8H系列单片机简介2.案例程序的作用和意义二、STC8H案例程序实例1.程序实例一:点亮单个LED灯2.程序实例二:流水灯效果3.程序实例三:按键控制LED灯闪烁三、STC8H案例程序实现步骤1.准备工具和材料2.编写程序代码3.下载程序至单片机4.测试程序效果四、STC8H案例程序的拓展应用1.实现更多种控制方式2.与其他元件连接实现复杂功能正文:一、STC8H案例程序简介STC8H是一款高性能、低功耗的8位单片机,广泛应用于各种嵌入式系统中。
为了帮助开发者更好地了解和掌握STC8H单片机的编程,这里提供了一些STC8H案例程序,通过实例演示了如何使用STC8H单片机实现简单的功能。
二、STC8H案例程序实例1.程序实例一:点亮单个LED灯此实例通过STC8H单片机控制一个LED灯的点亮和熄灭,以验证单片机的基本功能。
2.程序实例二:流水灯效果此实例通过STC8H单片机控制多个LED灯的流水灯效果,展示了单片机在并发控制方面的能力。
3.程序实例三:按键控制LED灯闪烁此实例通过STC8H单片机读取按键输入,控制LED灯的闪烁频率,实现了简单的交互功能。
三、STC8H案例程序实现步骤1.准备工具和材料需要准备的工具和材料有:STC8H单片机开发板、LED灯、按键、杜邦线、下载器等。
2.编写程序代码根据实例要求,编写相应的程序代码。
这里需要注意合理地设置单片机的工作模式,以及正确地配置相关寄存器。
3.下载程序至单片机将编写好的程序通过下载器下载至STC8H单片机中。
4.测试程序效果将程序下载至单片机后,观察实例功能是否实现。
如发现问题,检查程序代码并进行修改。
四、STC8H案例程序的拓展应用1.实现更多种控制方式在掌握基本实例的基础上,可以尝试实现更多种控制方式,如通过串口通信、定时器控制等。
2.与其他元件连接实现复杂功能将STC8H单片机与其他传感器、执行器等元件连接,实现更复杂的功能,如环境监测、智能家居等。
简单的STM32汇编程序—闪烁LED
简单的STM32汇编程序—闪烁LED要移植操作系统,汇编是道不得不跨过去的坎。
所以承接上篇的思路,我准备⽤汇编写⼀个简单的闪烁LED灯的程式。
以此练习汇编,为操作系统做准备。
第⼀步,还是和上篇⼀样,建⽴⼀个空的⽂件夹。
第⼆步,因为是要⽤汇编来写程式,所以不需要启动代码,这⾥选择否。
第三步,建⽴⼀个.s⽂件,并把⽂件添加到⼯程中。
第四步,在LED.s⽂件中添加如下代码。
LED0 EQU 0x422101a0RCC_APB2ENR EQU 0x40021018GPIOA_CRH EQU 0x40010804Stack_Size EQU 0x00000400AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_spAREA RESET, DATA, READONLY__Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerAREA |.text|, CODE, READONLYTHUMBREQUIRE8PRESERVE8ENTRYReset_HandlerBL LED_InitMainLoop BL LED_ONBL DelayBL LED_OFFBL DelayB MainLoopLED_InitPUSH {R0,R1, LR}LDR R0,=RCC_APB2ENRORR R0,R0,#0x04LDR R1,=RCC_APB2ENRSTR R0,[R1]LDR R0,=GPIOA_CRHBIC R0,R0,#0x0FLDR R1,=GPIOA_CRHSTR R0,[R1]LDR R0,=GPIOA_CRHORR R0,R0,#0x03LDR R1,=GPIOA_CRHSTR R0,[R1]MOV R0,#1LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_ONPUSH {R0,R1, LR}MOV R0,#0LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}LED_OFFPUSH {R0,R1, LR}MOV R0,#1LDR R1,=LED0STR R0,[R1]POP {R0,R1,PC}DelayPUSH {R0,R1, LR}MOVS R0,#0MOVS R1,#0MOVS R2,#0DelayLoop0ADDS R0,R0,#1CMP R0,#330BCC DelayLoop0MOVS R0,#0ADDS R1,R1,#1CMP R1,#330BCC DelayLoop0MOVS R0,#0MOVS R1,#0ADDS R2,R2,#1CMP R2,#15BCC DelayLoop0POP {R0,R1,PC}; NOPEND///////////////////////////////////////////////////////代码的简单讲解1,预定义LED0 EQU 0x422101a0 ;PA8的Bit-Bond地址。
流水灯程序
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次;关闭发光管,程序停止。
#include<>#include<>#define uchar unsigned char#define uint unsigned intuchar temp,a;uint i,j;sbit beep=P2^3;void delay(int);void main(){while(1){for(i=0;i<10;i++){P1=0xfe;delay(150);P1=0xff;delay(150);}temp=0xfe;for(i=0;i<16;i++){P1=temp;beep=0;delay(380);P1=0xff;temp=_crol_(temp,1);beep=1;delay(380);}for(j=0;j<2;j++){temp=0xfe;for(i=0;i<8;i++){P1=temp;beep=0;delay(80);temp=_crol_(temp,1);P1=0xff;beep=1;delay(80);}temp=0xbf;for(i=0;i<7;i++){P1=temp;beep=0;delay(80);temp=_cror_(temp,1);P1=0xff;beep=1;delay(80);}}a=0x00;for(i=0;i<256;i++){P1=~a;a++;delay(500);}for(i=0;i<2;i++){temp=0xfe;for(i=0;i<8;i++){P1=temp;delay(150);temp=_crol_(temp,1);P1=0xff;delay(150);}temp=0xbf;for(i=0;i<7;i++){P1=temp;delay(150);temp=_cror_(temp,1);P1=0xff;delay(150);}}P1=0xff;for(i=0;i<10;i++){P1=~P1;delay(170);}temp=0xfe;j=0;for(i=0;i<8;i++){j++;P1=temp;delay(150);temp=_crol_(temp,a);P1=0xff;delay(150);}temp=0xfe; //赋初值for(j=0;j<8;j++){for(i=0;i<8-j;i++) //左移{P1=temp; //点亮小灯delay(150); //延时200毫秒temp=_crol_(temp,1); //将a变量循环左移一位}temp=_crol_(temp,j); //补齐,方便下面的左移一位P1=0xff; //全部关闭temp=temp<<1; //左移一位让多一个灯点亮}for(i=0;i<3;i++){P1=0xaa; //delay(150);P1=~P1;delay(150);}for(j=0;j<3;j++){temp=0xfe;for(i=0;i<8;i++){P1=temp;delay(100);temp=_crol_(temp,1);}temp=0xbf;for(i=0;i<7;i++){P1=temp;delay(100);temp=_cror_(temp,1);}}for(j=0;j<3;j++){temp=0xfe;a=0x7f;for(i=0;i<5;i++){P1=temp&a;delay(100);temp=_crol_(temp,1); a=_cror_(a,1);}}for(j=0;j<3;j++){temp=0xef;a=0xf7;for(i=0;i<5;i++){P1=temp&a;delay(100);temp=_crol_(temp,1); a=_cror_(a,1);}}for(j=0;j<3;j++) {P1=0x00;delay(380);P1=0xff;delay(380);}}}void delay(int z){int x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);}。
单片机程序大全
单片机程序大全(以下是一个以“单片机程序大全”为题目的文章范例,依据题目性质并非一个合同或作文的格式。
请注意,这个范例只是为了明示写作格式的变化,并非提供一个实际的单片机程序大全。
)单片机程序大全本文将为大家提供一个全面的单片机程序大全,涵盖了各种常见的单片机应用。
希望本文能够对单片机程序的学习和实践有所帮助。
一、LED灯程序LED灯是一个常见的单片机实验项目。
以下是一个基本的LED灯闪烁程序的代码,使用C语言编写:```c#include <reg51.h>#define LED P0void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {LED = 0xFF; // 所有LED灯亮delay(1000); // 延时1秒LED = 0x00; // 所有LED灯灭delay(1000); // 延时1秒}}```二、温度监测程序单片机可以用于温度监测,以下是一个简单的温度监测程序的代码示例,使用C语言编写:```c#include <reg51.h>#define TEMP P1void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {if (TEMP > 30) {P0 = 0x01; // 温度过高,亮起警示灯 } else {P0 = 0x00; // 温度正常,灭掉警示灯 }delay(100); // 延时0.1秒}}```三、电机控制程序单片机常用于电机控制,以下是一个电机正反转控制程序的代码示例,使用C语言编写:```c#include <reg51.h>#define MOTOR P2void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {MOTOR = 0x01; // 电机正转delay(1000); // 延时1秒MOTOR = 0x02; // 电机反转delay(1000); // 延时1秒}}```以上仅是三个简单的单片机程序示例,单片机的应用非常广泛,包括但不限于LED灯闪烁、温度监测、电机控制等。
proteus控制led灯闪烁的简单电路及程序
文章标题:Proteus控制LED灯闪烁的简单电路及程序一、引言Proteus是一款广泛用于电子电路仿真的软件,通过Proteus,我们可以方便地进行电路设计、仿真和调试。
在本文中,我们将探讨如何使用Proteus搭建一个简单的电路,实现对LED灯的闪烁控制,并给出相应的程序设计。
LED灯的闪烁控制是电子电路设计中的常见问题,我们希望通过本文的介绍,能够让大家更好地理解这一问题并掌握解决方法。
二、Proteus控制LED灯闪烁的简单电路设计1. 硬件部分设计在Proteus中搭建一个简单的LED灯闪烁控制电路,首先需要准备以下器件:Arduino开发板、LED灯、220欧姆电阻、面包板等。
具体的电路连接如下:将Arduino的数字引脚13接到LED的正极,将LED的负极接到220欧姆电阻,再将220欧姆电阻的另一端接到Arduino的地端。
在面包板上按照连接关系进行连线。
2. 软件部分设计接下来,我们需要在Proteus中进行程序设计。
首先打开Arduino IDE,编写以下简单的程序:```cvoid setup() {pinMode(13, OUTPUT);}void loop() {digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);delay(1000);}```该程序的作用是让数字引脚13上的LED灯每隔1秒闪烁一次。
接下来将该程序上传到Arduino开发板上,并在Proteus中进行仿真。
三、探讨LED灯闪烁控制的深入理解通过以上的简单电路设计与程序实现,我们实现了对LED灯的闪烁控制。
不过,LED灯的闪烁控制涉及到的知识远不止这些。
从电路设计的角度来看,我们还可以通过PWM控制LED灯的亮度和闪烁频率,实现更丰富的效果。
从程序设计的角度来看,我们还可以通过Arduino的定时器中断等功能,优化LED灯的闪烁控制程序,提高程序的灵活性和可扩展性。
c语言灯闪烁代码
c语言灯闪烁代码
在C语言中,没有直接的方式来控制硬件设备,如LED灯。
然而,如果你在某种特定环境下编程(比如一个微控制器),那么你可以通过特定方式来实现这种控制。
例如,你可能需要通过向特定I/O端口写入数据来控制LED的开/关。
以下是一个简单的示例,假设我们有一个LED连接到端口P1.0,我们可以通过以下代码来控制LED的闪烁:
#include <stdio.h>
#include <unistd.h>
#define LED_PIN P1_0 // 假设LED连接到P1.0
int main() {
while(1) {
// 打开LED
LED_PIN = 1;
// 等待一段时间
usleep(500000); // 500,000 microseconds = 0.5 seconds
// 关闭LED
LED_PIN = 0;
// 再等待一段时间
usleep(500000); // 500,000 microseconds = 0.5 seconds
}
return 0;
}
这个程序会使LED以0.5秒的频率闪烁。
注意,usleep函数用于暂停程序执行一段时间,单位是微秒。
LED_PIN = 1;使LED打开,而LED_PIN = 0;使LED关闭。
你需要将这些替换为实际硬件平台的相应代码。
另外,这个代码是一个无限循环,它会一直运行直到你强制停止它。
在实际应用中,你可能需要添加一些逻辑来在特定条件下停止循环。
PLC实训08---灯光闪烁的PLC控制
图1-8-6 计数器与定时器的组合应用
PLC原理及应用
模块1 入门应用模块
项目知识准备
项目8 灯光闪烁的PLC控制
2.通用计数器的应用
④计数器与闪烁电路的组合应用 图1-8-7是计数器与闪烁电 路组合实现闪烁3次的程序。
图1-8-7 计数器与闪烁电路的组合应用
PLC原理及应用
模块1 入门应用模块
模块1 入门应用模块
项目八 灯光闪烁的PLC控制
PLC原理及应用
模块1 入门应用模块
目标与要求
项目8 灯光闪烁的PLC控制
● 掌握通用计数器的使用。 ● 掌握用PLC编制灯光闪烁的程序。
PLC原理及应用
模块1 入门应用模块
项目描述
项目8 灯光闪烁的PLC控制
灯光的闪烁广泛应用于我们的日常生活,如霓虹灯、 舞台灯光的闪烁、居家的彩灯、节日彩灯、广告彩灯、报 警器等。
项目知识准备
1、计数器C的类型
项目8 灯光闪烁的PLC控制
FX2N系列计数器分为通用计数器和高速计数器两类。 通用计数器用于对变化缓慢的内部信号(如X、Y、M、S、 T等)进行计数,该信号的接通和断开时间应比PLC的扫 描周期稍长。当信号变化比较快时,应使用高速计数器 进行计数。
PLC原理及应用
模块1 入门应用模块
项目实施
(一)确定PLC的I/O分配表
输入端(I)
外接元件
输入端子
启动按钮SB1
X0
停止按钮SB2
X1
项目8 灯光闪烁的PLC控制
输出端(O)
外接元件 输出端子
彩灯L1
Y1
彩灯L2
Y2
彩灯L3
ห้องสมุดไป่ตู้Y3
单片机 C语言闪烁灯
Void delay() { Unsigned int i,j;
for(i=0;i<1000;i++) for(j=0;j<115;j++); }
总结
For、while循环使用
1s的延时程序
仿真实验
程序的完整性
作业
1
编写C语言程序实 现一个发光二极管 以600ms的时间间 隔闪烁。
2
编写C语言程序实 现一个发光二极管 以1s亮,500ms灭 循环闪烁。
把程序补充完整仿真得到实验结果
#include<reg52.h> void delay( ); sbit led1=P1^0; void main( ) { while(1) { led1=0; Delay( ); led1=1; Delay( ); }
编写编写cc语言程序实现一个发语言程序实现一个发光二极管以光二极管以1s1s的时间间隔闪的时间间隔闪1s的时间控制1s1000ms1ms循环115次指令周期for循环指令周期while循环1ms循环115次cpu处理一条指令的时间for循环ccwhile循环分小组分别用分小组分别用forfor和和whilewhile实现实现115115次次循环空语句的程序循环空语句的程序分小组分别用分小组分别用forfor和和whilewhile实现实现10001000次循环次循环1ms1ms程序语句的程序程序语句的程序1ms循环115次1ms循环115次1s1000msfor循环1ms1mswhile循环voiddelayintvoiddelayinti115
3
仿真得到实验结果
课堂评价
使用按键自动控制LED闪烁及蜂鸣器鸣叫—LED闪烁与蜂鸣器鸣叫程序编写
本次任务与前面所使用的按键控制LED灯亮灭有什么区别?
2 工作任务
(1)第一次按下按钮,LED灯持续闪亮,蜂鸣器鸣叫 (2)第二次按下按钮,LED灯熄灭,蜂鸣器停止鸣叫; (3)以后根据按键次数一直重复步骤1和2的现象。
3 知识准备: 蜂鸣器
1、作用:蜂鸣器是一种一体化结构的电子讯响器,广泛 应用于计算机、打印机、复印机、报警器、电话机等电 子产品中作发声器件
int main()
{int num=0;
//按键次数记录(初值赋0)
while ( 1 )
{if( k==0)
{delay(1000);
//延时重新判断按键是否按下,
延时消除抖动
if( k==0)
{num++;
if(num==1) flasher ();
buzzer();
if(num==2)num=0;
#define uint unsigned int
#define uchar unsigned char
sbit k=P1^1;
//定义P1.1引脚名为独立按键k
sbit led=P1^0;
//定义P1.0引脚名led
sbit buzzer=P2^0;
//定义P2.0引脚名为buzzer
/*延时函数*/
5
编写程序
(1)任务分析
① 程序流程图
说明:因为按一次为奇 数次点亮和鸣叫,按第 二次为偶数次熄灭和停 止鸣叫,以后一直循环, 所以可以通过判断按键 次数是奇数还是偶数来 控制LED灯和蜂鸣器
② 端口分配
单片机端口
驱动模块端口
P1.0
LED1
单片机汇编程序代码(闪烁灯、流水灯、蜂鸣器、点阵)
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
;TP0: DB 00H,3CH,42H,42H,42H,42H,3CH,00H ;圆形
;TP2: DB 07Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEh
END
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
一、闪烁灯
ORG 0000H
AJMP MAIN
ORG 0030H
一年级综合专项练习题简单编程思维
一年级综合专项练习题简单编程思维在一年级的学习过程中,编程思维是一项重要的技能。
通过编程,学生可以培养逻辑思维、解决问题的能力以及创造力。
本文将针对一年级学生,提供一些简单的编程练习题,帮助他们培养编程思维。
1. 闪烁的灯泡题目描述:写一个程序,让一个灯泡以一定的速度闪烁。
当灯泡亮起时,等待一段时间后熄灭,并等待一段时间后再次亮起。
重复这个过程。
解题思路:```pythonfrom microbit import *while True:display.show(Image.YES) # 显示亮起灯泡sleep(500) # 等待500毫秒display.show(Image.NO) # 显示熄灭灯泡sleep(500) # 等待500毫秒```2. 数字闪烁题目描述:编写一个程序,在屏幕上交替显示数字1和数字2,并以一定的速度闪烁。
解题思路:```pythonfrom microbit import *while True:display.show('1') # 显示数字1sleep(500) # 等待500毫秒display.clear() # 清空屏幕sleep(500) # 等待500毫秒display.show('2') # 显示数字2sleep(500) # 等待500毫秒display.clear() # 清空屏幕sleep(500) # 等待500毫秒```3. 按钮控制灯泡题目描述:编写一个程序,当按下按钮A时,亮起灯泡;当按下按钮B时,熄灭灯泡。
解题思路:```pythonfrom microbit import *while True:if button_a.is_pressed(): # 当按钮A被按下display.show(Image.YES) # 亮起灯泡elif button_b.is_pressed(): # 当按钮B被按下display.show(Image.NO) # 熄灭灯泡else:display.clear() # 清空屏幕```4. 变化的表情题目描述:编写一个程序,让一个笑脸表情逐渐变大,然后再逐渐变小。
led闪烁代码
led闪烁代码
LED闪烁代码是一种程序代码,用于控制LED灯的闪烁效果。
通过对LED灯的亮度和间隔时间的控制,可以实现不同的闪烁效果,比如单闪、双闪、呼吸灯等。
LED闪烁代码通常使用微控制器或单片机来实现。
常见的微控制器包括Arduino、Raspberry Pi等。
在编写代码时,需要对LED灯的引脚进行设置,并设置闪烁的模式和参数。
例如,在Arduino中,我们可以使用digitalWrite()函数来控制LED灯的引脚。
以下是一个简单的LED单闪代码示例:
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 设置LED灯的引脚为输出模式
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // 将LED灯的引脚电平设为高
delay(1000); // 等待1秒
digitalWrite(LED_BUILTIN, LOW); // 将LED灯的引脚电平设为低
delay(1000); // 等待1秒
}
上述代码中,LED_BUILTIN是Arduino内置的LED引脚,通过
digitalWrite()函数来控制LED灯的亮度和间隔时间,实现单闪效果。
LED闪烁代码可以广泛应用于电子产品、汽车灯光、舞台灯光等领域。
通过不同的闪烁效果,可以实现不同的场景和氛围,增强产品的可视性和吸引力。
点灯blinker简介
点灯blinker简介
点灯blinker是一款自动切换LED灯的微控制器程序,它可以
让LED灯在短时间内快速闪烁。
点灯blinker的主要作用是增
加LED灯的可见性和吸引力,以便在特定场合引起注意。
该
程序特别适用于安全设备,警告标志,车辆前照灯,舞台照明等方面。
该程序可以通过简单的电路实现,并且易于调整和修改。
点灯blinker已成为电子爱好者和制造商广泛使用的程序
之一。
点灯blinker的实现原理非常简单,使用了微控制器内置的定
时器和计数器模块来计算LED灯的闪烁周期。
该程序的编写
使用了循环、延迟等基本编程技巧,能够让使用者更好地了解编程和电子设计的基本原理。
此外,点灯blinker可以进一步
扩展增加一些特殊功能,例如调节LED灯亮度、控制多个
LED灯、以及配合传感器使用等等。
点灯blinker的应用范围非常广泛,可以用于各种领域和场合。
例如,用于汽车的闪烁尾灯、速度控制器指示灯、安全气囊指示灯等;用于舞台灯光,增加艺术感、在演出中起到视觉效果;用于警示标志、交通安全标示牌、路边框提醒等等。
因此,点灯blinker不仅是一种基础电子设计,同时也是一种实用化设计,经常被用于各种项目的实现中,具有广泛的应用前景。
爆闪灯C51程序知识讲解
爆闪灯C5 1 程序爆闪灯一,电子1,灯闪模式,灯闪模式可调,4个输出端口蓝—红一蓝一红1 2 3 4a, 四路轮流闪烁,频率可调,每路间隔可调,可一路闪,两路闪,三路闪,四路闪可调节例如(12—34—1234)b, 四路变换工作,每路间隔可调,例如(1—2—3—4黄闪灯模式)c, 四路组合变换闪烁,每路间隔可调,例如(1 —2—3—4—12—34—1234)2,输出,电池板,蓄电池,开关的端口采用接线槽(路灯控制器那种接线端子)3,LED—种颜色的数量在45—60PCS之间,电流控制在150mA-600mA 4,电池板在15W 10W 6W5,电池在20Ah,14Ah,8Ah二,结构1,开一套LED反光杯,以提高亮度,2,电池板的方向可灵活调动3, 电池需固定好,不能左右,上下晃动4, 灯板和透明罩可采用插槽式的,以便好组装5, 控制器可以固定在灯壳里面,不能有漏水到上面6, 外壳设计成插槽拼接的,减少螺丝的使用率#in elude <reg51.h>#i nclude vintrin s.h>typedef un sig ned char uchar;typedef un sig ned int uint;sbit P1_0=P1A0;sbit P1_仁 P1A1;sbit P1_4=P1A4;sbit P1_5=P1A5;sbit P1_6=P1A6;sbit P1_7=PM7;sfr P0M0=0X94;sfr P0M仁 0X93;sfr P2M0=0X96;sfr P2M仁 0X95;sfr P1M0=0X92;sfr P1M 1=0X91;sfr IAP_DATA=0XC2;sfr IAP_ADDRH=0XC3;sfr IAP_ADDRL=0XC4;sfr IAP_CMD=0xc5;sfr IAP_TRIG=0XC6;sfr IAP_CONTR=0XC7;un sig ned char lia ng_temp=1;un sig ned char an _temp=1;un sig ned char R_to_B_temp=1;un sig ned char stop_temp=1;un sig ned char mode=1;un sig ned char time_key=0;un sig ned char time_temp=0;un sig ned char mode1_temp=0;uchar ajs,ljs;uchar rtobjs,stopjs,js3c=1;uchar rba=0;bit la=1;ksj=0;void delay20(void) // 误差-0.000000000002usun sig ned char codezhifu0[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x 7C,0x39,0x5E,0x79,0x71};un sig ned char codezhifu2[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0XFe,0Xf6,0Xee,0X 3e,0X9c,0X7a,0X9e,0X8e};〃********************************************************* {un sig ned char a,b,c; for(c=2;c>0;c--) for(b=95;b>0;b--) for(a=209;a>0;a--); }〃*********************************************************void delay500(void) // 误差0us 500ms{un sig ned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}〃*********************************************************void eeprom_erase( un sig ned char a){ _un sig ned int add=512;un sig ned int add1=0;add1=add*a;IAP_ADDRH=add1/255;IAP_ADDRL=add1%255;IAP_CONTR=0X8C;IAP_CMD=0X03;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();〃*********************************************************void eeprom_writer( un sig ned int add, un sig ned char date) { _IAP_DATA=date;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=OX8C;IAP_CMD=2;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();}//*********************************************************** un sig ned char eeprom_read( un sig ned int add) {un sig ned char date=0;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=0X8C;//IAP_CMD=0X01;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();date=IAP_DATA; return(date);}//********************************************************* void show( un sig ned char a){un sig ned char shi;un sig ned char ge;un sig ned char *p;un sig ned char *p1;p=zhifu0;p仁 zhifu2;shi=a/10;shi=*(p+shi);// 得到编码值ge=a%10;ge=*(p1+ge);P0=shi;P2=ge;}〃********************************************************** void lia ng_key(){ _if(!P1_0){delay20();if(!P1_0){lia ng_temp++;if(lia ng_temp>99){lia ng_temp=1;} show(lia ng_temp); while(!P1_0){while(ksj){lia ng_temp++;delay20();if(lia ng_temp>99)lia ng_temp=1;show(lia ng_temp);}_ }}delay20();}}〃***********************************************************void an_ key(){ _if(P1_0==0){delay20();if(P1_0==0){an _temp++;if(an_temp>99){an _temp=1;}show(a n_temp);while(!P1_0){while(ksj){a n_temp++;delay20();if(a n_temp>99)a n_temp=1;show(a n_temp);}}}delay20();}}〃***********************************************************void R_to_B_key(){if(P1_0==0){delay20();if(P1_O==O){R_to_B_temp++;if(R_to_B_temp>99){R_to_B_temp=1;}show(R_to_B_temp);while(!P1_0){while(ksj){R_to_B_temp++;delay20();if(R_to_B_temp>99)R_to_B_temp=1;sh ow(R_to_B_temp);}}}delay20();}}〃***********************************************************void stop_key(){ _if(P1_0==0){delay20();if(P1_0==0){stop_temp++;if(stop_temp>99){stop_temp=1;} show(stop_temp);while(!P1_0){while(ksj){stop_temp++;delay20();if(stop_temp>99)stop_temp=1;show(stoP_temp);}}}delay20();}}〃************************************************************void show_mode( un sig ned char a){ _un sig ned char ge=0;un sig ned char *p1;p仁 zhifu2;ge=*(p1+a);// P0=0x00;P2=ge;}〃************************************************************ void set_mode(){ _if(!P1_0){delay20();TR1=1;〃开定时器if(!P1_0){show_mode(mode);} _while(time_key==0){ _if(!P1_0){delay20();if(!P1_0){mode++;if(mode>5){mode=1;time_temp=0;} _4个步骤第show_mode(mode); delay20();}}TR1=0;〃 关定时器time_key=0;time_temp=0;TH1 = 0x3C;TL1 = 0xB0;eeprom_erase(1);eeprom_writer(0,mode);P0=0;P2=0;rtobjs= R_to_B_temp;stopjs=stop_temp;ajs=a n_temp;ljs=lia ng_temp;rba=0;}}〃*********************************************************** void set_fu n()〃 设置时间的顺序是从亮,暗,红到蓝,停, 个模式{un sig ned char pan dua n=0;if(!P1_1){delay20();if(!P1_1){P0=zhifu0[15];P2=zhifu2[1];delay500();delay500();panduan=1;while(pa ndua n){lia ng_key();show(lia ng_temp);if(!P1_1){delay20();panduan=0;ljs=lia ng_temp; delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[2];delay500();delay500();while(pa ndua n){an_key();show(a n_temp);if(!P1_1){delay20();panduan=0; ajs=a n_temp;delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[3]; delay500(); delay500();while(pa ndua n){ R_to_B_key();show(R_to_B_temp);if(!P1_1){delay20();panduan=0; rtobjs=R_to_B_temp;delay20();}panduan=1;P0=zhifu0[15];P2=zhifu2[4]; delay500(); delay500();while(pa ndua n){stop_key(); show(stop_temp); if(!P1_1) { delay20();panduan=0; stopjs=stop_temp; delay20();}}eeprom_erase(0);eeprom_writer(0,lia ng_temp); eeprom_writer(1,a n_temp);eeprom_writer(2,R_to_B_temp); eeprom_writer(3,stop_temp);P0=0X0;P2=0X0;// red=1;// blue=0;// yq=yq2=0;rtobjs = R_to_B_temp;stopjs = stop_temp;ajs = an _temp;ljs = lia ng_temp;rba=0;}}}〃***********************************************************void mode_out(bit a1,bit a2,bit a3,bit a4)//a 为停留时间,各位为输出值{P1_4=a1;P1_5=a2;P1_6=a3;P1_7=a4;}void redf un(v oid){if(js3c<4){if(la) mode_out(1,0,1,0);else mode_out(0,0,0,0);} _else{mode_out(0,0,0,0);} _}void bluef un(v oid)if(js3c<4){if(la) mode_out(0,1,0,1);else mode_out(0,0,0,0);} _else mode_out(0,0,0,0);} _void allf un(v oid){if(js3c<4){if(la) mode_out(1,1,1,1);else mode_out(0,0,0,0);}else mode_out(0,0,0,0);} _〃***********************************************************void mode1()〃模式1{〃un sig ned char a=0;switch(rba){case 0: redf un() ;break;case 1: bluef un() ;break; case 2: allf un( );break; default:break;}}void mode_work( un sig ned char a)// 参数为模式{ switch(a){case 1: mode1(); break; // 第一种模式case 2: mode1(); break; case 3: mode1(); break; case 4: mode1(); break; case 5: mode1(); break; }}/*void decipherme nt_dog()〃解密完后才能使用本控制器if((P1_O==O)&(P1_1==0)){}} */〃***********************************************************void Ini tTimerl(void){TMOD = 0x11;TH1 = 0x3C;TL1 = OxBO;EA = 1;ET1 = 1;}〃***********************************************************void In itTimerO(void){THO = Oxf2;TLO = Oxfb;ET0 = 1;TRO = 1;}〃***********************************************************mai n(){Ini tTimer1();Ini tTimerO();P0M0=0XFF;〃配成强上拉POM仁0X00;P2M0=0XFF;P2M仁0X00;P1M 仁0X00;P1M0=0XF0;P0=0;P2=0;P1_4=0;P1_5=0;P1_6=0;P1_7=0;lia ng_temp=eeprom_read(0); an _temp=eeprom_read(1);R_to_B_temp=eeprom_read(2); stop_temp=eeprom_read(3); rtobjs= R_to_B_temp; stopjs=stop_temp;ajs=a n_temp; ljs=lia ng_temp;while(1){set_fu n();set_mode(); mode_work(mode);} _}〃********************************************************** void Timer1Interrupt(void) interrupt 3 {TH1 = 0x7d;TL1 = Oxcb;time_temp++;if(time_temp>30){ _time_key=1;} _}〃************************************************************ void TimerOI nterrupt(void) in terrupt 1{// TR0=0;static uchar i=0;static uchar kj=0;TH0 = 0xf2;TL0 = 0xfb;if(js3c<4){if(la) // {Ijs--;if(ljs==0){la=0;ajs=a n_temp;}}else{ajs--;if(ajs==0){la=1;ljs=lia ng_temp;js3c++;}〃10 ms如果在亮计时// 亮计数自减// 亮的时间到// 置0亮暗计数// 还原暗计数值// 如果在暗计时// 晚计数自减// 保持暗的时间到// 点亮// 还原亮计数初值//else P1&=OxOf;if(rba==O && js3c>=3){i++;if(i>5){i=0;rtobjs--; // 红到蓝时间自减}if(rtobjs==0) // 时间到进入到蓝亮{js3c=1;rba=1;rtobjs=R_to_B_temp;}}if(rba==1 && js3c>=3){i++;if(i>5){i=0;rtobjs--;} //if(rtobjs==0){js3c=1;rba=2;stopjs=stop_temp; } _}// 红到蓝时间自减红到蓝时间自减//时间到进入到蓝亮if(rba==2 && js3c>=3){ i++;if(i>5){i=0;stopjs--; // 红到蓝时间自减}//时间到进入到蓝亮if(stopjs==0){ js3c=1;rba=0; rtobjs=R_to_B_temp;}}if(!P1_0) 〃ksj 为长按标记。