⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8ledloop.c

📁 《爱上单片机》配书光盘
💻 C
字号:
/*********************************************************************************************
程序名:    一键控制多灯花样
编写人:    杜洋 
编写时间:  2009年5月20日
硬件支持:  STC12C2052 内部RC或外部12MHZ晶振
接口说明:  8个LED彩灯接P1口  
修改日志:  
  NO.1- 
/*********************************************************************************************
说明:
按键控制流水LED效果。

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

#include <REG51.h> //51头文件

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

#define DY_PORT		P1 //设置LED连接的I/O组
#define DY_SPEED	100 //设置每一个明亮级的停留时间(值域:0~65535)

sbit DY_KEY = P3 ^ 3;
unsigned char MENU = 0;
/*********************************************************************************************

bit [自定义名] ; //定义一个位(位的值只能是0或1)例:bit LED
#define [代替名]	[原名]  //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1
sbit  [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定义名] ; //定义一个0~255的整数变量.例:unsigned char a;
unsigned int [自定义名] ; //定义一个0~65535的整数变量

/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延时程序
	unsigned int i;
	while( --a != 0){
		for(i = 0; i < 600; i++);//STC单片机在外部晶振为12MHz时i值上限为600  
	}   				   		 //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/*********************************************************************************************/
void INT0Fun(void) interrupt 2 using 3 {	//INT0中断
		EX0 = 0; //外部中断0关闭		
		if(DY_KEY == 0){ //如果按键按下则继续
			delay(20); //延时20mS
			if(DY_KEY == 0){ //如果按键按下则继续
				MENU++;
				if(MENU >3){
					MENU = 0;
				}				
				while(DY_KEY == 0); //等待按键松开
			}
		}
   	EX0 = 1; //外部中断0关闭		
}
/*********************************************************************************************/
void main(void){
	unsigned int i;
	unsigned int temp;
	EA 		= 1; 			//允许CPU中断
	IT1 	= 1; 			//INT0下降沿有效
	EX1 	= 1; 			//外部中断0开		
	while(1){
		if(MENU == 0){
    		temp=0x01;
    		for(i=0;i<8;i++){ //8个流水灯逐个闪动
     			DY_PORT=~temp;
     			delay(DY_SPEED);   //调用延时函数
     			temp<<=1;
    		}
		}
		if(MENU == 1){
		temp=0x80;
		for(i=0;i<8;i++){ //8个流水灯反向逐个闪动
    		DY_PORT=~temp;
    		delay(DY_SPEED);   //调用延时函数
    		temp>>=1;
    		}
		}
		if(MENU == 2){
    	temp=0xFE;
		for(i=0;i<8;i++){ //8个流水灯依次全部点亮
     		DY_PORT=temp;
     		delay(DY_SPEED);   //调用延时函数
     		temp<<=1;
    		}
		}
		if(MENU == 3){
   		temp=0x7F;
   		for(i=0;i<8;i++){ //8个流水灯依次反向全部点亮
     		DY_PORT=temp;
     		delay(DY_SPEED);   //调用延时函数
     		temp>>=1;
    		}
		}
	}
}
/*********************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -