STC51学习记录

146 阅读2分钟

写在前面

51单片机中的接线问题,分为两种,开发板内部接线和外接设备的接线

1.开发板内部接线

2.外部设备的接线

正极接正极,负极接负极(5V接5V,GND接GND)

其他接口可随意接,在开发过程中,根据实际接线情况进行

keil5安装

管理员身份运行Keil uVision4

File——lisence management 将右侧CID复制到注册机中

管理员身份运行注册机KEIL_Lic

将CID复制并产生破解码

注意:低电平亮灯!!!

1.点灯大师

#include "reg52.h"
//点亮一盏灯
sbit led1=P3^7;//根据原理图,灯led1指向3.7口
//不断访问来判断是否按下按键1
void main()
{
led1=0;//低电平为亮
}

1.1借助stc-isp上的软件延时计算器让灯闪烁

#include "reg52.h"
sbit led1=P3^7;
void Delay100ms()		//@11.0592MHz
{
	unsigned char i, j;
	i = 180;
	j = 73;
	do
	{
		while (--j);
	} while (--i);
}
void main()
{while(1){
led1=0;//低电平为亮
Delay100ms();
led1=1;//高电平为暗
Delay100ms();
}
}

1.2通过按键来控制灯的亮灭(软件防抖)

#include "reg52.h"
sbit led1=P3^7;//根据原理图,灯led1指向3.7口、按键1指向2.1口
sbit led2=P3^6;
sbit key1=P2^1;
sbit key2=P2^0;
//注意是毫秒防抖。软件实现
void Delay200ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	i = 2;
	j = 103;
	k = 147;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1){//查询法,不断访问来判断是否按下按键1
		Delay200ms();
		if(key1==0){
			led1=!led1;//按键1控制灯1,取反语句,实现状态翻转
			Delay200ms();
		}
		if(key2==0){
			led2=!led2;//按键2控制灯2
			Delay200ms();
		}
	}
}

led1=!led1;//按键1控制灯1,取反语句,实现状态翻转

1.3通过震动传感器来控制灯的亮灭(震动控制灯)

如何知道是否发生振动?

振动后的信号表现又是什么?

振动传感器控制灯

sbit led1=P3^7;
sbit vibrate=P3^3;//D0接到P3.3口
void main()
{
        while(1){
                Delay2000ms();//延时
                if(vibrate==0){//发生震动时,D0输出低电平
                        led1=0;//亮灯
                        Delay2000ms();
                        led1 = 1;
                }else{
                        led1 = 1;//灭灯
        }
    }
}