LED流水灯线路图.docx

上传人:b****7 文档编号:9189284 上传时间:2023-02-03 格式:DOCX 页数:65 大小:723.25KB
下载 相关 举报
LED流水灯线路图.docx_第1页
第1页 / 共65页
LED流水灯线路图.docx_第2页
第2页 / 共65页
LED流水灯线路图.docx_第3页
第3页 / 共65页
LED流水灯线路图.docx_第4页
第4页 / 共65页
LED流水灯线路图.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

LED流水灯线路图.docx

《LED流水灯线路图.docx》由会员分享,可在线阅读,更多相关《LED流水灯线路图.docx(65页珍藏版)》请在冰豆网上搜索。

LED流水灯线路图.docx

LED流水灯线路图

附件:

图1-1LED灯闪亮时间间隔600ms电路图

程序1-1:

ORG0000H

START:

CLRP1.0

LCALLDELAY

SETBP1.0

LCALLDELAY

LJMPSTART

DELAY:

MOVR5,#60//延时子程序,延时600ms

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

图2-1LED流水灯线路图

程序2-1:

ORG0000H

LJMPMAIN

ORG0100H

DELAY1:

MOVR7,#200

D1:

MOVR6,#200

D2:

DJNZR6,D2

DJNZR7,D1

RET

DELAY2:

MOVR7,#250

D4:

MOVR6,#250

D5:

DJNZR6,D2

DJNZR7,D4

RET

D3:

MOVP2,A

LCALLDELAY1

RLA

MOVP2,A

LCALLDELAY1

DJNZR5,D3

LCALLDELAY1

MOVP2,#0

LCALLDELAY2

RET

MAIN:

MOVR5,#7

MOVA,#11111110B

LCAllD3

LJMPMAIN

END

图3-1LED数字显示倒计时电路图

程序3-1:

ORG0000H

LJMPMAIN

ORG0100H

CHART:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DELAY:

MOVR7,#10

DEL1:

MOVR6,#200

DEL2:

MOVR5,#248

DJNZR5,$

DJNZR6,DEL2

DJNZR7,DEL1

RET

LOOP:

MOVDPTR,#CHART

MOVA,R2

MOVCA,@A+DPTR

MOVP2,A

LCALLDELAY

DECR2

DJNZR1,LOOP

RET

MAIN:

MOVR1,#10

MOVR2,#9

LCALLLOOP

LJMPMAIN

END

图4-1LED加减按键电路图

程序4-1:

ORG0000H

LJMPSTART

ORG0030H

START:

MOVR2,#1

LOOP:

CALLDISP

JBP1.6,NEXT

CALLDL10MS

JBP1.6,NEXT

JNBP1.6,$

DJNZR2,NEXT

MOVR2,#10

NEXT:

JBP1.7,LOOP

CALLDL10MS

JBP1.7,LOOP

JNBP1.7,$

INCR2

CJNER2,#11,LOOP

JMPSTART

;----------------------------------------

DISP:

MOVA,R2

DECA

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP2,A

RET

DL10MS:

MOVR6,#20

DJNZR7,$

DJNZR6,$-2

RET

;----------------------------------------

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H

DB92H,82H,0F8H,80H,90H

;----------------------------------------

END

图5-1电压超限预警电路图

程序5-1:

ORG0000H

NOLED:

MOVP2,#0

START:

JBP1.0,LED

CALLNOLED

LED:

MOVP2,#1

JMPSTART

END

图6-1电压超限预警报警显示电路图

程序6-1:

#include

#defineucharunsignedchar

#defineuintunsignedint

//===========================

//ADC0809相关引脚定义

//===========================

#defineADC_DATAP1

sbitADC_EOC=P3^3;

sbitADC_CLK=P3^4;

sbitADC_START=P3^6;

sbitADC_OE=P3^7;

//===========================

//4位共阳数码管相关

//===========================

ucharcodeseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9小数点不亮

