该【2025年C51单片机实行流水灯程序 】是由【非学无以广才】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【2025年C51单片机实行流水灯程序 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。#include<>
#define LEDPort P1
unsigned char LED01_[9]=
{0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,};
//方式0,方式1灯开关数组。
unsigned char LED23_[5]=
{0xFF,0x7E,0xBD,0xDB,0xE7};
// 方式2,方式3灯开关数组。
unsigned char LED4_[16]={0XFF,0X7F,0X3F,0X1F,0X0F,0X07,0X03,0X01,0X00,0X01,0X03,0X07,0X0f,0X1f,0X3f,0X7f}; //方式4
unsigned char LED56_[8]={0XFF,0X3F,0X9F,0XCF,0XE7,0XF3,0XF9,0XFC};
unsigned char LED7_[]={0X0F,0XF0,0X33,0XCC,0X3C,0XC3,0XFF};
unsigned char TAB[9]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};//定义断码表。
unsigned char i=0,j=9; //数据选择计数。
unsigned char Mode=0; //模式选择,默认为模式0。
unsigned char Count=1; //定期器中断计数。
unsigned char Delay=1; //延迟计数,通过变化改数值变化灯状态延迟时间。
//灯延迟时间=uc_Dalay*定期器溢出时间。
void main()
{ P2=0X3F;
TMOD=0x01; //定期器0模式一。
TH0=0x3C;
TL0=0xB0; //溢出时间:50ms。
TR0=1; //定期器0启动。
IT0=1; //外部中断0下降沿触发。
IT1=1; //外部中断1下降沿触发。
EX0=1; //外部中断0开。
EX1=1; //外部中断1开。
ET0=1; //定期器0中断开。
EA=1; //总中断开。
while(1);
}
//*********************************************************************************************************
//* *
//* ************************************定期器0中断函数************************************ *
//* *
//*<函数功能>:当定期器0溢出时执行此函数,首先执行2个判断: *
//* (1)if判断与否变化灯旳状态,可用于变化延时时间; *
//* (2)switch判断闪烁模式,根据不一样模式对灯进行不一样旳通断。 *
//* 最终对定期器TH0,TL0重新赋值,溢出时间为50ms。 *
//* *
//*********************************************************************************************************
void vTimer0(void) interrupt 1
{
if(Count%Delay==0) //通过此判断语句来变化延时。,例如:当uc_Delay=6时,定期器
{ //溢出5次时灯状态变化1次。,uc_Count++
Count=1; //等待下一次溢出。因此可以变化延时。
switch(Mode)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式0,灯从上往下依次点亮,不停循环。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case 0:
if(i>=8)
i=0;
else i++;
LEDPort=LED01_[i];
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式1,灯从下往上依次点亮,不停循环。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case 1:
if(i<=0)
i=8;
else i--;
LEDPort=LED01_[i];
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式2,灯从两边往中间依次点亮,不停循环。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case 2:
if(i>=4)
i=0;
else i++;
LEDPort=LED23_[i];
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式3,灯从中间往两边依次点亮,不停循环。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case 3:
if(i<=0)
i=4;
else i--;
LEDPort=LED23_[i];
break;
case 4:
if(i<16)
i++;
else i=0;
LEDPort=LED4_[i];
break;
case 5:
if(i<7)
i=i+2;
else i=0;
LEDPort=LED56_[i];
break;
case 6:
if(i<7)
i++;
else i=0;
LEDPort=LED56_[i];
break;
case 7:
if(i>=7)
i=0;
else i++;
LEDPort=LED7_[i];
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<所有等以一定期间间隔同步闪烁。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case 8:
if(LEDPort==0xFF)
LEDPort=0x00;
else LEDPort=0xFF;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<其他>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
default:
break;
}
}
else Count++;
TH0=0x3C; //重新给定期器赋值。
TL0=0xB0; //定期时间:50ms。
}
//*********************************************************************************************************
//* *
//* ************************************外部中断0中断函数************************************ *
//* *
//* <函数功能>:当外部中断0产生下降沿信号时执行此函数,将闪灯模式从模式0到4循环切换。 *
//* *
//*********************************************************************************************************
void vModeChange(void) interrupt 0
{
if(Mode>7)
Mode=0;
else Mode++;
P2=TAB[Mode];
}
//*********************************************************************************************************
//* *
//* ************************************外部中断1中断函数************************************ *
//* *
//*<函数功能>:当外部中断1产生下降沿信号时执行此函数,将闪灯时间从50ms,250ms,500ms,750ms循环切换。 *
//* *
//*********************************************************************************************************
void vDelayChange(void) interrupt 2
{
if(Delay>=16)
Delay=1;
else Delay+=5;
}
2025年C51单片机实行流水灯程序 来自淘豆网m.daumloan.com转载请标明出处.