1.
#include<stc15.h>
unsigned int i=0;
sbit LED1=P0^0;//定义特殊功能寄存器的位变量
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
while(1)
{
LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;
for(i=0;i<65535;i++);
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;
for(i=0;i<65535;i++);
}
}
2.毫秒延迟子函数:
加上宏定义的使用
#include<stc15.h>
//#define DT 500 宏定义,但是在执行过程中不可更改时间
unsigned int DT = 500;
unsigned char Num=0;//可以让程序在运行中更改DT的值
unsigned int i=0;
sfr LED=0X80;
void IO_Init(void);
void Delay_MS(unsigned int MS);
void main(void)
{
void IO_Init(void);
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
while(1)
{
LED=0XFE; // 1111 1110
Delay_MS(DT);
LED=0XFD; // 1111 1101
Delay_MS(DT);
LED=0XFB; // 1111 1011
Delay_MS(DT);
LED=0XF7; // 1111 0111
Delay_MS(DT);
LED=0XEF; // 1110 1111
Delay_MS(DT);
LED=0XDF; // 1101 1111
Delay_MS(DT);
LED=0XBF; // 1011 1111
Delay_MS(DT);
LED=0X7F; // 0111 1111
Delay_MS(DT);
if(++Num==200)//每运行200次,则DT-50,闪烁将变快
{
Num=0;
DT=DT-100;
}
}
}
void Delay_MS(unsigned int MS)
{
unsigned int i,j;
for(i=0;i<MS;i++)
{
for(j=853;j>0;j--);
}
}
/*void IO_Init(void)
{
P0M0 = 0x00; P0M1 = 0x00; //IO初始化为准双向I/O模式,STC15F系列可以写
P1M0 = 0x00; P1M1 = 0x00; //IO初始化为准双向I/O模式,STC15F系列可不写
P2M0 = 0x00; P2M1 = 0x00; //IO初始化为准双向I/O模式,STC15F系列可不写
P3M0 = 0x00; P3M1 = 0x00; //IO初始化为准双向I/O模式,STC15F系列可不写
P4M0 = 0x00; P4M1 = 0x00; //IO初始化为准双向I/O模式,STC15F系列可不写
P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; P4=0XFF; P5=0XFF; //P0、P1、P2、P3、P4、P5输出为高电平 STC15系列单片机可不写
}
*/
3.并口移位控制的方式:
移位取反:
for(i=0;i<8;i++)
{
LED=~(0X01<<i);
Delay_MS(DT);
}
#include<stc15.h>
//#define DT 500 宏定义,但是在执行过程中不可更改时间
unsigned int DT = 500;
unsigned int LED=0;
void Delay_MS(unsigned int MS);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
while(1)
{
for(LED=0;LED<8;LED++)
{
P0=~(0X01<<LED);//移位取反,当i=0时,即0000 0001向左移0个位置,后取反为1111 1110
//依次类推,左移一位后面补0
Delay_MS(DT);
}
}
}
void Delay_MS(unsigned int MS)
{
unsigned int i,j;
for(i=0;i<MS;i++)
{
for(j=853;j>0;j--);
}
}
4.并口循环移位控制方式:
LED=_crol_(LED,1);
#include<stc15.h>
#include<intrins.h> //支持循环移位函数使用的头文件
unsigned int DT=300;
unsigned char LED=0XFE; //只要小于255,就可以使用char, int也可以使用
void Delay_MS(unsigned int MS);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
while(1)
{
P0=LED;
Delay_MS(DT);
LED=_crol_(LED,1);// 1111 1110循环移位,向左移一位,移出来的补在最后面
}
}
void Delay_MS(unsigned int MS)
{
unsigned int i,j;
for(i=0;i<MS;i++)
{
for(j=853;j>0;j--);
}
}