51单片机开发第一站(点灯)

预解决问题:

点亮流水灯 Led1-8,全部点亮
点亮流水灯,按 3 秒依次从低到高循环点亮

准备工作:

  • 软件:ckeil5、STC-ISP(推荐:安装博客
  • 硬件:51单片机(本博客选用普中)
  • 前置知识:C语言语法,16进制与二进制的关系,位运算(与[&]、或[|]、异或[^]、取反[~]、左移[<<]、右移[>>])

开始上手:

代码编写:

  1. 新建工程:project -> new uVision Project -> 自己命名工程名(建议全英文) -> 保存
    在这里插入图片描述
  2. 新建C文件:
    在这里插入图片描述
    在这里插入图片描述
  3. 根据原理图编写代码
  • 原理图(来源:B站江科大,侵权删)
    在这里插入图片描述
  • 目标:点亮流水灯 Led1-8,全部点亮
    原理:引脚通电即可亮,单片机中的C代码0表示通电,1表示关闭。导入 <REGX52.H> 头文件(里面有51型号单片机的引脚地址定义等内容)。根据上面的原理图,可知 P2 代表着整个led等模块,而控制具体某个灯可用 P2_x 的形式。
#include <REGX52.H>
void main(){
	P2 = 0x00; //0000 0000=》全部引脚通电(也可以一个个写)
	while(1){};// 单片机会循环执行main方法,这里断开后,P2不会连续执行通电操作
}

单片机烧录:

  1. 生成hex文件:

在这里插入图片描述
2. 编译:
在这里插入图片描述
3. 数据线连接电脑与单片机,打开STC-ISP软件:
在这里插入图片描述
烧录成功后STC-ISP界面右下角会有显示。
4. 结果展示:
在这里插入图片描述

  • 目标:点亮流水灯,按 0.5 秒依次从低到高循环点亮
    步骤与上方一致,下面是相关的C语言代码,仅供参考:
#include <REGX52.H>
#include <intrins.h>//定义了包括 _nop_() 在内的函数

void DelaMs(unsigned int num)		//@11.0592MHz
{
	unsigned char i, j;
	if(num<0){//小于0,默认1ms
		num=1;
	}
	while(num--){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}


void main(){
	unsigned int loop = 0xFF;
	while(1){
		P2 = loop;  // 点亮LED
		loop = loop << 1;  // 左移一位,左右移位自动补零
		if (loop == 0) {
			loop = 0xFF;  // 重新开始
		}else{
			DelaMs(3*1000);     // 延时3s
		}
	}
		
}

上方延时函数的获取途径:STC-ISP->软件延时计算器在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值