/*编译环境**************************************
功能:跑马灯实验,依靠程序延时控制跑马灯
CPU:STC12C5A系列
IDE:KEIL uVission2 V2.4a
************************************************/
/*资源分配**************************************
P0: 跑马灯
P33:跑马灯整体控制
P24-P27:数码管控制
************************************************/
#include "stc12c5a.h"
#defineDtube_SEG3 P27//每一位的数码管总控IO定义
#defineDtube_SEG2 P26
#defineDtube_SEG1 P25
#defineDtube_SEG0 P24
#defineLED_SEGP33//跑马灯总控IO定义
#defineHORSE_BUS P0//跑马灯定义
void Delay_Time(unsigned int time)//延时函数
{
while(time>0)
time--;
}
void main(void)
{
unsigned char horse_led;
P2M1&=~0xf0; //P2口7 6 5 4 3 2 1 0
// O O O O :数码管总控IO为强推挽输出
//P2M1 0 0 0 0
P2M0|=0xf0; //P2M01 1 1 1
P3M1&=~0x08; //P3口7 6 5 4 3 2 1 0
//O:跑马灯总控IO为强推挽输出
//P3M1 0
P3M0|=0x08; //P3M0 1
Dtube_SEG0=0; //关闭数码管显示
Dtube_SEG1=0;
Dtube_SEG2=0;
Dtube_SEG3=0;
LED_SEG=1; //打开跑马灯显示
horse_led=1; //跑马灯初始值
for(;;)
{
HORSE_BUS=horse_led; //把跑马灯的值送出,点亮一个灯
horse_led<<=1; //把跑马灯的值左移,准备点亮下一个灯.更改此处可以改变方向
if(horse_led==0)//直到点亮最后一个灯,
{
horse_led=1;//再回到第一个灯
}
Delay_Time(50000);//延时,更改此处可以改变周期
}
}