使用keil创建一个项目
- 创建项目工程文件夹,可以当作模板Template
- 创建文件,取名main.c (要打开拓展名,在文件夹窗口上找 “查看”,勾选“文件拓展名”)
- 进入keil主页面,工具栏project->new uVision project->选择第一步的工程文件夹位置->输入 工程名字->选择芯片类型AT89c52->会提示是否拷贝STARTUP.A51,选择是->生成了工程目录- >在工程目录Source Group1上右键鼠标->add Exiting file to Source Group1…->选择代码文 件main.c
- 编程
- 编译,选择输出文件有hex
用什么把代码放进单片机里面
- 单片机通过type-C数据线和电脑连接(如果不识别,安装ch340驱动)
- 选择单片机型号STC89C52RC
- 选择生成的执行程序文件template.hex
- 点击”下载/编程“按钮
- 单片机开关拨动重新上电
- 自动检测并下载了程序,看到灯亮。如果失败,仔细对照 以上每一步内容
初识单片机
单片机(Single-Chip Microcomputer)是一种集成电路芯片, 把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、 多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多 路转换器、A/D转换器等电路) 集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
基本IO口控制
单片机编程是什么:人类要求单片机干具体的活,有点像提前写个小纸条贴冰箱上,告诉你女朋友 煮鸡蛋不加水
单片机执行程序怎么理解: 女朋友看到纸条后,照做!
单片机能做什么事情:IO口供电,串口数据传输等
肉眼可见的引脚是什么:方便人类对单片机IO口,串口接东西
单片机CPU怎么找到IO口:通过寻址,说白了有一些地址数据,头文件帮你做很多了
怎么写纸条(编程)找到IO口呢:ANSI C
//sfr“指令”: 用来直接描述硬件地址,小白先理解成“一组IO口”的起始地址中数据 sfr P0 = 0x80; P0 = 0;
怎么找到IO口的具体一个引脚呢:
//sbit“指令”:对应可位寻址空间的一个位,小白先理解成“一个IO口/针脚”的地址中数据 sbit led2 = P3^6 ; //c语言的一个字节,char型就是8位
点亮LED
#include "reg52.h" sbit led1 = P3^7;//根于原理图,I/O口3.7指向LED1 sbit led2 = P3^6; sbit led3 = P3^1; sbit led4 = P3^0; void main() { led1 = 0;//低电平点亮 led2 = 0; led3 = 0; led4 = 0; while(1); }
LED闪烁
软件生成延时函数:
#include "reg52.h" sbit led1 = P3^7;//led1接3.7引脚 void Delay500ms() //@11.0592MHz { unsigned char i, j, k; i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1){ led1 = 0;//灯亮 Delay500ms();//保持灯亮500ms led1 = 1;//灯灭 Delay500ms();//保持灯灭500ms } }
按键亮灯
按键电路
根据原理图电路分析,按键松开,KEY1为1,按键按下,KEY1为0。
#include "reg52.h" sbit led1 = P3^7;//led1接P3.7 sbit key1 = P2^1;//key1接P2.1 sbit key2 = P2^0;//key2接P2.0 void main() { while(1) { if (key1 == 0)//key1被按下 { led1 = 0;//灯亮 } if (key2 == 0)//key2被按下 { led1 = 1;//灯灭 } } }
延时消除抖动
当按键按下的那一时刻和松开的时候有类似于锯齿的形状那就是按键抖动,这个抖动不是我们人为能控制得了的,所以我们只能对进行硬件消抖或者进行软件消抖.
#include "reg52.h" sbit led1 = P3^7;//根据原理图,led1接P3.7 sbit key1 = P2^1;//根据原理图,key1接P2.1 sbit key2 = P2^0;//根据原理图,key2接P2.0 void Delay50ms() //@11.0592MHz,延时20ms { unsigned char i, j; i = 90; j = 163; do { while (--j); } while (--i); } void main() { while(1) { if (key1 == 0)//key1按下 { Delay50ms(); while(key1 == 0) Delay50ms(); led1 = 0;//灯亮 } if (key2 == 0)//key2按下 { Delay50ms(); while(key2 == 0) Delay50ms(); led1 = 1;//灯灭 } } }
一个按键控制灯的状态
if(key1 == 0) { Delay50ms(); while(key1 == 0) Delay50ms(); led1 = !led1;//按键1按下一次,灯的状态改变一次 }
keil环境搭建和单片机的认识、点亮第一个LED
2024-03-31 07:28:05 18 阅读