【51单片机】学习笔记4·建立工程点亮第一颗LED
编辑点亮LED的原理:输出电压=VCC就是高电平,输出电压=GND(一般是0V)就是低电平,分别用1和0来表示,这个是理想值。GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来读取其输入电平,或者控制他输出高低电平。
如何点亮LED4?
P4.0输出低电平
P6.0输出低电平
具体工程
打开keli,选择project新建,桌面新建文件夹保存工程。
选择stc mcu,选择stc32g12k128,关闭提示窗。
新建里面插入源代码。选择file→save,保存文件名.c(.c建议小写)
右键,add existing…,可以看到代码在目录里面。
代码部分
根据文档写出了第一段代码,但是发现无法点亮
//这一段代码无法点亮
sfr P0 = 0x80;
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
void main()
{
P0M0=0X00;
P0M1=0X00;
while(1)
{
P0++;
}
}
修改代码:
sfr P0 = 0x80;//目标:改成P4
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;//P0端口操作完成
//选择寄存器
sfr P4 = 0XC0;//P4端口操作完成
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;
sfr P6 = 0XE8;//P6端口操作完成
sfr P6M1 = 0XCB;//这里教程一开始打错了(打成了C8
sfr P6M0 = 0XCC;
sbit P40 = P4^0; //三极管控制引脚
sbit P60 = P6^0;//led控制引脚
void main()
{
P0M0=0X00;
P0M1=0X00;//配置P0为准双向口
P4M0=0X00;
P4M1=0X00;//配置P4为准双向口
P6M0=0X00;
P6M1=0X00;//配置P6为准双向口
while(1) //死循环
{
//P0++;
P40 = 0;//三极管基极引脚输出低电平
P60 = 0;//LED4引脚输出低电平
}
}
成功点亮!
案例思考
思考LED为什么不会亮?
引脚不对。
怎么控制单独的一个引脚?
sbit P00 = P0^0; //选择P0.0引脚
怎么控制这个引脚输出电平?
P00 = 0; //输出低电平
P00 = 1; //输出高电平
书写规范:一行一句,大括号缩进(需要设置),缩进四格,注释完整
注释符号 // 单行注释
/* */ 多行注释
学会搜索: CTRL+F
#include定义在文件夹里写法:
#include"COMM/stc.h"
#include"COMM/usb.h"
抄代码注意大小写和中英文符号!!!
总结内容:
了解新工程的一个基本流程
了解IO口的高低电平的含义
务必牢记端口的几个寄存器 PxM0,PxM1,Px
务必牢记 sbit 的 作用,牢记#include的作用
了解USB_CDC不停电下载的用
USB_HID不停电下载
硬件分析点亮的原理
首先分析电路:
SYS-VCC代表着是电源的正极,下方是一个PNP三极管。
在这个电路中,要想LED点亮,就需要三极管导通、P6.X低电平。
PNP三极管的基极连接在P4.0上,因此,当P4.0低电平时,电路导通。
所以实验箱点亮LED,需要P40和P60低电平。
不断电刷固件的方法(STC32实验箱)
首先是头文件之类的
#include "stc.h"
#include "usb.h"
void sys_init();
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
主函数
void main()
{
sys_init();
usb_init();
EA = 1;
while(1){}
}
sys_init函数
void sys_init()
{
P3M0 = 0x00;
P3M1 = 0x00;
WTST = 0x00;
EAXFR = 1;
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
}
然后修改一下STC-ISP设置,就可以快乐的不断电下载了!
- 0
- 0
-
赞助
支付宝微信 -
分享