说明:本系列51单片机的100个例子都采用的是STC15F2K60S2增强型的单周期单片机。
1、需求:将连接在P0口的led灯D1~D8,实现各种灯亮的效果。例如:单个左移灯亮,间隔一个左移灯亮,相邻四个左移灯亮等效果。
2、硬件电路
3、程序设计
#include <REGX51.H>
void Delay_mS(unsigned char t) //--- @12MHz,以1ms为基本单位的延时函数,t的取值为范围1~255 ---
{
unsigned char i,j;
do
{ //--- 12MHZ晶振延时约1mS ---
for(i=12;i>0;i--)
for(j=169;j>0;j--);
}
while(-- t);
}
unsigned char code LEDTAB[] = //--- 多样花灯的显示代码表 ---
{
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfc,0xf3,0xcf,0x3f,0xfa,0xf5,0xaf,0x5f,
0xf0,0x0f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x3f,0xcf,0xf3,0xfc,
0x5f,0xaf,0xf5,0xfa,0x0f,0xf0,
};
void main(void)
{
unsigned char i;
while(1)
{
i = 0; //--- 计数变量清零 ---
do
{
P0 = LEDTAB[i]; //--- 从代码表中取数送到P1口 ---
Delay_mS(100); //--- 调用延时函数 ---
i ++; //--- 指向下一个 ---
}
while(i < sizeof(LEDTAB)); //--- 代码表中的数取完了吗?---
}
}
4、总结:
可以根据自己想法改变LEDTAB表。