📄 hy.c
字号:
/********************************************************************\
** 程序功能:实现端口D外接的8个LED循环采用三种不同的方式移动点亮 **
**
\********************************************************************/
//#include <pic.h>
#include <pic18f4520.h>
#define uchar unsigned char //--------------在程序中用uchar置换unsgned char减省录入量
#define uint unsigned int
#define FLASH_LED PORTD //用FLASH_LED置换PORTD,方便以后移置。
#define LED_TRIS TRISD //
uchar FlashLed[]={0x18,0x24,0x42,0x81,0x00}; //控制从LED中间向两边移的数组
void init(void); //PIC芯片资源初始化函数
void RightMovLed(void); //实现向右单个移动点亮LED(右移)
void LeftMovLed(void); //实现向左单个移动点亮LED(左移)
void LedFlash(void); //实现两个LED从中间跑两边
void crossFlash(void); //交叉闪烁
void delay(uchar); //延时函数
//********* 主函数 **********
void main()
{
init();
FLASH_LED=0x00;
while(1)
{
RightMovLed();
LeftMovLed();
LedFlash();
crossFlash();
}
}
//********* 资源初始化 ************
void init(void)
{
LED_TRIS=0x00; //定义端口D为输出
INTCON=0x00; //关闭所有中断
}
//********* LED点亮后单个右移 *********
void RightMovLed(void)
{
uchar temp;
temp=0x80;
while(temp)
{
temp=temp>>1&0x7f;
FLASH_LED=temp;
delay(255);
delay(255);
delay(255);
}
}
//********* LED点亮后单个左右移 *********
void LeftMovLed(void)
{
uchar temp;
temp=0x01;
while(temp)
{
temp=temp<<1&0xfe;
FLASH_LED=temp;
delay(255);
delay(255);
delay(255);
}
}
//********* 实现两个LED从中间跑两边 *********
void LedFlash(void)
{
uchar i=0;
while(FlashLed[i])
{
FLASH_LED=FlashLed[i];
i++;
delay(255);
delay(255);
}
}
//********* 交叉闪烁 *********
void crossFlash(void)
{
uchar i,temp;
temp=0x55;
for(i=0;i<10;i++)
{
FLASH_LED=temp;
temp=~temp;
delay(255);
}
}
//*********** 延时函数 ********
void delay(uchar x)
{
uchar i;
while(x--)
for(i=0;i<125;i++)
continue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -