先来个流水灯的程序,找找与51的不同,后续不再详细阐述。
#include "reg52.h"
#include "intrins.h"
void Delay1000ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void cls_buzz()//关闭继电器等外设
{
P2 = P2 & 0x1f | 0xa0;//Y5C
P0 = 0x00;
P2 = P2 & 0x1f;
}
void main()
{
cls_buzz();
P2 = P2 & 0x1f | 0x80;//P27~P25清零,再定位Y4C
P0 = 0xfe;
P2 = P2 & 0x1f; //P27~P25清零
while(1)
{
Delay1000ms();
P2 = P2 & 0x1f | 0x80;//Y4C
P0 = _crol_(P0,1);
P2 = P2 & 0x1f;
}
}
可以发现与51编程还是有点不一样的,这是因为蓝桥杯单片机用了一个38译码器如图:
可以发现,要想对LED进行操作,则必须使用Y4C为1,而Y4C又由Y4与WR或非得到,且WR可接地。故38译码器需选中Y4,即输入为100,则P2口赋值为0x80(1000 0000)。因为单片机上电引脚输出为1,所以不先关闭继电器等外设的话继电器会打开,蜂鸣器会响。