感悟网 导航

单片机PO P1口控制16个LED 的跑马灯程序 求大神帮忙,写一份51单片机,16位跑马灯,p1口和p2口输...

作者&投稿:粱郝 (若有异议请与网页底部的电邮联系)
AT89C51单片机的P1口控制16盏LED流水灯循环亮起程序怎么编~


只要写p1口,它会自己向p口的其他针脚分配。

程序思路,用中断按钮,改变flag的值,主程序里根据flag的值,执行三种亮灯模式之一
uint a;
if(flag==0)//方式1,单灯亮
{
a=1;
for(i=0;i<16;i++)
{
a>>=1;
P0=a;//低8位送P0
P2=a>>8;//高8位送P2
delayms(200);
}
if(flag==1)//方式2单灯灭
{
a=0xfffe;
for(i=0;i<16;i++)
{
a>>=1;
P0=a;
P2=a>>8;
delayms(200);
}
}
if(flag==2)//方式3 双灯亮
{
a=0x0003;
for(i=0;i<8;i++)
{
a>>=2;
P0=a;
P2=a>>8;
delayms(200);
}

#include <reg52.h>
void time(unsigned int ucMs);//函数声明
void main(void)
{
unsigned char ucTimes;
#define DELAY_TIME 450
while(1)
{
P1=0xff;
P0=0xff;
for(ucTimes=0;ucTimes<8;ucTimes++){
P0 = P0 - (0x01<<ucTimes);time(DELAY_TIME);}
for(ucTimes=0;ucTimes<8;ucTimes++){
P1 = P1 - (0x01<<ucTimes);time(DELAY_TIME);}
P1=0xff;
P0=0xff;
for(ucTimes=0;ucTimes<8;ucTimes++){
P1 = P1 - (0x80>>ucTimes);time(DELAY_TIME);}
for(ucTimes=0;ucTimes<8;ucTimes++){
P0 = P0 - (0x80>>ucTimes);time(DELAY_TIME);}
}}
void time(unsigned int ucMs)
{
#define DELAYTIMES 239
unsigned char ucCounter;
while(ucMs!=0) {
for(ucCounter=0; ucCounter<DELAYTIMES; ucCounter++) { }
ucMs--;
}
}

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网