旋转LED灯程序(51单片机)

合集下载

51单片机流水灯程序

51单片机流水灯程序

51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。

流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。

下面详细介绍51单片机流水灯程序的编写。

一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。

一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。

具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。

•将每个LED灯的阴极通过限流电阻连接到P1端口。

•将P2端口的每个引脚依次连接到每个LED灯的阴极。

二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。

在主函数中,使用一个while循环控制流水灯效果。

在循环内部,使用一个for循环控制8个LED灯的状态。

在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计首先,我们需要明确要使用到的硬件资源和引脚连接情况。

假设我们使用的是STC89C51单片机,LED灯的正极连接到单片机的P1口,负极通过电阻连接到地。

接下来,我们需要了解一些基本的汇编指令和编程规范。

在编写51单片机程序时,需要使用到一些特定的寄存器和指令。

首先是P1寄存器,它用来控制P1口的输出和输入状态。

然后是MOV指令,这是一个用来将数据从一个寄存器复制到另一个寄存器的指令。

最后是一个延时函数,可以利用循环来实现延时。

首先,我们需要初始化P1口为输出状态。

在51单片机中,IO口可以被配置为输入(1)或输出(0)。

我们可以使用MOV指令将0赋值给P1寄存器,将其配置为输出。

此外,我们还需要一个简单的延时函数,来控制LED灯的亮灭时间。

下面是一个基本的51单片机控制LED灯的程序:```assemblyORG0;程序的起始地址MOVP1,;初始化P1口为输出状态LOOP:;主循环MOVP1,;将P1的状态置为0,LED灯灭ACALLDELAY;调用延时函数,延时一段时间MOVP1,;将P1的状态置为1,LED灯亮ACALLDELAY;调用延时函数,延时一段时间JMPLOOP;无限循环DELAY:;延时函数MOVR3,;初始化循环计数器为250LOOP1:MOVR2,;初始化循环计数器为250LOOP2:MOVR1,;初始化循环计数器为250LOOP3:DJNZR1,LOOP3;内层循环DJNZR2,LOOP2;中层循环DJNZR3,LOOP1;外层循环RET;返回主程序```以上是一个简单的51单片机控制LED灯的汇编程序。

程序中通过不断切换P1口的状态来实现LED灯的亮灭。

同时,通过调用延时函数来实现亮灭的时间间隔。

在主循环中,LED灯会亮和灭各一段时间,然后无限循环。

为了将以上汇编程序烧录到单片机中,需要将其汇编为二进制文件。

通常可以使用Keil C等开发工具进行汇编和烧录操作。

51单片机LED程序代码

51单片机LED程序代码

sbit wei=P1^1; // 数码管位控制,点阵列控制 sbit Line=P1^3; //点阵行控制
unsigned int i,j;
/*-----------------------------------------------主函数
------------------------------------------------*/ void main (void) { P0=0X00; //关闭点阵
void main() {
P0=0X00; //关闭点阵 Line=0; P0=0XFF; //关闭数码管 wei=0;
Leden=1; i=0xfe; while(1)
{ P0=i; delay(100); i=_crol_(i,1); //流水灯移位 } }
void delay(unsigned int sm) //延时函数 {
} }
P0=i; delay(100); i=_cror_(i,1); }
void delay(unsigned int sm) //延时函数 {
for(x=sm;x>0;x--) for(y=110;y>0;y--); }
Line=0; P0=0XFF; //关闭数码管 wei=0;
while (1) {
//主循环
LED=0; delay(150);
} } void delay(unsigned int sm) {
for(i=sm;i>0;i--) for(j=110;j>0;j--); } 2.LED 右移 #include<reg52.h> //头文件 #include<intrins.h> sbit Leden=P1^2; sbit wei=P1^1; // 数码管位控制,点阵列控制 sbit Line=P1^3; //点阵行控制 int x,y; void delay(unsigned int); unsigned char i; //定义变量

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计

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秒点亮右数的第三只灯,第二只熄灭,…亮灯按此顺序由右向左移动。

DIY基于51单片机的旋转LED数字电子钟

DIY基于51单片机的旋转LED数字电子钟

标签:DIY基于51单片机的旋转LED数字电子钟(红外线遥控调时)在网上看到不少老外做的各种旋转LED显示屏,非常COOL,我也动手用洞洞板试做了一个类似的显示屏,结果感觉还不错。

于是再接再励继续努力,将作品进一步改进,完善后制成如今这个样子。

由于刚学51单片机,加上制作电路板软件也是从零开始,的确花了我不少的时间和精力。

不过也就是在这艰难的独立制作中,真正学到了不少实在的东西。

本项目的关键是如何解决高速旋转的电路板如何供电,如何调时的问题。

