[mw_shl_code=c,true]#include <STC12C5A60S2.H>
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
unsigned int cnt = 0;
unsigned char a1 = 0;
unsigned char i = 0;
unsigned char cnt1 = 0;
unsigned char key = 0;
unsigned char code a[] =
{
0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00
};
void main ()
{
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ENLED = 0;
TMOD = 0X01;
TH0 = 0XF5;
TL0 = 0X96;
TR0 = 1;
while(1)
{
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0XF5;
TL0 = 0X96;
cnt++;
if(cnt >= 250)
{
cnt = 0;
a1++;
cnt1++;
i++;
if(cnt1 >= 8)
{
cnt = 0;
}
}
}
if(i <= 7)
{
P0 = ~(0x01 << cnt1);
}
else
{
P0 = ~(0x80 >> cnt1);
}
if(i >= 16)
i = 0;
if(a1 == 40)
{
a1 = 0;
}
P0 = ~a[a1];
}
}[/mw_shl_code]
这个程序用于实现LED小灯流水,并且左边每流过去一个右边就增加一个小灯持续点亮。本程序的关键在于数组的计算。
[mw_shl_code=c,true]#include <STC12C5A60S2.H>
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
unsigned char cnt = 0;
unsigned char i = 0;
unsigned int a = 0;
void main ()
{
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ENLED = 0;
TMOD = 0X01;
TH0 = 0XF5;
TL0 = 0X96;
TR0 = 1;
P0 = ~ (0x01);
while(1)
{
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0XF5;
TL0 = 0X96;
a++;
if(a >= 500)
{
cnt++;
i++;
a = 0;
if(cnt >= 8)
{
cnt = 0;
}
}
}
if(i <= 7)
{
P0 = ~(0x01 << cnt);
}
else
{
P0 = ~(0x80 >> cnt);
}
if(i >= 16)
i = 0;
}
}[/mw_shl_code]
这个程序用于实现LED小灯的往复流水,这个程序的难点在于最后几句cnt,i值的确定。
[mw_shl_code=c,true]#include<STC12C5A60S2.H>
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
unsigned char a[] =
{
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0xbf,0xdf,0xef,0xf7,0xfb,0xfd
};
void main()
{
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ENLED = 0;
TMOD = 0x01;
TL0 = 0x96;
TH0 = 0xf5;
TR0 = 1;
while(1)
{
static unsigned char i = 0;
static unsigned int cnt = 0;
P0 = a;
if(TF0 == 1)
{
TL0 = 0x96;
TH0 = 0xf5;
TF0 = 0;
cnt++;
if(cnt == 500)
{
i++;
cnt = 0;
}
}
if(i >= 14)
i = 0;
}
}
[/mw_shl_code]
这个程序实现的功能和上一个程序相同,只不过用数组来实现,逻辑上比较简单。
代码还是得多写啊,不经常写手就会生,会浪费很多时间。也有可能是我是新手的原因吧。