刚学C语言,写了一个追逐式流水灯;自我感觉太繁琐,请高手指点一下,有没有更简单的。
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.80编译通过
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
//函数申明
void delay1(uint x);
//=======================================//=============
void main() //主程序
{
uchar x,y,z; //定义变量
x=7;
TRISC=0X00; //C口定义为输出
PORTC=0Xfe; //点亮RCO口LED,为共阳
while(1)
{
PORTC&=0Xfe;
delay1(200);
if(x==0)
{
PORTC=0Xfe;
x=7;
}
if(x==1)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC&=0X03;
PORTC|=0X01;
delay1(200);
}
x--;
}
if(x==2)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC&=0X07;
PORTC|=0X01;
delay1(200);
}
x--;
}
if(x==3)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC&=0X0f;
PORTC|=0X01;
delay1(200);
}
x--;
}
if(x==4)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1;
PORTC|=0X01;
PORTC&=0X1f;
delay1(200);
}
x--;
}
if(x==5)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC&=0X3f;
PORTC|=0X01;
delay1(200);
}
x--;
}
if(x==6)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC&=0X7f;
PORTC|=0X01;
delay1(200);
}
x--;
}
if(x==7)
{
for(z=x;z>0;z--)
{
PORTC=PORTC<<1; //显示左移一位
PORTC|=0X01;
delay1(200);
}
x--;
}
}
}
//=======================================//=============
//延时程序
void delay1(uint x) //延时时间为(X)ms
{
uint a,b;
for(a=x;a>0;a--)
for(b=75;b>0;b--); //延时数较准确固定多26us
}
//======================================================================
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
不过还有一个问题,最高位始终不会亮,不知道有没有解决办法
-----------------------------------------------------------------------
在你的程序基础上改了一下,可以达到我想要的效果了,谢谢。
修改后的程序:
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
//函数申明
void delay1(uint x);
//=======================================//=============
void main() //主程序
{
uchar YiWei;
uchar OutBuf;
YiWei = 0x01; //*赋值为1*//
OutBuf = 0x00;
TRISC=0X00; //C口定义为输出
PORTC=0Xff; //点亮RCO口LED,为共阳
while(1)
{
if(OutBuf==0xFE)//循环一周后清零 /*判断值改为0XFE*/
{
YiWei = 0x01; //*赋值为1*//
OutBuf = 0x00;
}
YiWei<<=1;
if((OutBuf|YiWei)==OutBuf)
{
OutBuf>>=1;
OutBuf += 0x80;
YiWei = 0x01;
}
PORTC = ~(OutBuf + YiWei); /*取消循环右移*/
delay1(200);
}
}
//=======================================//=============
//延时程序
void delay1(uint x) //延时时间为(X)ms
{
uint a,b;
for(a=x;a>0;a--)
for(b=75;b>0;b--); //延时数较准确固定多26us
}
(原文件名:跑马灯方案.JPG)
一周热门 更多>