蓝桥杯STC15单片机流水灯

本文介绍如何使用51单片机实现流水灯效果,包括单片机I/O口的基本控制方法、在线仿真设置及常见问题解决技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

LED原理图

单片机工作的基本时序

机器周期和指令周期

修改编码格式-支持中文

15单片机在线仿真



单片机型号说明:IAP15F2K61S2

新建工程时单片机型号选择STC15F2K60S2


单片机I/O口的使用

对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个八位双向输入输出端口

LED原理图

 先来笨方法点个流水灯

#include <STC15F2K60S2.H>

sbit led0 = P0^0;	// sbit写法
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;

long a;

void main()
{
	P2 = 0xA0;	P0 = 0x00;	P2 = 0x80;	P0 = 0xFF;//初始化,防止蜂鸣器乱叫
	
	while(1)
	{
		led0 = 0; led1 = 1; led2 = 1; led3 = 1;
		for (a = 80000; a > 0; a --);    //阻塞性延时,只是看下流水灯效果!
		led0 = 1; led1 = 0; led2 = 1; led3 = 1;
		for (a = 80000; a > 0; a --);
		led0 = 1; led1 = 1; led2 = 0; led3 = 1;
		for (a = 80000; a > 0; a --);
		led0 = 1; led1 = 1; led2 = 1; led3 = 0;
		for (a = 80000; a > 0; a --);
	}
}

直接在while(1)里写流水灯代码

stc-isp烧录程序经常烧录不进去,为啥呢???


单片机工作的基本时序

机器周期和指令周期

  1. 振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,学习板上为12MHz,一个时钟周期就是1/12M = (1 / 12000000) s
  2. 状态周期每个状态周期为时钟周期的2倍,是时钟周期经过二分频后得到的
  3. 机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
  4. 指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。51单片机系统中,有单周期指令、双周期指令和四周期指令。


修改编码格式-支持中文

Keil5默认编码格式是ANSI,每次删除注释的时候,都要删除两下,而且赋值粘贴程序的时候,经常出现乱码,就很烦 

把编码格式改成UTF-8GB2312

 个人更推荐使用UTF-8编码格式

但是15单片机的头文件注释是乱码,想要查看15头文件的注释,将编码格式改成GB2312即可

注意:拔插芯片要断电进行!

15单片机是51单片机运行速度的8~12倍


15单片机在线仿真

IAP15单片机可以支持在线仿真

先添加STC库、STC仿真器驱动到Keil中,安装路径选择Keil的安装路径

安装成功提示:

Debug默认设置如下: 

设置成在线仿真模式,选择STC……51……那个

然后将COM设置成和烧录器 一样的COM口 

 设置为仿真芯片

烧录程序,在线仿真烧录程序比较慢! 

 然后就可以一步一步在线调试咯


另外使用15单片机头文件,可以直接使用P00代表P0^0 因为15的头文件中已经定义好了

编译下载程序,现象一致

#include <STC15F2K60S2.H>

long a;

void main()
{
	P2 = 0xA0;	P0 = 0x00;	P2 = 0x80;	P0 = 0xFF;//初始化,防止蜂鸣器乱叫
	
	while(1)
	{
		P00 = 0; P01 = 1; P02 = 1; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 0; P02 = 1; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 1; P02 = 0; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 1; P02 = 1; P03 = 0;
		for (a = 80000; a > 0; a --);
		
	}
}

书写方便,真香 

代码太麻烦了,修改修改

#include <STC15F2K60S2.H>

unsigned char i;
long delay;

void main()
{
	P2 = 0xA0; P0 = 0x00; P2 = 0x80; P0 = 0xFF;		//初始化
	while(1)
	{
		for ( i = 0;i < 8; i ++)
		{
			P0 = ~(0x01 << i);	//流水
			for(delay = 80000; delay > 0; delay --);	//简单的延时
		}
	}
}

具体玩法如下 

【51单片机】花式流水灯http://t.csdn.cn/FRrtB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北国无红豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值