我采用电机电刷的原理,将旋转轴钻空,通过一只插头将电源的从反面引到前面的电路板上,而这个旋转的插头又与固定在背板上的两个铜片接触的。

调时的问题有些困难,一是让电路板在旋转前与PC机相接,由电脑传送调时数据,这虽然可行但不方便。

还有就是用遥控方法,但此方案在调试方面有很大的困难。

显示方式上,我采用平衡式的两排LED,这除了在旋转时能较好的保持平衡外,主要能利用两边交替显示方式,比单排要快一倍。

本装置不仅是一个时钟,它还可以动态显示汉字及图案,这就看如何发挥了。

其具体制作过程如下:一。

旋转电机的制作从制作成本与方便考虑,选用旧电脑用的大软驱上的直流无刷电机,只是对局部进行改造。

就是这种古董软驱软驱上的直流无刷电机拆开后的电机仔细拆开直流电机,将带圆盘的铝轴从中开孔,让它刚好能插入一个插头。

将旋转轴加工成这样装配好以后按拆开时的顺序,反序将轴安装直流电机上。

电机装配完成后用两片铜片做的电刷电刷装好后的侧面图将电路板上较突出的元件改焊在反面,电机的电源接法。

从电路板标注的符号看,“+”为电源正,“G”为电源负,“C”与“M”端分别与电源正相连匀可使电机运转将一张旧唱片按电机座的位置开孔,而定位用的挡光板应根据电路板上感光组件的位置确定。

二。

电路板的制作本制作品用51单片机控制,具体电原理图如下:用Protel 99设计制作了电路板。

最后得到完成的作品。

遥控器用的是松下车载机的,只用了其中的六个键。

51单片机控制LED灯程序设计

51单片机控制LED灯程序设计

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秒点亮右数的第三只灯,第二只熄灭,…亮灯按此顺序由右向左移动。

51单片机 LED灯点亮程序

51单片机 LED灯点亮程序
void Delay10ms(unsigned int c) //误差0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//
//
//
//
//
//*****************************************
//1111111111111111111111111111111111111111111111111111111111111111111
//1111111111111111111111111111111111111111111111111111111111111111111
//闪烁的程序
#include<reg51.h>
Delay10ms(50);//延时
}
}
}
/*******************************************************************************
*函数名: Delay10ms
*函数功能:延时函数,延时10ms
*输入:无
*输出:无
*******************************************************************************/
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//33333333333333333333333333333333333333333333333333333333333333333333333

51单片机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单片机led灯闪烁代码的实现方法。

代码操作简单易懂,可供初学者参考,也为电子爱好者提供了一种实现闪烁控制的方案。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

