单片机高效入门
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教材补充例子: 外部引脚输入控制P0口LED亮灭
#include “STC15W4K.H” // 注意宏定义语句后面无分号
void port_mode()
// 端口模式
{
P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00; P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
5
32
0.1uF
GND +5V
0.1uF
0.1uF 0.1uF
GND
0.1uF
1 2 3
4 5 6 7
8
C1+ Vcc
V+ Gnd
C1- T1OUT
C2+ R1IN
C2- R1OUT V- T1IN T2OUT T2IN R2IN R2OUT
16
15 14 13 12 11 10 9
SP3232
(或MAX232)
GND
17(P5.4/RST)
例1.2 让接在P0.0口二极管闪烁发光
#include “STC15W4K.H” // include称为文件包含命令
sbit P0_0 = P0^0;
// sbit是位定义
void delay500ms(void)
{
unsigned char i,j,k;
for(i=41;i>0;i--) // 注意后面没分号
51单片机主要发展历程:
AT89C51(已停产)——AT89S51(已淘汰)—— STC89C52(2004年,已落后)——STC12系列 (2007年)——STC15F系列(2011年)—— STC15W系列(2014年,最新运用主流)。
本书主讲单片机型号:STC15W系列中的典型型 号:IAP15W4K58S4 ,辅助性的介绍 STC15F2K60S2与STC15W408S
(T0)P3.4
GND
0.1uF
18 P5.4 19 VCC 20 P5.5
(INT1)P3.3 (INT0)P3.2 (TXD)P3.1
GND
(RXD)P3.0
40 39 38
37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
单片机串口(母)
插接到计 算机串口
// P2口置弱上拉高电平输出
while(1)
{
P0 = P2; // 循环检测P2口输入电平高低。
}
}
8 软件仿真
9 硬件仿真
n 在STC程序下载软件中首先选择“Keil仿真设置”页面,点击“添加型号和头文件到Keil 中”,在出现的目录选择窗口中,定位到Keil的安装目录(比如“C:\Keil818\”),“确 定”后出现“STC MCU型号添加成功”的提示信息,点“确定”。
然后按下图设置硬件仿真
确认前面我们所创建的项目编译没有错误后,按“Ctrl+F5”或工具栏图标 开始调 试,若硬件连接无误的话,将会进入到与软件仿真类似的调试界面,只是现在可以一步一步 执行程序并控制硬件动作了)。
有时进入调试环境可能会失败,首先检查仿真串口号选择是否有误,另外可将单片机断电 后重新上电试试,若使用的USB转串口,可将USB头断开几秒再插上,如果仍然不行,请检查 程序代码是否占用了仿真调试接口(P3.0与P3.1 )。
12 P1.2(ADC2)
IAP15W4K58S4
P4.5 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P4.4 P4.2
13 P1.3(ADC3) 14 P1.4(ADC4) 15 P1.5(ADC5) 16 P1.6(ADC6) 17 P1.7(ADC7)
P4.1 P3.7 P3.6 (T1)P3.5
P4M1=0x00;P4M0=0x00;P5M1=0x00;P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00;P7M0=0x00;
}
void main() {
unsigned char a=0; port_mode(); while(1) {
P0 =~(1<<a++); delay100ms(); if (a==0x08) {
10 延时软件使用方法
长时间延时,函数固定格式:
void delay500ms()
// 大范围精确延时函数
{
unsigned char i,j,k; // i,j,k由软件计算出确定。
for(i=41;i>0;i--)
// 注意后面没分号
for(j=133;j>0;j--) // 注意后面没分号
for(k=252;k>0;k--); // 注意后面有分号
51单片机轻松入门
—基于STC15W4K系列
(C语言版)
李友全 编著
博客地址: http://xgliyouquan.blog.163.com
2016年3月编辑整理(第1章)
第1章 单片机高效入门
1 认识单片机 2 制作一个最简单的单片机实验电路 3 使用Keil软件编写最简单的程序(点亮一个发光二极管) 4 计算机程序下载到单片机 5 I/O口4种工作模式 6 流水灯实例 7 I/O口输入测试 8 软件仿真 9 硬件仿真 10 延时软件使用方法 11 main()、void main()和int main()的区别 12 printf 格式化输出函数(单片机与计算机通信) 13 学习用实验板介绍
在C语言中main()和void main()区别:一个有返回值(没声明类型的 默认是返回值int型),一个无返回值,特别在单片机运用中由于主函数 没有其它函数调用它,所以返回的值也就没什么用。所以一般都写的 void main(),这时程序中不需要return语句,如果main()函数前没有void (默认为int),或者写为int main()程序中就必须有return语句,比如: int main() {
取反前 0 1 0 0 1 0 1 1 取反后 1 0 1 1 0 1 0 0
例1.5 最精简的流水灯实例(A)
#include "STC15W4K.H"
// 注意宏定义语句后面无分号
void delay100ms()
// 11.0592MHz
{
unsigned char i,j,k; // i,j,k由由软件计算出并验证正确。
a=0; } } }
// 将单片机所有端口配置为准双向弱上拉方式
// 第一次运行时 0000 0001<< 0 = 0000 0001
// 允许左移8次。
00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
Βιβλιοθήκη Baidu
7 I/O口输入测试
n 保持IAP15W4K58S4实验电路仍然与电脑串口相连,如上图所示,先选择仿真芯片运 行时的R/C时钟频率或使用外部晶振,然后点击“将IAP15W4K58S4设置为仿真芯片”按 钮,给电路板上电,此时就将会有程序向芯片中下载,下载完成后仿真器便制作完成 了,IAP15W4K58S4设置成仿真芯片后,要想再变成一般的单片机无需任何操作,直接 将它当作单片机下载程序使用就可以了。 n 在Keil中新建项目,出现下图 对话框,选择“STC MCU Database”项,然后从列表 中选择相应的MCU型号,在此选择“STC15W4K32S4”,点击“OK”完成选择。
编程语言与开发环境:当今最流行的具有跨平台 优势的C语言与keil编译软件
2 制作一个最简单的单片机实验电路
LED1
R1 1
+5V
1K
2 P0.0 3 P0.1
共8路
4 P0.2 5 P0.3
R8
6 P0.4 7 P0.5
LED8
1K
8 P0.6 9 P0.7
10 P1.0(ADC0)
11 P1.1(ADC1)
2号单片机仿真下载接口
实验主电路(2),用于计算机无串口情况
T1
220V
1N4007 1N4007 U1 LM7805
S1 D1 D2
常闭开关
9V
1
3
2
C1
C2
D3
D4
1N4007 1N4007
470uF/50V 470uF/50V
LM7805
+5V
1 23 输入 GND 输出
GND
5V供电电路
D- D+ +5V(VCC) GND
计算机串口外形
连接到计算机串口
3 使用Keil软件编写最简单的程序 (点亮一个发光二极管)
1、安装Keil软件
2、安装汉字补丁
3、 新建工程:工程名与C文件名可随便输入,但不能有汉字,更不能与C
语言的关键字或函数名称相同,否则会发生冲突(编译出现很多错误或警告)
Keil中输入程序代码
#include "STC15W4K.H" sbit P0_0 = P0^0; // sbit是位定义 void main () {
}
}
位左移运算符
6 流水灯实例
位左移运算符“<<”用来将一个数的各个二进制位全部同时左移,左移时右侧 空白位补0。 例如:若a=0x4b (二进制:01001011),则表达式a=a<<2,即将a的值左移2 位,结果为:
移位前 0 1 0 0 1 0 1 1
移位后 0 0 1 0 1 1 0 0
按位取反运算符
P0_0=0; // 点亮LED while(1); // 让程序停在这里 }
4 计算机程序下载到单片机
5 I/O口4种工作模式
VCC
VCC
20K
准双向,弱上拉
强推挽
高阻输入
开漏
复位下载电路
+5V
1K RESET
240Ω
IAP15W4K58S4(直插)
2.5-5.5V
18(VCC) 20(GND)
for(i=157;i>0;i--) // 注意后面没分号
for(j=9;j>0;j--)
// 注意后面没分号
for(k=194;k>0;k--); // 注意后面有分号
}
void port_mode()
// 端口模式(准双向、弱上拉)
{
P0M1=0x00;P0M0=0x00;P1M1=0x00;P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
}
短暂延时,函数固定格式:
void delay (unsigned char t) // 小范围精确延时函数
{
while(--t);
}
根据不同的延时时间修改函数中的变量 i,j,k 与 t 即可, i,j,k 与 t 由笔者编写的 软件直接计算得出
11 main()、void main()和int main()的区别
TXD 2
GND 1 GND
LED8
GND
D1
B5819W
P3.0
P3.0 (Rxd)
P3.1 P3.1 (Txd)
R13 300Ω
C5 0.01uF
C8
GND
22P
CR3
12MHz
C7
22P
VCC-5V(2)
C6
10uF F3 100mA
计算机 USB口
GND
4
D+
3
D-
2
VCC
1
GND
USB 接口
for(j=133;j>0;j--) // 注意后面没分号
for(k=252;k>0;k--); // 注意后面有分号
}
void main ()
{
for (;;)
// for (;;) 让for下面1对大括号内程序无限循环
{
P0_0 =!P0_0; // 取反P0_0引脚
delay500ms(); // 延时500ms,高电平500ms,低电平500ms,周期1S
1 认识单片机
单片机全称是单片微型计算机(与计算机原理相同),外 形与普通集成电路相同,但普通集成电路功能是固定死 的,使用者无法更改,单片机的功能是可以通过编写程序 进行更改的。
STC15 像汽车, 使用简便、 成本低
当今主流的单片机:
STM32 像飞机, 使用复杂、 成本高
有人说:随着飞行技术的发展,飞机的价格越来越低,以后汽车会逐渐被淘汰。 你信吗?若不信,就老老实实先把STC15学好吧,别整天一山望着另一山高,到 头来一无所成,况且学好我这本书可以为STM32打下坚实的基础。
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
unsigned char a;
port_mode();
// 将单片机所有端口配置为准双向弱上拉方式
P2 = 0xFF;
GND
实验主电路(1),建议选择
5V电源
单片机
VCC-5V(2)
R14 1K
IC7
16 Vcc
15
14
13 DTR
12 DCD
11 RI
10 DSR
USB转串口电路(2)
LED9 R15 1K
CH340G
9 CTS
RXD RTS
TXD R232
8 XO
7 XI
5 UD+
6 UD-
4 V3
RXD 3