单片机C语言案例教程电子教案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机C语言案例教程电子教案
第1章 单片机基础 第3章 用数码管模拟的循环灯 第4章 中断资源的应用编程 第5章 日历时钟DS1302的应用编程 第6章 AT24C02的应用编程 第7章 DS18B20的应用编程 第8章 有时控功能和温度显示的电子钟项目设计 第9章 16×16点阵LED汉字显示屏项目设计 第10章 使用片内EEPROM存储器 第11章 单片机与PC的串行通信 第12章 单片机片外数据存储器的扩充 第13章 A/D转换与D/A转换简介
P0=0xc0;//赋"0"的笔段码 bw=0; bw=1; P0=0x92;//赋"5"的笔段码 sw=0; sw=1; P0=0xf9;//赋"1"的笔段码 gw=0; gw=1; }
2 案例源程序要点分析:
本案例中对四位数码管的每一位都要进行控制,因此要定义四个位寻址 变量:qw、bw、sw和gw。主函数由五个执行段组成。第一执行段有四个赋 值语句,作用是关断四个数码管的显示;第二段有三个赋值语句,作用是在 数码管的第1位(从左数到右,下同)上显示“8”后关断;第三段是在数码 管的第2位上显示“0”后关断;第四段是在数码管的第3位上显示“5”后关断; 第五段是在数码管的第4位上显示“1”后关断。
第四步,设置编译和链接环境。 1 单击ProjectA菜单及其子菜单option for target ‘Target1’, 如下图。
将弹出编译链接设置界面,如下图。
在上图中,单击Output标签后,在复选框Great HEX Fi:
上打√,其余可用默认值,然后确定,如下图
。
第五步,编译成HEX文件。单击Project菜单及其子菜单Ruild all target files,系统就将.C源程序文件编译成指定格式的.HEX文件. 如下图。
左中为STC90C52的实物图,可替代 STC89C52,且性能更好。 左下为STC12C5A32的实物图,是所谓的 1T单片机,其工作速度比上面两个型号快得多。
2 51系列单片机的内部结构示意图
3 51系列单片机引脚功能图
左图为8051系列单片机的 引脚功能图,它采用双列直插 40引脚封装,它所有引脚的功 能我们要全部记住。
void main() { qw=1;//这四个语句的作用是关断四位数码管 bw=1; sw=1; gw=1; //定义MCU管脚P2.0位寻址变量名 //定义MCU管脚P2.1位寻址变量名 //定义MCU管脚P2.2位寻址变量名 //定义MCU管脚P2.3位寻址变量名
P0=0x80;//赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
Disp_led() { qw=1; bw=1; sw=1; gw=1;
//这四个语句的作用是关断四位数码管
P0=0x80; //赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
P0=0xc0; //赋"0"的笔段码 bw=0; bw=1; P0=0x92; //赋"5"的笔段码 sw=0; sw=1;
2 源程序分析:本程序用三个赋值语句实现了它的功能。第一 个赋值语句使P0代表的口0的8条I/O引脚输出低电平,从而使 四位数码管共32个发光二极管的负极为低电平;第二个赋值语 句、第三个赋值语句分别使口2的最低两位引脚输出低电平,从 而使PNP管Q2、Q3导通,进而使左边两位数码管的共阳极上 为高电平。于是,左边两位数码管上的发光二极管全亮。也就 是,在四位数码管的左边显示出“8。8。”。
第1章 单片机基础
1.1 单片机是块集成电路芯片
1 我们所说的单片机,是一块集成电路芯片。下面的三个型号的单片机 芯片,都属于8051系列,其品牌为STC。它们的内部组成可认为完全相 同,都能直接用在本书单片机学习板的MCU插座上,但性能有所差异。
左上为STC89C52的实物图,其片内 存储器容量大于STC89C51。
3 程序敲完后,单击“File”菜单及其子菜单“Save”,如下 图
4 在其弹出的对话框中的文件名文本框中输入相应的文件名 “stc89c52.c”,如下图
注意:这里必须输入C51源程序的扩展名“.c”来保存。
第三步,把程序文件加载到工程项目中。 1 在Project Windows窗口内,展开Tageget 1,右击 Source Group1,如下图。
4
右击后出现如下界面
在上图菜单中单击“Add Files to Group ‘Source Group1’”, 则弹出如下页对话框。
5 选中“stc89c52”文件后单击“Add”按钮,再单击 “Clese”按钮,则加载工作结束。如下图。
此时若展开Source Group1,就能看到stc89c52.c已经 加系统
1 本书单片机学习板电原理路图
2 本书单片机学习板印刷电路图
3 本书单片机学习板四位数码管电原理图
1.3对单片机编程以实现单片机系统的功能
• 案例1:编程实现,在4位数码管的最左位上显示“8。”
案例源程序
#include "reg51.h" sbit qw= P2^0; main() 程序的第1行称为预处理命令。 第2行是定义位寻址变量。
3 案例3程序的流程图
4 案例3程序的下载过程与运行效果
15.3案例4:主动形式的“8051”显示
1 对案例3程序的基本分析:在案例3中,main函数中的最后 一个操作是“gw=1;”,这就是关掉第4位数码管的显示,按此程 序设计的本来效果,数码管上显示的“8051”应是一闪而过, 此后数码管因全部被关断而无任何显示。
3 用流程图表示算法 案例2程序的流程图 案例1程序的流程图
用自然语言描述操作步骤
用C 语句描术操作步 骤
4 仿案例1程序的上机操作全过程,完成案例2程序的下载和运行
5 案例2程序的下载操作与运行效果
1.5.2 案例3:被动形式的“8051”显示
1 源程序
#include "reg51.h" sbit qw=P2^0; sbit bw=P2^1; sbit sw=P2^2; sbit gw=P2^3;
按下载软件的提示,关闭一下单片机电源再打开,就可看到下载过程 和进度,下载完成后,就可看到单片机四位数码管左边显示的”8。”。
案例1下载过程与运行效果
1.5 从数码管显示学单片机编程
1.5.1 案例2:数码管上的“8。8。”显示
1 源程序 #include "reg51.h" sbit qw = P2^0; sbit bw = P2^1;//增加的一个位寻址变量定义 main() { P0=0; qw=0; bw=0; //增加的一个赋值语句 }
7
如下图,选中后单击确定。随后,在弹出的询问框中,
选择“是(Y)”即可。
二 建立程序文件 1 在菜单栏中单击“File”菜单及其子菜单“New”子菜单, 此时在工作界面中会弹出一文本编辑窗口,如下图。
说明:单片机程序的编写,就是在上面这一窗口中进行。
2 把在四位数码管左边显示“8。”的C源程序,从键盘上照 敲进去。如下图。
{
P0=0; qw=0; }
第3行~第7行是程序的主函数。C程序是由若干个C函 数组成,其中必须有一个也只能有一个名为“main”的函数。 main函数就是主函数。第3行称为函数头,第4行~第7行称 为函数体,第4行的大括号“{”称为函数体的开始标志,第 7行的“}”称为函数体的结束标志,开始标志与结束标志之 间是若干语句。语句以分号“;”为结束标志。
P0=0x80; //赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
P0=0xc0; //赋"0"的笔段码 bw=0; bw=1; P0=0x92; //赋"5"的笔段码 sw=0; sw=1; P0=0xf9; gw=0; gw=1; } } //赋"1"的笔段码
4 源程序 #include "reg51.h" sbit qw=P2^0; //定义MCU管脚P2.0位寻址变量名 sbit bw=P2^1; //定义MCU管脚P2.1位寻址变量名 sbit sw=P2^2; //定义MCU管脚P2.2位寻址变量名 sbit gw=P2^3; //定义MCU管脚P2.3位寻址变量名 void main() { while(1) //循环结构 { qw=1; //这四个语句的作用是关断四位数码管 bw=1; sw=1; gw=1;
这个程序运行时的所有功能,是由两个赋值语句具体实现:赋值语句 “P0=0;”使口0的8个引脚,即单片机芯片的第39、38、37、36、35、 34、33、32全部输出低电平,从而使四位数码管的所有(32只)发光二极 管的负极均为低电平;赋值语句“qw=0”使口2的最低位引脚,即单片机芯 片的第21脚为低电平,这就使单片机学习板上的PNP管Q3的基极为低电平 而导通,从而使最左边位数码管的8只发光二极管正极为高电平。
5 案例程序分析及流程图 案例源程序要点分析: 与案例3的源程序相比,案例4 源程序中的5个执行段,被一 个while循环架构所管辖。在此, 先简单地说明一个要点,当 while后面的小括号中是整数1 是,它大括号中的所有语句, 将被无数轮重复执行。因此, 在案例4程序中,while下面大 括号中的那16个赋值语句,从 上到下依次执行一轮后,又将 回到上面,又从上到下依次执 行一轮,再回到上面,如此永 无休止地循环下去,从而实现 “8051”的正常显示
流程图
6 案例4的下载操作运行效果
1 源程序
15.4案例5:模块化的“8051”显示
//定义MCU管脚P2.0位寻址变量名 //定义MCU管脚P2.1位寻址变量名 //定义MCU管脚P2.2位寻址变量名 //定义MCU管脚P2.3位寻址变量名
#include "reg51.h" sbit qw=P2^0; sbit bw=P2^1; sbit sw=P2^2; sbit gw=P2^3;
在上图的“保存在(I)”下拉列表框中选择D盘下的 “stc89c52”文件夹,在文件名文本框中,输入工程名 “stc89c52”,然后单击“保存”。此时,系统将弹出CPU选择窗
5 在列表框中选择并展开“Atmel”,如下图箭头所指
6
展开“Atmel”项后如下图
在上图中往下拉滚动条,选中“AT89C52”,如下页
1.4把程序写入单片机芯片的操作平台和操作步骤
一 建立工程文件 1 首先,在桌面上双击Keil的图标,如下图箭头所指。
2
系统进入该软件的初始界面,如下图
3 在上一图中,须单击菜单栏中的Project菜单及其子菜单
New Project ,如下图所示。
4 于是弹出建立新nVisionz工程项目对话框,如下图:
上图编译信息窗中最后一行告诉我们,源程序有0个错误和0个警告。这是最 好结论。有1个错误都不能通过编译,必须针对错误提示信息进行修改。对警 告则可改可不改。
第六步,将第五步产生.HEX文件下载到单片机芯片中。把单 片机学习板上的电源和串口连线与PC机接通,用鼠标依次单 击“开始”“程序”“STC_ISP_V4.80” STC_ISP_V4.80”, 就进入如下界面.
2 案例3程序的一个推论:编译系统有个特殊处理,即在 main函数结束而返回的指令处,加了一条跳转指令,迫使单 片机程序重新运行。 3 物理现象解惑:案例3中本应一闪而过的“8051”变成了显 示长在的“8051”,其原因在于编译系统。单片机程序是 在编译系统的迫使下,被动地重复运行,“8051”的显示 才永不休止。下面的程序,是程序自己主动地进行“8051” 的重复显示。从视觉效果上看,被动形式的“8051”,比 主动形式的“8051”亮度要小。
在MCU类型的下拉列表框中选择”STC89C52RC”,再单 击”打开程序文件”按钮,弹出”Open file(*.hex or *.bin) 对话框.如下图.
先在上图的下拉列表框中打开“D:\STC89C52”文件夹,随 之就出现“STC8051.hex”文件,单击该文件后再单击“打 开”按钮,就返回到下载界面,如下图。
第1章 单片机基础 第3章 用数码管模拟的循环灯 第4章 中断资源的应用编程 第5章 日历时钟DS1302的应用编程 第6章 AT24C02的应用编程 第7章 DS18B20的应用编程 第8章 有时控功能和温度显示的电子钟项目设计 第9章 16×16点阵LED汉字显示屏项目设计 第10章 使用片内EEPROM存储器 第11章 单片机与PC的串行通信 第12章 单片机片外数据存储器的扩充 第13章 A/D转换与D/A转换简介
P0=0xc0;//赋"0"的笔段码 bw=0; bw=1; P0=0x92;//赋"5"的笔段码 sw=0; sw=1; P0=0xf9;//赋"1"的笔段码 gw=0; gw=1; }
2 案例源程序要点分析:
本案例中对四位数码管的每一位都要进行控制,因此要定义四个位寻址 变量:qw、bw、sw和gw。主函数由五个执行段组成。第一执行段有四个赋 值语句,作用是关断四个数码管的显示;第二段有三个赋值语句,作用是在 数码管的第1位(从左数到右,下同)上显示“8”后关断;第三段是在数码 管的第2位上显示“0”后关断;第四段是在数码管的第3位上显示“5”后关断; 第五段是在数码管的第4位上显示“1”后关断。
第四步,设置编译和链接环境。 1 单击ProjectA菜单及其子菜单option for target ‘Target1’, 如下图。
将弹出编译链接设置界面,如下图。
在上图中,单击Output标签后,在复选框Great HEX Fi:
上打√,其余可用默认值,然后确定,如下图
。
第五步,编译成HEX文件。单击Project菜单及其子菜单Ruild all target files,系统就将.C源程序文件编译成指定格式的.HEX文件. 如下图。
左中为STC90C52的实物图,可替代 STC89C52,且性能更好。 左下为STC12C5A32的实物图,是所谓的 1T单片机,其工作速度比上面两个型号快得多。
2 51系列单片机的内部结构示意图
3 51系列单片机引脚功能图
左图为8051系列单片机的 引脚功能图,它采用双列直插 40引脚封装,它所有引脚的功 能我们要全部记住。
void main() { qw=1;//这四个语句的作用是关断四位数码管 bw=1; sw=1; gw=1; //定义MCU管脚P2.0位寻址变量名 //定义MCU管脚P2.1位寻址变量名 //定义MCU管脚P2.2位寻址变量名 //定义MCU管脚P2.3位寻址变量名
P0=0x80;//赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
Disp_led() { qw=1; bw=1; sw=1; gw=1;
//这四个语句的作用是关断四位数码管
P0=0x80; //赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
P0=0xc0; //赋"0"的笔段码 bw=0; bw=1; P0=0x92; //赋"5"的笔段码 sw=0; sw=1;
2 源程序分析:本程序用三个赋值语句实现了它的功能。第一 个赋值语句使P0代表的口0的8条I/O引脚输出低电平,从而使 四位数码管共32个发光二极管的负极为低电平;第二个赋值语 句、第三个赋值语句分别使口2的最低两位引脚输出低电平,从 而使PNP管Q2、Q3导通,进而使左边两位数码管的共阳极上 为高电平。于是,左边两位数码管上的发光二极管全亮。也就 是,在四位数码管的左边显示出“8。8。”。
第1章 单片机基础
1.1 单片机是块集成电路芯片
1 我们所说的单片机,是一块集成电路芯片。下面的三个型号的单片机 芯片,都属于8051系列,其品牌为STC。它们的内部组成可认为完全相 同,都能直接用在本书单片机学习板的MCU插座上,但性能有所差异。
左上为STC89C52的实物图,其片内 存储器容量大于STC89C51。
3 程序敲完后,单击“File”菜单及其子菜单“Save”,如下 图
4 在其弹出的对话框中的文件名文本框中输入相应的文件名 “stc89c52.c”,如下图
注意:这里必须输入C51源程序的扩展名“.c”来保存。
第三步,把程序文件加载到工程项目中。 1 在Project Windows窗口内,展开Tageget 1,右击 Source Group1,如下图。
4
右击后出现如下界面
在上图菜单中单击“Add Files to Group ‘Source Group1’”, 则弹出如下页对话框。
5 选中“stc89c52”文件后单击“Add”按钮,再单击 “Clese”按钮,则加载工作结束。如下图。
此时若展开Source Group1,就能看到stc89c52.c已经 加系统
1 本书单片机学习板电原理路图
2 本书单片机学习板印刷电路图
3 本书单片机学习板四位数码管电原理图
1.3对单片机编程以实现单片机系统的功能
• 案例1:编程实现,在4位数码管的最左位上显示“8。”
案例源程序
#include "reg51.h" sbit qw= P2^0; main() 程序的第1行称为预处理命令。 第2行是定义位寻址变量。
3 案例3程序的流程图
4 案例3程序的下载过程与运行效果
15.3案例4:主动形式的“8051”显示
1 对案例3程序的基本分析:在案例3中,main函数中的最后 一个操作是“gw=1;”,这就是关掉第4位数码管的显示,按此程 序设计的本来效果,数码管上显示的“8051”应是一闪而过, 此后数码管因全部被关断而无任何显示。
3 用流程图表示算法 案例2程序的流程图 案例1程序的流程图
用自然语言描述操作步骤
用C 语句描术操作步 骤
4 仿案例1程序的上机操作全过程,完成案例2程序的下载和运行
5 案例2程序的下载操作与运行效果
1.5.2 案例3:被动形式的“8051”显示
1 源程序
#include "reg51.h" sbit qw=P2^0; sbit bw=P2^1; sbit sw=P2^2; sbit gw=P2^3;
按下载软件的提示,关闭一下单片机电源再打开,就可看到下载过程 和进度,下载完成后,就可看到单片机四位数码管左边显示的”8。”。
案例1下载过程与运行效果
1.5 从数码管显示学单片机编程
1.5.1 案例2:数码管上的“8。8。”显示
1 源程序 #include "reg51.h" sbit qw = P2^0; sbit bw = P2^1;//增加的一个位寻址变量定义 main() { P0=0; qw=0; bw=0; //增加的一个赋值语句 }
7
如下图,选中后单击确定。随后,在弹出的询问框中,
选择“是(Y)”即可。
二 建立程序文件 1 在菜单栏中单击“File”菜单及其子菜单“New”子菜单, 此时在工作界面中会弹出一文本编辑窗口,如下图。
说明:单片机程序的编写,就是在上面这一窗口中进行。
2 把在四位数码管左边显示“8。”的C源程序,从键盘上照 敲进去。如下图。
{
P0=0; qw=0; }
第3行~第7行是程序的主函数。C程序是由若干个C函 数组成,其中必须有一个也只能有一个名为“main”的函数。 main函数就是主函数。第3行称为函数头,第4行~第7行称 为函数体,第4行的大括号“{”称为函数体的开始标志,第 7行的“}”称为函数体的结束标志,开始标志与结束标志之 间是若干语句。语句以分号“;”为结束标志。
P0=0x80; //赋"8"的笔段码 qw=0; //接通千位上的数码管 qw=1; //关断千位上的数码管
P0=0xc0; //赋"0"的笔段码 bw=0; bw=1; P0=0x92; //赋"5"的笔段码 sw=0; sw=1; P0=0xf9; gw=0; gw=1; } } //赋"1"的笔段码
4 源程序 #include "reg51.h" sbit qw=P2^0; //定义MCU管脚P2.0位寻址变量名 sbit bw=P2^1; //定义MCU管脚P2.1位寻址变量名 sbit sw=P2^2; //定义MCU管脚P2.2位寻址变量名 sbit gw=P2^3; //定义MCU管脚P2.3位寻址变量名 void main() { while(1) //循环结构 { qw=1; //这四个语句的作用是关断四位数码管 bw=1; sw=1; gw=1;
这个程序运行时的所有功能,是由两个赋值语句具体实现:赋值语句 “P0=0;”使口0的8个引脚,即单片机芯片的第39、38、37、36、35、 34、33、32全部输出低电平,从而使四位数码管的所有(32只)发光二极 管的负极均为低电平;赋值语句“qw=0”使口2的最低位引脚,即单片机芯 片的第21脚为低电平,这就使单片机学习板上的PNP管Q3的基极为低电平 而导通,从而使最左边位数码管的8只发光二极管正极为高电平。
5 案例程序分析及流程图 案例源程序要点分析: 与案例3的源程序相比,案例4 源程序中的5个执行段,被一 个while循环架构所管辖。在此, 先简单地说明一个要点,当 while后面的小括号中是整数1 是,它大括号中的所有语句, 将被无数轮重复执行。因此, 在案例4程序中,while下面大 括号中的那16个赋值语句,从 上到下依次执行一轮后,又将 回到上面,又从上到下依次执 行一轮,再回到上面,如此永 无休止地循环下去,从而实现 “8051”的正常显示
流程图
6 案例4的下载操作运行效果
1 源程序
15.4案例5:模块化的“8051”显示
//定义MCU管脚P2.0位寻址变量名 //定义MCU管脚P2.1位寻址变量名 //定义MCU管脚P2.2位寻址变量名 //定义MCU管脚P2.3位寻址变量名
#include "reg51.h" sbit qw=P2^0; sbit bw=P2^1; sbit sw=P2^2; sbit gw=P2^3;
在上图的“保存在(I)”下拉列表框中选择D盘下的 “stc89c52”文件夹,在文件名文本框中,输入工程名 “stc89c52”,然后单击“保存”。此时,系统将弹出CPU选择窗
5 在列表框中选择并展开“Atmel”,如下图箭头所指
6
展开“Atmel”项后如下图
在上图中往下拉滚动条,选中“AT89C52”,如下页
1.4把程序写入单片机芯片的操作平台和操作步骤
一 建立工程文件 1 首先,在桌面上双击Keil的图标,如下图箭头所指。
2
系统进入该软件的初始界面,如下图
3 在上一图中,须单击菜单栏中的Project菜单及其子菜单
New Project ,如下图所示。
4 于是弹出建立新nVisionz工程项目对话框,如下图:
上图编译信息窗中最后一行告诉我们,源程序有0个错误和0个警告。这是最 好结论。有1个错误都不能通过编译,必须针对错误提示信息进行修改。对警 告则可改可不改。
第六步,将第五步产生.HEX文件下载到单片机芯片中。把单 片机学习板上的电源和串口连线与PC机接通,用鼠标依次单 击“开始”“程序”“STC_ISP_V4.80” STC_ISP_V4.80”, 就进入如下界面.
2 案例3程序的一个推论:编译系统有个特殊处理,即在 main函数结束而返回的指令处,加了一条跳转指令,迫使单 片机程序重新运行。 3 物理现象解惑:案例3中本应一闪而过的“8051”变成了显 示长在的“8051”,其原因在于编译系统。单片机程序是 在编译系统的迫使下,被动地重复运行,“8051”的显示 才永不休止。下面的程序,是程序自己主动地进行“8051” 的重复显示。从视觉效果上看,被动形式的“8051”,比 主动形式的“8051”亮度要小。
在MCU类型的下拉列表框中选择”STC89C52RC”,再单 击”打开程序文件”按钮,弹出”Open file(*.hex or *.bin) 对话框.如下图.
先在上图的下拉列表框中打开“D:\STC89C52”文件夹,随 之就出现“STC8051.hex”文件,单击该文件后再单击“打 开”按钮,就返回到下载界面,如下图。