单片机课程设计教程.ppt

上传人:牧羊曲112 文档编号:6380328 上传时间:2023-10-22 格式:PPT 页数:60 大小:255.50KB
返回 下载 相关 举报
单片机课程设计教程.ppt_第1页
第1页 / 共60页
单片机课程设计教程.ppt_第2页
第2页 / 共60页
单片机课程设计教程.ppt_第3页
第3页 / 共60页
单片机课程设计教程.ppt_第4页
第4页 / 共60页
单片机课程设计教程.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《单片机课程设计教程.ppt》由会员分享,可在线阅读,更多相关《单片机课程设计教程.ppt(60页珍藏版)》请在三一办公上搜索。

1、单片机课程设计,程序设计概要,曾毓,主讲内容,C程序语言Keil单片机开发软件按键、定时器及动态扫描Proteus电子设计仿真软件,数据类型,char,unsigned charint,unsigned intlong,unsigned longfloat,doubletypedef关键字,变量与常量,变量的声明变量的赋值变量作用范围常量的声明#define宏定义,数组,数组声明 char str10;数组初始化 char str=“Hello world”;数组下标 str0=H;a=stri;,常用语句,赋值语句分支语句循环语句跳转语句,赋值语句,一般的赋值 int a,b=0;a=3;连

2、续赋值 a=b=2;带运算符的赋值 a+=b;,分支语句,1.比较操作符=!=2.if语句 基本的if语句 if ifelse 带优先级的if语句 ifelse ifelse ifelse if语句嵌套 if()if(),分支语句,3.switch语句 int key;switch(key)case 0:break;case 1:break;default:break;,循环语句,1.do while 语句 do 循环内容 while(表达式)至少执行一次循环操作,循环语句,2.while语句 while(表达式)循环内容 表达式条件不成立时,循环不执行,循环语句,3.for语句 for(语句

3、1;表达式;语句2)循环内容 语句1只执行1次先判断表达式,再执行循环内容执行循环内容后再执行语句2语句1和语句2可不写表达式不写时,有可能无限循环,跳转语句,goto语句(不建议使用)break语句(循环、switch中使用)continue语句(循环中使用),常用操作符,赋值符号=+=-=*=/=,函数,返回类型 函数名(参数类型 参数名)int add(int a,int b)return a+b;int a=10,b=5,c;c=add(a,b);,函数,注意:函数内部不能改变参数的值 int foo(int a)a+=5;return a;int a=5,b;b=foo(a);赋值语

4、句执行后,a还是5,b为10,函数,函数的返回值数组作为参数递归函数 int fun_n(int n)if(n=1)return 1;else return n*fun_n(n-1);,指针,指针的声明及使用 int a=5;int*pa;pa=最后一句,指针pa指向了a的下一个地址,此时pa对于变量a已经没有意义。,指针与数组,数组名即是一个指针char str=“Hello C.”;char*pp=str;*pp=“h”;do if(=*pp)*pp=_;while(*pp+);最后str变为“hello_C.”,函数与指针,void foo(int*pa)*pa+=5;int a=5;f

