51单片机 (2)流水灯实验
一、控制一/多灯亮灭
汇编实现
;注释
LOOP:
;SETB P1.1 ;(1)熄灭灯
MOV P1,#0FFH;
LCALL DELAY ;(2)延时一段时间
;CLR P1.1 ;(3)点亮灯
MOV P1,#0FDH;
LCALL DELAY ;(4)延时一段时间
AJMP LOOP ;(5)跳转到第一句LOOP处
;以下子程序
DELAY:
MOV R7,#250 ;
D1: MOV R6,#250 ;
D2: DJNZ R6,D2 ;R6=R6-1;IF(R6!=0) GOTO D2;
DJNZ R7,D1 ;
RET ;返回主程序
END ;子程序结束标志
C语言实现
#include
sbit led=P1^3;
void Delay(){
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<200;j++);
}
void main(){
while(1){
P1=0xfe;
Delay(); Delay();Delay();Delay();
led=0;
Delay(); Delay();Delay();Delay();
P1=0x00;
Delay(); Delay();Delay();Delay();
}
}
开关控制单灯亮灭
#include
sbit led=P1^3;
void main(){
while(1){
if(P0^1==0){ //开关是否按下
led=0;
}else{
led=1;
}
}
}
流水灯表示乘法运算结果
#include
void main(void){
unsigned char s,m,n;
m=64;
n=71;
s=m*n; //s=4544=17*256+192 所以用P0表示17、P1表示192
P0=s/256;
P1=s%256;
}
走马灯
#include
void Delay(){
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++);
}
void main(){
unsigned int i;
i=0x01;
while(1){
P1=i; Delay();
i<<=1;
if(i==0x100) i=0x01;
}
}
摘自《单机片C语言编程100个实例》
//实例19:用if语句控制P0口8位LED的流水方向
#include
//包含单片机寄存器的头文件 sbit S1=P1^4; //将S1位定义为P1.4
sbit S2=P1^5; //将S2位定义为P1.5
/*****************************
函数功能:主函数
*****************************/
void main(void)
{
while(1)
{
if(S1==0) //如果按键S1按下
P0=0x0f; //P0口高四位LED点亮
if(S2==0) //如果按键S2按下
P0=0xf0; //P0口低四位LED点亮
}
}
上一篇:51单片机 (3)定时器和计数器
下一篇:对STM32的理解
- Keil MDK破解过程详解[18年05月20日 11:11]
- STM32F407之模拟I2C(二)之24C128[18年05月20日 12:18]
- STM32F1使用I/0模拟I2C接口[18年05月20日 12:17]
- STM32模拟I2C程序[18年05月20日 12:13]
- STM8S 模拟I2C程序[18年05月20日 12:14]
- 普通IO口模拟实现I2C通信及应用解析[18年05月20日 12:12]