51单片机流水灯代码(51单片机流水灯代码怎么写)

http://www.itjxue.com  2023-03-08 02:48  来源:未知  点击次数: 

51单片机流水灯从两边向中间亮代码

#include reg52.h

#define uchar unsigned char

#define uint unsigned int

uchar TS_Count,TM_Count,TH_Count,count_N;

sbit LED_H=P3^0;

sbit LED_M=P3^1;

sbit LED_S=P3^2;

void DelayMS(uint x) //延时函数

{

uchar t;

while(x--)

{

for(t=120;t0;t--);

}

}

void dis_time(uchar H_t,uchar M_t,uchar S_t)

{ uchar i;

uchar code DSY_CODE[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,

}; //定义数码管显示0~9的控制码

uchar code PS_CODE[]={0x01,0x02,0x04,0x08,0x010,0x20,0x40,0x80}; //这是数码管第n位的控制码

//以下几行是给每一个要显示的数码管赋值

uchar dis_bit[8];

dis_bit[0]=H_t/10%10; //千位

dis_bit[1]=H_t%10; //百位

dis_bit[2]=10; //十位

dis_bit[3]=M_t/10%10;

dis_bit[4]=M_t%10; //千位

dis_bit[5]=10; //百位

dis_bit[6]=S_t/10%10; //十位

dis_bit[7]=S_t%10;

for(i=0;i8;i++)

{

P2=PS_CODE[i]; //第i个数码管的位控制字

P0=DSY_CODE[dis_bit[i]]; //第i个数码管的段码控制字

DelayMS(5); //延时5毫秒。

}

}

void disp_mode(uchar mode_1) //这个函数控制三个LED灯

{

switch(mode_1)

{ case 0: //模式0,全灭

LED_H=1;

LED_M=1;

LED_S=1;

TR0 = 1;

break;

case 1: //模式1,LED_S亮

LED_H=1;

LED_M=1;

LED_S=0;

TR0 = 0;

break;

case 2: //模式2,LED_M亮

LED_H=1;

LED_M=0;

LED_S=1;

TR0 = 0;

break;

case 3: //模式3,LED_H亮

LED_H=0;

LED_M=1;

LED_S=1;

TR0 = 0;

break;

}

}

uchar Key_code() //这个函数检测按键

{

uchar Key_NO;

if(P1==0xfe) //P1.0按键返回键值0

{Key_NO=0;}

if(P1==0xfd) //P1.1按键返回键值1

{Key_NO=1;}

if(P1==0xfb) //P1.2按键返回键值2

{Key_NO=2;}

while(P1!=0xff); //等待按键释放,源程序有点错误需要加分号;

return Key_NO;

}

void main()

{uchar y=-1;

uchar mode_N=0;

TMOD=0X00; //定义定时器工作在模式0,13位定时器模式

TH0=(8192-5000)/32; //赋初值

TL0=(8192-5000)%32;

IE=0X82; //开启定时器中断和总中断

TR0=1; //启动定时器

while(1)

{

if(P1!=0xff) //等待按键,如果有按键按下,获取键值

y=Key_code(); //获取键值

switch(y)

{

case 0: //第一个按键按下

mode_N++; //模式控制变量加1

if( mode_N3) mode_N=0;

break;

case 1: //第二个按键按下控制数据加

switch( mode_N)

{

case 1:if(TS_Count59) TS_Count++;

break;

case 2:if(TM_Count59) TM_Count++;

break;

case 3:if(TH_Count23) TH_Count++;

break;

}

break;

case 2: //第三个按键按下,控制数据减

switch( mode_N)

{

case 1:if(TS_Count0) TS_Count--;

break;

case 2:if(TM_Count0) TM_Count--;

break;

case 3:if(TH_Count0) TH_Count--;

break;

}

break;

}

y=-1;

disp_mode(mode_N);

dis_time(TS_Count,TM_Count,TH_Count);

//dis_time(25,26,27);

}

}

void LED_Flash()interrupt 1 //中断服务程序,定时用。

{

TH0=(8192-5000)/32;

TL0=(8192-5000)%32;

if(++count_N5)

{if(++TS_Count==60)

{

TS_Count = 0;

if(++TM_Count==60)

{

TM_Count = 0;

if(++TH_Count==24) TH_Count = 0;

}

}

count_N=0;

}

}