5、oo(a的值变为10,特殊关键字,staticconstvolatile,全局变量,用途与局部变量的区别作用范围extern关键字,输入输出,头文件 stdlib.h stdio.hscanf函数printf函数,其他头文件,#includestring.h 字符串操作相关 strlen strcatmath.h 算术运算相关 sin pow abs log,单片机上的C程序,与PC机上C程序的区别语法支持程度不同可用RAM空间及生成代码大小浮点运算支持code关键字输入输出数据类型sfr、sbit中断器件相关头文件(REG52.h)程序结构,编码规范,语句缩进注释详细代码分行变量、函数取名规

6、则版本控制,程序结构,头文件宏定义常量声明全局变量函数声明main主函数,程序流程,变量初始化定时器设置中断设置主程序循环 数码管显示内容刷新 按键检测、按键功能执行定时器中断 中断计数、时间相关计算 数码管动态扫描,Keil软件使用简介,Keil uVersion2 软件界面,Keil软件安装,第一个Keil C程序,新建项目文件夹:D:Lab01在Keil中选择菜单ProjectNew Project选择项目保存路径为D:Lab01给新建项目取名为Lab01,点击保存按钮选择目标器件型号为ATMEL公司AT89C52弹出对话框确认添加51初始化代码,点击“是(Y)”按钮确认。,第一个Kei

7、l C程序,新建一个文本文件,点击菜单FileNew先保存文件,点击菜单FileSave,弹出文件保存窗口,给文件取名Lab01.c在左侧“Project workspace”窗口,右键点击Source Group 1项,弹出菜单,选择“Add Files to Source Group 1”命令,在弹出窗口中选中Lab01.c文件,点击Add按键添加,然后再点击Close按键返回Keil主窗口界面。,第一个Keil C程序,#include/包含89C52相关头文件sbit Beep=P1 4;unsigned char TCount;void main(void)TMOD=0 x01;/定

8、时器0,工作模式1(16位计数)TH0=0 x3C;TL0=0 xB0;/定时周期50毫秒TR0=1;/启动定时器TCount=0;Beep=0;while(1)if(TF0)/检查定时溢出+TCount;if(10=TCount)/10次溢出为半秒TCount=0;/计数清零Beep=!Beep;/翻转端口电平TH0=0 x3C;/重新设置定时器计数值TL0=0 xB0;TF0=0;/溢出标志位清零,第一个Keil C程序,程序输入完成后,记得保存在左侧Project Workgroup窗口,右键点击Target 1项,弹出菜单,选择“Optoins for Target(Target 1)

9、命令,弹出项目设置窗口。选择Target页,修改其中Xtal(MHz)为12MHz,点击确定按钮返回Keil主界面。,第一个Keil C程序,点击菜单ProjectBuild Target对当前项目进行编译链接,在Keil主界面下方的Output窗口中可以查看编译结果。,第一个Keil C程序,Lab01程序编译成功后,可以进入软件调试模式对程序进行仿真、调试选择菜单DebugStart/Stop Debug Session进入软件调试模式,程序停在main函数入口,等待用户进行调试操作将光标点在Beep=!Beep这一行,选择菜单DebugInsert/Remove Breakpoint命令

10、,添加一个断点,第一个Keil C程序,按快捷键F5连续执行程序,当执行到断点时,程序会停在断点这一行观察左侧Project Workgroup窗口Regs页中的Syssec项可以知道程序执行到当前行共花了多少时间连续按F5键,可以计算得出Beep端口电平翻转的时间间隔选择菜单PeripheralsI/O-portsPort 1命令,可以添加一个端口仿真窗口,连续执行程序时,该窗口P1端口的第4位将会随着程序连续翻转如要修改程序,先要退出调试状态,选择菜单DebugStart/Stop Debug Session命令即可,第一个Keil C程序,到程序仿真正确,软件设计基本完成下载程序前需要先

11、生成.HEX文件选择菜单ProjectOptions for TargetTarget 1在弹出的项目设置窗口中,选择Output页,确认将“Create HEX File”选项打上勾点击“确定”按钮返回Keil主窗口界面重新编译Lab01程序,将在Lab01目录下生成Lab01.hex文件,第一个Keil C程序,编程下载时,PC端使用软件Easy 51 Pro,示例代码讲解,示例电路原理图,P0口数码管8位数据线P1口03位为数码管动态扫描线,第4位连接蜂鸣器P2口留待外接扩展功能P3口第3、4、5位对应set、inc、dec按键数码管采用共阳管,扫描线低电平选通,蜂鸣器高电平鸣叫,按键空

12、闲对应高电平,示例功能A 简易时钟,时钟显示时分或分秒,由inc按键切换set按键切换工作模式:正常显示、设置时分、设置分秒、设置闹铃(只有时分)后三个模式,inc按键设置前两个数码管数值,dec按键设置后两个数码管数值,按键可以长按加快设置速度闹铃时间到,蜂鸣器鸣叫30秒,dec按键可以关闭声音闹铃设置为00:00将取消闹铃按键操作时可以有声音,示例功能B 存储式跑表,时钟显示时分或秒/百分秒,由inc按键切换set按键启动或暂停跑表跑表运行时,dec按键每按一次记录跑表时间,最多10个跑表停止时,dec按键每按一次顺序显示记录时间。记录满或记录空时,计时或读取有提示声音,示例功能C 倒计时

13、闹铃,显示剩余时分秒。当时间大于0且小于1分钟,蜂鸣器鸣叫,当时间小于1小时,显示分秒,否则显示时分set进入或退出时间设置模式设置模式仅显示时分,秒钟数为0,inc对应小时数,dec对应分钟数设置时间为00:00将关闭倒计时设置模式下,时间大于0且按键空闲5秒将自动开始倒计时。,使用定时器,T0、T1定时功能相同,其工作方式及运行状态是由TMOD 和TCON两个特殊功能寄存器控制。TMOD是8位的控制寄存器,低4位、高4位分别控制T0的工作方式,其中M1、M0是工作方式选择位。决定定时器的4种工作方式。方式0:(M1=0、M0=0):13位定时/计数器 方式1:(M1=0、M0=1):16位

14、定时/计数器 方式2:(M1=1、M0=0):8位定时/计数器(定时常数自动装入)方式3:(M1=1、M0=1):把T0分为两个8位计数器,使用定时器,示例1:16位定时器,定时周期50毫秒TMOD=0 x01;TH0=0 x3C;TL0=0 xB0;示例2:8位定时器,自动装载,周期100微秒TMOD=0 x02;TH0=0 x9C;TL0=0 x9C;ET0、ET1对应定时器0和1的中断允许TR0、TR1对应定时器0和1的启动/暂停TF0、TF1对应定时器0和1的溢出标志位,定时器Timer 2,16位可自动装载定时器Timer2使用示例:/定时周期50毫秒TH2=0 x3C;TL2=0

15、xB0;RCAP2H=0 x3C;RCAP2L=0 xB0;TR2=1;/启动Timer 2定时器TF2=0;/手动清除溢出标志,定时中断,Timer 0中断使能ET0void T_int0(void)interrupt 1 using 1Timer 1中断使能ET1 void T_int1(void)interrupt 3 using 1Timer 2中断使能ET2void T_int2(void)interrupt 5 using 1全局中断使能:EA=1,按键检测,定义按键变量sbit set=P3 3;sbit inc=P3 4;sbit dec=P3 5;,按键检测,方法一:空闲检测

16、在main函数主循环中,每循环一次检测按键一遍,检测到按键动作后延时5毫秒消抖,延时后执行相应功能。方法二:定时检测 定时器每隔5毫秒置全局变量T5Flag为1,在main函数主循环中,每判断到T5Flag为1时,将其置为0,并且检测一遍按键,若有按键动作,执行相应功能。,按键检测,方法三:延时检测 在main程序主循环中加入延时程序代码,将每次循环的时间控制在510毫秒范围,每次主循环都检测一遍按键,有动作就执行相应功能,不用再加消抖延时。,按键中断,set按键连接P3口第3位,该位对应外部中断输入1,当按键按下时,可以产生一个外部输入中断中断函数:void Set_int(void)int

17、errupt 2 using 0IT1=1设置下降沿触发中断IT1=0设置低电平触发中断,此时需要对中断标志位IE1清零,数码管定义,共阳数码管数字09编码:const unsigned char LED_CODE=0 xC0,0 xFC,0 xA2,0 xA4,0 x6C,0 x25,0 x21,0 xBC,0 x20,0 x24;四个数码管选通端口:sbit bsel_0=P1 0;sbit bsel_1=P1 1;sbit bsel_2=P1 2;sbit bsel_3=P1 3;四个数码管变量:unsigned char LED4;动态扫描选择变量:unsigned char Led_

18、sel;,数码管动态扫描,void ch_led(void)bsel_0=bsel_1=bsel_2=bsel_3=1;P0=0 xFF;/关显示+Led_sel;switch(Led_sel)case 0:bsel_0=0;bsel_1=bsel_2=bsel_3=1;break;case 1:bsel_1=0;bsel_0=bsel_2=bsel_3=1;break;case 2:bsel_2=0;bsel_1=bsel_0=bsel_3=1;break;case 3:bsel_3=0;bsel_1=bsel_2=bsel_0=1;break;default:bsel_0=0;bsel_1

19、=bsel_2=bsel_3=1;Led_sel=0;break;P0=LEDLed_sel;/设置显示内容,数码管动态扫描,在定时中断函数中,每隔5毫秒切换一次扫描选通线:void Time0_int(void)interrupt 1 using 1/5毫秒定时到T5Flag 1;ch_led();,数码管动态扫描,在main函数主循环中,根据Led_sel的值,选择对应的数码管编码输出给P0口:P0=LEDLed_sel;结合按键检测定时程序,也可以将上一行代码放置在按键扫描功能语句之后。程序中的时间算法或按键执行功能可以改变LED数组中的内容,从而更新数码管显示数值。,动态扫描示例代码,

20、main主循环:while(1)if(T5Flag)T5Flag=0;/5毫秒标志清零if(!set)/检测set键/执行set键功能if(!inc)/检测inc键/执行inc键功能if(!dec)/检测dec键/执行dec键功能P0=LEDLed_sel;/设置显示内容,动态扫描示例代码2,main主循环:while(1)if(!set)/检测set键/执行set键功能if(!inc)/检测inc键/执行inc键功能if(!dec)/检测dec键/执行dec键功能P0=LEDLed_sel;/设置显示内容Ms_delay();/延时5毫秒if(+Led_sel 3)Led_sel=0;ch_led();/切换动态扫描选通线,设计参考,单片机语言C51程序设计C程序设计语言(第2版)http:http:/,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号