飘飞在空中的文字(详情咨询QQ:278540660)一、实物图(夜晚可以观测到飘在空中的文字,美!!!)二、部分代码/***************************************************************main. c***************************************************/#include<display.h>void main(){EX0init();TIM0init();Init_DS1302();while(1){time_set(IRcord[2]);IRcord[2]=0;if(time_love==0){if(time_onoff==0){ds1302_read_time();Dig_time();}else{Dig_time();}}else{Display_love();}while(!flag);flag=0;}}/***************************************************************redco n.h**************************************************/#define uchar unsigned char#define uint unsigned intsbit IR=P3^2;uchar irtime; //中断次数uchar IRcord[4]; //记录接收到的四个字节数据uchar irdata[33]; //接收到的32个二进制bituint flag=0;uchar nums=0;uint timelate=0;void TIM0init(void) //定时器0初始化{TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值(0.255ms一次中断)--晶振频率的十二分之一ET0=1; //开中断TR0=1;}void EX0init(void){IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1; //使能外部中断0IT1=1; //指定外部中断1下降沿触发,INT0 (P3.3)EX1=1; //使能外部中断1EA = 1; //开总中断}void Ircordpro(void) //红外码值处理函数{uchar i, j, k;uchar cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7) //1.125ms为0 2.25ms为1 0.255*7作为稳定判断值value|=0x80;if(j<8){value>>=1;}k++;}IRcord[i]=value;value=0;}}void EX1_ISR (void) interrupt 2 //外部中断0服务函数{static uchar i; //接收红外信号处理static bit startflag; //是否开始处理标志位if(startflag){if(irtime<60&&irtime>=35) //连续发送两个32位数据间隔不可预知性) 尤为重要{i=0;}irdata[i]=irtime; //存储每个电平的持续时间irtime=0;i++;if(i==33){i=0;startflag=0;Ircordpro();}}else{startflag=1;irtime=0;}}void tim0_isr (void) interrupt 1 using 1{irtime++;}void EX0_ISR (void) interrupt 0{flag=1;nums++;if(nums>=20){nums=0;timelate++;if(timelate>=4){timelate=0;}}}/***************************************************************DS130 2.h**************************************************/#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar time_buf[7]={0x13,0x01,0x01,0x00,0x00,0x00,0x02};sbit SCLK=P0^0;sbit SDA=P0^1;sbit RST=P0^4;void delayus(uint t){uint i;for(i=0;i<t;i++)_nop_();}void delayms(uint t){uint x,y;for(x=t;x>0;x--)for(y=95;y>0;y--);}void change_dats(){uchar i;uchar temp;for(i=0;i<6;i++){temp=time_buf[i]/16;time_buf[i]=time_buf[i]%16+temp*10;}}void DS1302WriteByte(uchar dat){uchar i;SCLK=0; //初始时钟线置为0delayus(2);for(i=0;i<8;i++)//传输的8个字节的数据{SDA=dat&0x01; //取最低位delayus(2);SCLK=1; //上升沿,SDA的数据被传输delayus(2);SCLK=0; //时钟线拉低,为下一个上升沿做准备dat>>=1; //数据右移一位,准备传输下一位数据}}uchar DS1302ReadByte(){uchar i,dat;delayus(2);for(i=0;i<8;i++){dat>>=1; //要返回的数据左移一位if(SDA==1) //当数据线为高时,证明该位数据为 1 dat|=0x80;SCLK=1; //拉高时钟线delayus(2);SCLK=0; //制造下降沿delayus(2);}return dat; //返回读取出的数据}void DS1302Write(uchar cmd, uchar dat){RST=0; //初始 CE线置为 0SCLK=0; //初始时钟线置为0RST=1; //初始 CE置为 1,传输开始DS1302WriteByte(cmd); //传输命令字,要写入的时间/日历地址DS1302WriteByte(dat); //写入要修改的时间/日期SCLK=1; //时钟线拉高RST=0; //读取结束,CE置为0,结束数据的传输}uchar DS1302Read(uchar cmd){uchar dat;RST=0; //初始 CE线置为0SCLK=0; //初始时钟线置为0RST=1; //初始 CE置为 1,传输开始DS1302WriteByte(cmd); //传输命令字,要读取的时间/日历地址dat=DS1302ReadByte(); //读取要得到的时间/日期SCLK=1; //时钟线拉高RST=0; //读取结束,CE置为 0,结束数据的传输return dat; //返回得到的时间/日期}void Init_DS1302(void){DS1302Write(0x8e,0x00); //写保护关DS1302Write(0x80,time_buf[5]); //初始秒值为0DS1302Write(0x82,time_buf[4]); //初始分钟值为 0DS1302Write(0x84,time_buf[3]); //初始为 24小时模式初始时间为0点DS1302Write(0x86,time_buf[2]); //设置日DS1302Write(0x88,time_buf[1]); //设置月DS1302Write(0x8c,time_buf[0]); //设置年DS1302Write(0x8a,time_buf[6]); //设置星期数DS1302Write(0x8e,0x80); //禁止写入change_dats();}void ds1302_read_time(){uchar i,temp;time_buf[0]=DS1302Read(0x8D); //年time_buf[1]=DS1302Read(0X89); //月time_buf[2]=DS1302Read(0X87); //日time_buf[3]=DS1302Read(0X85); //时time_buf[4]=DS1302Read(0X83); //分time_buf[5]=(DS1302Read(0X81))&0x7F;//秒time_buf[6]=DS1302Read(0X8B); //星期for(i=0;i<7;i++) //BCD 处理{temp=time_buf[i]/16;time_buf[i]=time_buf[i]%16;time_buf[i]+=temp*10;}}/***************************************************************DISPL AY.h**************************************************/#include<ds1302.h>#include<redcon.H>#define uint unsigned int#define uchar unsigned charuchar code W[]={0x81,0xfb,0xf7,0xfb,0x81};uchar code N[]={0xe1,0xdf,0xdf,0xe1};uchar code R[]={0x81,0xa7,0xab,0xdd};uchar code I[]={0xbd,0x81,0xbd};uchar code L[]={0x81,0xfd,0xfd};uchar code o[]={0xe3,0xdd,0xe3};uchar code v[]={0xc7,0xfb,0xfd,0xfb,0xc7};uchar code E[]={0xe3,0xd5,0xd5,0xe5};uchar code Y[]={0x9f,0xef,0xf1,0xef,0x9f};uchar code U[]={0xc3,0xfd,0xfd,0xc3};uchar code num[10][5]={{0x83,0x75,0x6d,0x5d,0x83},{0xff,0xbd,0x01,0xfd,0xff},{0xbd,0x79,0x75,0x6d,0x9d},{0x7b,0x7d,0x5d,0x2d,0x73},{0xe7,0xd7,0xb7,0x01,0xf7},{0x1b,0x5d,0x5d,0x5d,0x63},{0x83,0x6d,0x6d,0x6d,0x73},{0xbf,0x7f,0x7d,0x41,0x3d},{0x93,0x6d,0x6d,0x6d,0x93},{0x9b,0x6d,0x6d,0x6d,0x83}};uchar code wen[]={0xdf,0xcd,0xd5,0x9b,0xd5,0xcd,0xdf};uchar code er[]={0xfd,0x83,0xff,0x83,0xfb,0xfd,0xfd};uchar code xin[]={0xcf,0xb7,0xdb,0xb7,0xcf};uchar set_num=0;uchar time_onoff=0;uchar time_love=0;void change_dath(){uchar i;uchar temp;for(i=0;i<6;i++){temp=time_buf[i]/10;time_buf[i]=time_buf[i]%10+temp*16; }}void time_set(uchar dat){switch(dat){case 0x46:{if(set_num==0) //按下设置键第一次{set_num=1;time_onoff=1;DS1302Write(0x8e,0x00); //写保护关DS1302Write(0x80,0X80); //时钟停止}else if(set_num==1){set_num=2;}else if(set_num==2){P2=0XFB;set_num=3;}else if(set_num==3){set_num=4;P2=0Xf7;}else if( set_num==4){set_num=5;}else if(set_num==5){set_num=6;}else if(set_num==6){set_num=0;time_onoff=0;change_dath();Init_DS1302();DS1302Write(0x80,0X00); //时钟运行}break;}case 0x47:{if(set_num!=0){if(set_num==1){time_buf[0]++;}else if(set_num==2){time_buf[1]++;if(time_buf[1]>12)time_buf[1]=1;}else if(set_num==3){time_buf[2]++;if(time_buf[2]>=32)time_buf[2]=1;}else if(set_num==4){time_buf[3]++;if(time_buf[3]>=24)time_buf[3]=0;}else if(set_num==5){time_buf[4]++;if(time_buf[4]>=60)time_buf[4]=0;}else if(set_num==6){time_buf[5]++;if(time_buf[5]>=60)time_buf[5]=0;}}break;}case 0x45:{if(set_num!=0){if(set_num==1){if(time_buf[0]<=0)time_buf[0]=20;else{time_buf[0]=time_buf[0]-1; }}else if(set_num==2){time_buf[1]=time_buf[1]-1; if(time_buf[1]<=0)time_buf[1]=12;}else if(set_num==3){if(time_buf[2]<=1)time_buf[2]=31;elsetime_buf[2]=time_buf[2]-1; }else if(set_num==4){if(time_buf[3]<=0)time_buf[3]=23;elsetime_buf[3]=time_buf[3]-1; }else if(set_num==5){if(time_buf[4]<=0)time_buf[4]=59;elsetime_buf[4]=time_buf[4]-1;}else if(set_num==6){if(time_buf[5]<=0)time_buf[5]=59;elsetime_buf[5]=time_buf[5]-1;}}break;}case 0x07:{time_love=1;break;}case 0x15:{time_love=0;break;}}}/******************时钟显示***************/ void Dig_time(){char m;for(m=0;m<=4;m++) //显示时十位{P2=num[time_buf[3]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示时个位{P2=num[time_buf[3]%10][m];delayms(1);}P2=0xff;delayms(1);P2=0xd7;delayms(1);P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示分十位{P2=num[time_buf[4]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示分个位{P2=num[time_buf[4]%10][m];delayms(1);}P2=0xff;delayms(1);P2=0xd7;delayms(1);P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示秒十位{P2=num[time_buf[5]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示秒个位{P2=num[time_buf[5]%10][m];delayms(1);}P2=0xff;}/***************i love you*****************/ void Display_love(){char i,j;if(timelate==0){for(i=0;i<=6;i++) //显示W{P2=wen[i];delayms(1);}P2=0xff;delayms(1);for(i=0;i<=6;i++) //显示r {P2=er[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=1){for(i=2;i>=0;i--) //显示I {P2=I[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=2){for(i=0;i<3;i++) //显示L {P2=L[i];delayms(1);}P2=0xff;delayms(1);for(i=2;i>=0;i--) //显示o {P2=o[i];delayms(1);}P2=0xff;delayms(1);for(i=4;i>=0;i--) //显示v {P2=v[i];delayms(1);}P2=0xff;delayms(1);for(i=0;i<=3;i++) //显示e {P2=E[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=3){for(i=4;i>=0;i--) //显示Y {P2=Y[i];delayms(1);}P2=0xff;delayms(1);for(i=2;i>=0;i--) //显示o {P2=o[i];delayms(1);}P2=0xff;delayms(1);for(i=3;i>=0;i--) //显示u {P2=U[i];delayms(1);}P2=0xff;delayms(2);}if(timelate>0){for(j=0;j<timelate;j++) {for(i=0;i<=4;i++){P2=xin[i];delayms(1);}P2=0xff; delayms(2); }}}。

相关文档
最新文档