51单片机八个灯的流水灯代码

51单片机八个灯的流水灯代码:

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。

2、#include "reg51.h"首先写出单片机的头函数。

3、#include "intrins.h"输入位移函数。

4、unsigned int count=0,led;定义函数。

5、输入主函数,定义单片机的端口,写入延时函数。

编辑推荐

对于刚接触单片机的学习者,似乎都很迷茫,C语言、汇编语言、电路、开发板,不知道从哪儿开始学起。其实在学习单片机原理与应用系统开发时,只有在学习一些理论知识的基础上,多阅读单片机应用系统开发案例,注重单片机应用系统开发实践训练,才能透彻地理解和掌握单片机结构与原理,才能更快更好地掌握单片机应用知识和单片机应用系统开发技能。

51单片机中如何用汇编语言编写流水灯

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H;复位启动

AJMP START;

ORG 001BH;T1中断

AJMP T1INT;

;定义变量========================

YSJSEQU 30H;延时计数器

LEDEQU 31H;LED控制缓冲器

;主程序==========================

START:MOV LED,#0FEH;初始化数据

MOV YSJS,#0;

MOV TMOD,#10H;定时器1工作于方式1,16位定时器

MOV TL1,#0B0H;设置定时初值

MOV TH1,#3CH;定时时间=50mS

SETB ET1;使能定时器1中断

SETB TR1;启动定时器1

SETB EA;开总中断

MOV P1,LED;初始化流水灯

LOOP:JMP LOOP;循环等待中断

T1INT:PUSH PSW;定时器1中断程序

PUSH ACC;保护现场

MOV TH1,#3CH;定时时间=50mS

MOV TL1,#0B0H;

INC YSJS;

PUSH ACC;保护ACC

MOV A,YSJI;

CJNE A,#2,QT1;50mS*2=100mS

MOV P1,LED;

MOV A,LED;

RL A;累加器A的值循环左移1位

MOV LED,A;

MOV YSJS,#0;

QT1:POP ACC;恢复现场

POP PSW;

RETI;返回主程序

END;汇编程序结束

扩展资料:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

求教51单片机花样流水灯控制系统代码怎么写

#includereg51.h

#define?uchar?unsigned?char

uchar?cnt,led=0xfe;

void?t0isr()?interrupt?1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

cnt++;

if(cnt=20)

{

cnt=0;

led=(led1)|0x01;

if(led==0xff)led=0xfe;

P0=led;

}

}

main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

P0=led;

while(1);

}

很简的51单片机C语言流水灯程序

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。

例程:

#includereg51.h??//51单片机头文件

#include?intrins.h?//包含有左右循环移位子函数的库

#define?uint?unsigned?int????//宏定义

#define?uchar?unsigned?char??//宏定义

sbit?beep=P2^3;

void?delay(uint?z)??//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.

{????????????????????//delay(500);大约延时500ms.

????uint?x,y;

????for(x=z;x0;x--)

????????for(y=110;y0;y--);????

}

void?main()????????????//主函数

{

????uchar?a,i,j;

????while(1)????????//大循环

????{

????????a=0xfe;?????//赋初值

????????for(j=0;j3;j++)?for(i=0;i8;i++)???//左移三次

????????{

????????????P1=a;???????//点亮小灯

????????????beep=0;?????//开启蜂鸣器

????????????delay(50);?//延时50毫秒

????????????beep=1;?????//关闭蜂鸣器

????????????delay(50);??//再延时50毫秒

????????????a=_crol_(a,1);?//将a变量循环左移一位

????????}

????????a=0x7f;

???????for(j=0;j3;j++)?for(i=0;i8;i++)??//右移三次

????????{

????????????P1=a;???????//点亮小灯

????????????beep=0;?????//开启蜂鸣器

????????????delay(50);?//延时50毫秒

????????????beep=1;?????//关闭蜂鸣器

????????????delay(50);???//再延时50毫秒

????????????a=_cror_(a,1);?//将a变量循环右移一位

????????}????????

????}

}

2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

(责任编辑:IT教学网)

更多

推荐SQL Server文章