ucharcodeseg_dot[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//0~9小数点亮

#defineSEG_DATAP2//数码管段选码,共阳数码管,低电平选通段选码

sbitSEG_SEL_0=P0^3;//数码管位选:

第0位,共阳数码管,高电平选通位选码

sbitSEG_SEL_1=P0^2;//数码管位选:

第1位

sbitSEG_SEL_2=P0^1;//数码管位选:

第2位

sbitSEG_SEL_3=P0^0;//数码管位选:

第3位

//===========================

//警报:

LED与蜂鸣器引脚

//===========================

sbitLED_Y=P0^5;//低电平亮

sbitBEEP=P0^4;//高电平响

sbitLED_R=P0^6;

sbitLED_G=P0^7;

#defineBEEP_ONBEEP=1

#defineBEEP_OFFBEEP=0

#defineLED_Y_ONLED_Y=0

#defineLED_Y_OFFLED_Y=1

#defineLED_R_ONLED_R=0

#defineLED_R_OFFLED_R=1

#defineLED_G_ONLED_G=0

#defineLED_G_OFFLED_G=1

 

//===========================

//粗略延时函数AT89C51&12MHz

//===========================

voiddelayms(unsignedintms)

{

unsignedchara,b,c;

while(ms--)

{

for(c=1;c>0;c--)

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

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

}

}

/*

//===========================

//粗略延时函数STC12C5A60S2&12MHz

//===========================

voiddelayms(unsignedintms)

{

unsignedchara,b,c;

while(ms--)

{

for(c=1;c>0;c--)

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

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

}

}

*/

//===========================

//定时器初始化,配置ADC0809时钟

//===========================

voidtimer_init(void)

{

//配置定时器0

ET0=1;

TMOD&=0xF0;

TMOD|=0x02;//定时器0,模式2,自动重装定时器

TH0=200;//自动重装值

TL0=200;

TR0=1;

//配置定时器1

ET1=1;

TMOD&=0x0F;//清除定时器1配置,不改动定时器0的配置

TMOD|=0x10;//定时器1模式一,不改动定时器0的模式

TH1=(65536-2000)/256;

TL1=(65536-2000)%256;

TR1=1;

EA=1;

}

//===========================

//定时器0中断,为ADC0809提供时钟信号

//===========================

voidtimer0()interrupt1

{

ADC_CLK=~ADC_CLK;

}

//============================

//ADC0809转换函数

//============================

ucharADC0809_GET(void)

{

ADC_START=0;

ADC_OE=0;

ADC_START=1;

ADC_START=0;

while(ADC_EOC==0);

ADC_OE=1;

returnADC_DATA;

}

//============================

//定时器1中断函数,用于刷新数码管

//============================

uchart1_flag=0;//用于标记显示第几位数码管

ucharseg0=0;//第0位数码管的值

ucharseg1=1;//第1位数码管的值

ucharseg2=2;//第2位数码管的值

ucharseg3=3;//第3位数码管的值

voidtimer1()interrupt3

{

TH1=(65536-2000)/256;

TL1=(65536-2000)%256;

SEG_SEL_0=0;

SEG_SEL_1=0;

SEG_SEL_2=0;

SEG_SEL_3=0;

SEG_DATA=0xff;

if(t1_flag==0)

{

SEG_SEL_0=1;//选通第0位数码管

SEG_SEL_1=0;

SEG_SEL_2=0;

SEG_SEL_3=0;

SEG_DATA=seg_dot[seg0];//显示带小数点的数

}

elseif(t1_flag==1)

{

SEG_DATA=seg[seg1];

SEG_SEL_0=0;

SEG_SEL_1=1;//选通第1位数码管

SEG_SEL_2=0;

SEG_SEL_3=0;

}

elseif(t1_flag==2)

{

SEG_DATA=seg[seg2];

SEG_SEL_0=0;

SEG_SEL_1=0;

SEG_SEL_2=1;//选通第2位数码管

SEG_SEL_3=0;

}

elseif(t1_flag==3)

{

SEG_DATA=seg[seg3];

SEG_SEL_0=0;

SEG_SEL_1=0;

SEG_SEL_2=0;

SEG_SEL_3=1;//选通第3位数码管

}

t1_flag++;//自加1

t1_flag=t1_flag%4;//让t1_flag在0和3之间循环

}

//============================

//显示电压值,输入0~255,显示0.000~5.000

//============================

uintprint_volt(ucharnum)

{

uintvolt=0;

volt=num/255.0*5000+0.5;//除255.0和除255有很大区别,除255.0会自动转换为float型,小数才能保持,而volt/255=0,+0.5四舍五入。

seg0=volt/1000%10;

seg1=volt/100%10;

seg2=volt/10%10;

seg3=volt%10;

returnvolt;

}

//============================

//主函数

//============================

voidmain(void)

{

ucharadc_num=0;//ADC采集到的值

uintvolt=0;//电压值0~5000,代表(0~5)V

timer_init();//定时器0、定时器1初始化。

LED_Y_OFF;

LED_R_OFF;

LED_G_ON;

BEEP_OFF;

while

(1)

{

adc_num=ADC0809_GET();

volt=print_volt(adc_num);//在数码管上显示电压值,并返回一个0~5000的值,用于判断是否要报警。

if(volt>2500)

{

LED_G_OFF;

LED_Y_OFF;

LED_R_ON;

BEEP_ON;

}

elseif(volt>2400)

{

LED_Y_ON;

LED_G_OFF;

LED_R_OFF;

BEEP_OFF;

}

else

{

LED_G_ON;

LED_Y_OFF;

LED_R_OFF;

BEEP_OFF;

}

delayms(100);

}

}

图7-1128*64LCD读取系统时间并显示

程序7-1:

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/********各种指令的宏定义********/

#defineLLCD_CMD_WRPBYTE[0x10]//LCD左半部写的命令rs=0,wr=0

#defineLLCD_CMD_RDPBYTE[0x11]//读命令rs=0,wr=0

#defineLLCD_DATA_WRPBYTE[0x12]//写数据rs=1,wr=0

#defineLLCD_DATA_RDPBYTE[0x13]//读数据rs=1,wr=1

#defineRLCD_CMD_WRPBYTE[0x20]//LCD右半部部分

#defineRLCD_CMD_RDPBYTE[0x21]//

#defineRLCD_DATA_WRPBYTE[0x22]//

#defineRLCD_DATA_RDPBYTE[0x23]//

#defineWRITE_SECOND0x80

#defineWRITE_MINUTE0x82

#defineWRITE_HOUR0x84

#defineWRITE_DAY0x86

#defineWRITE_MOUTH0x88

#defineWRITE_YEAR0x8c

#defineREAD_SECOND0x81

#defineREAD_MINUTE0x83

#defineREAD_HOUR0x85

#defineREAD_DAY0x87

#defineREAD_MOUTH0x89

#defineREAD_YEAR0x8d

#defineWRITE_PROTECT0x8E

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

sbitSCK=P1^1;

sbitDIO=P1^0;

sbitCE=P1^2;

sbitK1=P1^5;

sbitK2=P1^6;

sbitK3=P1^7;

sbitbusy=P0^7;

ucharsec,min,hour,day,mouth,year,print;

ucharbuffer[16];

codeucharshuzi1[]={

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//空

};

codeucharshijian1[]={

0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,

0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,

0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00,

};

codeucharriqi1[]={

0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,

0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,

0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,

};

voidlcd_busy_rd(ucharright)

{

if(right==1)

RLCD_CMD_RD;

else

LLCD_CMD_RD;

while(busy);

}

/**********写指令***********/

voidlcd_comd_wr(ucharcmdcode,ucharright)//写指令

{

lcd_busy_rd(right);

if(right==1)

RLCD_CMD_WR=cmdcode;

else

LLCD_CMD_WR=cmdcode;

}

/********对LCD进行读写***********/

voidlcd_data_wr(ucharldata,ucharright)//

{

lcd_busy_rd(right);

if(right==1)

RLCD_DATA_WR=ldata;

else

LLCD_DATA_WR=ldata;

}

/********延时函数*******/

voiddelay(uintnms)

{

uinti;

while(nms--)

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

}

/****lcd初始化*******/

voidlcd_init(void)

{

uintk;

lcd_comd_wr(0x3e+1,0);//左半部显示开

lcd_comd_wr(0xc0+0,0);//左半部顶行

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1