单片机系统开发-单片机软件设计课件_第1页
单片机系统开发-单片机软件设计课件_第2页
单片机系统开发-单片机软件设计课件_第3页
单片机系统开发-单片机软件设计课件_第4页
单片机系统开发-单片机软件设计课件_第5页
已阅读5页,还剩54页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机软件设计目录程序的编写、编译Keil C环境设置创建项目1、基于AT89C52处理器2、新建源代码文件,并保存命名xxx.c3、右键点击“Source Groupxx”将.c “Add Files to Group ”程序的编写、编译程序编写:Demo示例/*功能:IO口操作,点亮一个LED*/#include /包含头文件,包含特殊功能寄存器的定义sbit LED=P00;/ 用sbit 关键字 定义 LED到P0.0端口/* 主函数*/void main (void) /此方法使用bit位对单个端口赋值 LED=1; /将P0.0口赋值 1,对外输出高电平 LED=0; /将P0.0

2、口赋值 0,对外输出低电平,此时点亮了LED while (1) /主循环 /主循环中添加其他需要一直工作的程序 程序的编写、编译Keil C环境设置Target:设置时钟晶振为12MHzOutput:选中Create HEX File选项, 编译后会生成Hex文件, 用于下载到单片机中。Debug:左侧配置软件仿真模式; 右侧配置硬件调试器仿真。 (默认即可)程序的编写、编译程序编译编译查看编译输出结果目录程序的下载AT89S52USB ASP / ISP通常为免驱型请实用带保险的USB下载器,以便保护电脑U口程序的下载AT89S52USB ASP / ISP下载软件:AVR fighter

3、Progisp目录基础程序设计延迟函数估算延迟函数/* uS延时函数,参数 unsigned char t,其值范围是 0255。晶振12M。大致延时 长度如下 T=t x 2+5 uS */void DelayUs2x(unsigned char t) while(-t);/* mS延时函数,参数 unsigned char t,范围是 0255。晶振12M*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); 精确延时请使用汇编机器周期指令周期晶振频率基础程序设计IO操作对单片机的

4、控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器(即专用寄存器P0P3 )、输出驱动器和输入缓冲器。每个IO口有一个IO口寄存器Px,而且这个寄存器可以位寻址Px.n(定义详见 reg51.h 或 reg52.h)基础程序设计IO操作1、当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,接拉电流负载时必须外接上拉电阻才会有高电平输出;如果作为输入,必须先向相应的锁存器写“1”,才不会影响输入电平。2、P1、P2和P3口为准双向口,在内部差别

5、不大,但使用功能有所不同。P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制 P1口是用户专用8位准双向I/O口,具有通用输入/输出功能,每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时,该位的锁存器必须写入“1”,然后才能进入输入操作。 P2口是8位准双向I/O口。外接I/O设备时,可作为扩展系统的地址总线,输出高8位地址,与P0口一起组成16位地址总线。基础程序设计IO操作示例i

6、nclude sbitbv=P20;/定义位变量,关联P2.0管脚。sbit是数据类型intmain(void) unsignedcharpv;/位操作,以P2口的第0位为例:bv=0;/直接对P2口的第0位管脚输出低电平bv=1;/直接对P2口的第0位管脚输出高电平/总线操作输出数据,以P2口为例:P2=0 xaa;/直接赋值,P2口输出数据0 xaa/总线操作读取数据,以P2口为例:pv=P2;/直接读取P2口的数据放到pv变量return0;基础程序设计中断2.定时器控制寄存器 TCON /控制外部中断和定时器中断外部中断:IE0(IE1):外部中断请求标志位 当外部中断INT0(INT

7、1)引脚出现有效的请求信号(接入低电平或下降沿信号时),此位由单片机自动置1,cpu开始响应,处理中断,而当入中断程序后由单片机自动置0.IT0(IT1):外部中断触发方式控制位/选择有效信号 IT0(IT1)=1:脉冲触发方式,下降沿有效。IT0(IT1)=0:电平触发方式,低电平有效。基础程序设计中断2.定时器控制寄存器 TCON /控制外部中断和定时器中断定时器中断: TF0(TF1):定时器/计数器溢出中断标志位当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中断程序后由单片机自动置0. TRO(TR1):定时器/计数器启动位 TR0(TR1)=

8、1; 启动定时器/计数器 TR0(TR1)=0; 关闭定时器/计数器基础程序设计中断3.定时器工作方式TMOD低半字节(D0/D1/D2/D3)用来控制定时器/计数器0高半字节(D4/D5/D6/D7)用来控制定时器/计数器1GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1C/T=0时为定时功能,C/T=1时为计数功能(引脚外部脉冲)M0、M1方式选择功能基础程序设计中断4.定时器初值TL0/TH0(以12M晶振,工作方式1,16位计数器为例,定时Xus)1.时钟周期的时间t=1/12M=1/12 us 2.机器周期的时间T=12*1/12=1 us3. 每机器周期计数器+1,所

9、以计数器+1经过时间为 1 us16为计数器要全部置1(即达到65535)+1后,溢出才会触发中断,所以初值=(65536-X)4.将初值转化为16进制码,分别付给TH0和TL0eg:所定时间5ms;初值=(65536-5000)=60536=EC78;TH0=0XEC; TL0=0X78;程序中常用赋初值算法:TH0=(65536-20000)/256;TL0=(65536-20000)%256;基础程序设计中断5.串口控制寄存器SCON定时器中断: TI:串行口发送中断标志位当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的, 必须由用户在中断服务中

10、用软件清0.RI:串行口接收中断标志位当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,必须由用户在中断服务软件中用软件清0.基础程序设计定时器中断示例void Init_Timer0(void) TMOD |= 0 x01; /使用模式1,16位定时器,“|”可使多个定时器互不影响 TH0=(65536-60000)/256; /赋初值 (定时60ms) TL0=(65536-60000)%256; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开main() Init_Timer0(); while(1);/

11、* 定时器中断子程序*/void Timer0_isr(void) interrupt 1 using 1 TH0=(65536-60000)/256; /重新赋值 TL0=(65536-60000)%256; LED=LED; /指示灯反相,可以看到闪烁Demo:定时器中断0基础程序设计外部中断示例功能:通过中断接口P3.2连接的独立按键测试,P0口的LED灯反向,边沿触发main() P0=0 xaa; /P0口初始值 EA=1; /全局中断开 EX0=1; /外部中断0开 IT0=1; /边沿触发(IT0=0电平触发) while(1) /在此添加其他程序 /*外部中断程序*/void

12、ISR_Key(void) interrupt 0 using 1 P0=P0; /进入中断程序执行程序,/此时可以通过 EA=0指令暂时关掉中断 串口中断以后再介绍Demo:外部中断0边沿触发基础程序设计发光二极管LED灌电流拉电流 ?控制负载,尽量使用低电平有效(上电初始化,所有IO为高电平)单个LED控制sbit led0 = P10;led0 = 0; /开灯led0 =1; /关灯整个P1口控制:流水灯unsigned char tmp=0 xfe;while(1) P1= tmp; delay(); tmp = (tmp1)|1); if(tmp=0 xff) tmp=0 xfe;

13、低电平有效Demo:LED流水灯基础程序设计蜂鸣器控制程序9013驱动高电平有效sbit beer = P04;beer = 0; /鸣叫beer =1; /关闭通过不同的间隔时间,可以达到类似倒车雷达的效果void beer_freq (unsigned char t) beer = !beer; /鸣叫 or 关闭 DelayMs(t);Demo:蜂鸣器基础程序设计步进电机Uln2003驱动步进电机1、拍数:电机转过一个齿距角所需脉冲数,以四相电机为例:四相四拍运行方式:AB-BC-CD-DA-AB四相八拍运行方式: A-AB-B-BC-C-CD-D-DA-A 2、步距角:对应一个脉冲信号

14、,电机转子转过的角位移用表示。减速电机28BYJ-48-5步进角度:5.625 x 1/64减速比:1/64*因为这个是带减速齿轮的(减速比1/64) ,最后输出轴上步进角是5.625/64=0.08789度。 *对于电机,是64个脉冲为一圈。对于输出轴,是4096个脉冲为一圈(6464)。电机转64圈,输出轴转1圈。实测512*4为一圈?基础程序设计步进电机接线方式:IN1 - P00 IN2 - P01 IN3 - P02 IN4 - P03#define MotorData P0 /步进电机控制接口定义uchar phasecw4 =0 x08,0 x04,0 x02,0 x01;/正转

15、 电机导通相序 D-C-B-Auchar phaseccw4=0 x01,0 x02,0 x04,0 x08;/反转 电机导通相序 A-B-C-Duchar speed_delay;/顺时针转动void MotorCW(void) uchar i; for(i=0;i4;i+) MotorData=phasecwi; Delay_xms(speed_delay);/转速调节 /逆时针转动void MotorCCW(void) uchar i; for(i=0;i4;i+) MotorData=phaseccwi; Delay_xms(speed_delay);/转速调节 基础程序设计数码管(4

16、位一体共阴极)段选位选*缺少驱动电路模块,暂时无法在mini系统中实验基础程序设计液晶屏LCD1602控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等80字节显示数据存储器DDRAM通常只用每行前16个DDRAM 地址:0X80 + 相对地址基础程序设计液晶屏LCD1602读状态 输入:RS=L,RW=H,E=H 输出:DB0DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码 输出:无 读数据 输入:RS=H,RW=H,E=H 输出:DB0DB7=数据 写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据 输出:无 基础程序设计液晶屏LCD

17、1602判忙函数:读状态 bit LCD_Check_Busy(void) DataPort= 0 xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0 x80); 输入:RS=L,RW=H,E=H输出:DB0DB7=状态字 基础程序设计液晶屏LCD1602写入命令函数 void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy(); /忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_

18、CLR; 写地址命令LCD_Write_Com(0 x80 + x); LCD_Write_Com(0 xC0 + x); 输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码 输出:无 基础程序设计液晶屏LCD1602写入数据函数 void LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据 输出:无 基础程序设计液晶屏LCD160

19、2初始化函数void LCD_Init(void) LCD_Write_Com(0 x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0 x38); DelayMs(5); LCD_Write_Com(0 x38); DelayMs(5); LCD_Write_Com(0 x38); LCD_Write_Com(0 x08); /*显示关闭*/ LCD_Write_Com(0 x01); /*显示清屏*/ LCD_Write_Com(0 x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0 x0C); /*显示开及光标

20、设置*/ 基础程序设计液晶屏LCD1602功能函数封装写入字符串函数 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) ;写入字符函数 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);Demo:LCD1602显示目录典型模块化程序传感器数据采集数字量(开关量)数字量(总线式:1-Wire/IIC/SPI/CAN)矩阵键盘串口通信窗口转无线LCD12864液晶显示NOKIA5110液晶显示红外解码典型模块化程

21、序传感器开关量低电平有效MQ2烟雾检测模块 光照强度传感器模块声音检测传感器模块震动检测传感器模块湿度HR202模块模块火焰检测传感器模块高电平有效人体感应模块Demo:传感器模块-开关量实质:直接读取IO电平灵敏度可调(蓝色电位器调节)预热2分钟典型模块化程序传感器数字总线温度传感器DS18B20(1-Wire总线)Demo:温度采集(DS18B20)Pin名称注释1GND地2DQ数字信息输出端3VDD外界供电电源输入端,在寄生电源接线方式时接地典型模块化程序传感器数字总线DTH11温湿度传感器(1-Wire总线)功能:采集DHT11数据,显示到LCD1602上,超预定值报警LCD1602

22、数据端口P2 ,控制端口rs/rw/en:P05-P07DHT11 数据端口DO:P10报警输出端口: P00 低电平有效DHT11测试模块变量定义及函数封装:sbit rtio = P10 ;uchar data_byte;uchar RH,RL,TH,TL;void start();/开始信号uchar receive_byte();/接收一个字节void receive();/接收数据Demo:温湿度采集(DHT11)典型模块化程序传感器数字总线建议测量周期:60ms以上距离=高电平持续时间uSx声速340M/S / 2 =高电平持续时间uSx uS/58 cmDemo:超声波测距(LC

23、D1602)典型模块化程序红外解码Demo: 红外解码1838万能接收头P3.3口,中断方式按遥控器按键,液晶显示4组码值,分别是:用户码 用户码 数据码 数据反码Eg: BOLE-HORSE Code:1E-1E-00-FF典型模块化程序红外套件Demo:无线遥控方向盘2272-M4非锁四路无线遥控遥控方向盘: UPLEFT RIGHT DOWN脚位名称功能说明1VT 输出状态指示2D3数据输出3D2数据输出4D1数据输出5D0数据输出65V电源正极7GND 电源负极8ANT接天线端典型模块化程序串口通信仅使用三根线即可TTL to TTL RS232 to RS232典型模块化程序串口通信

24、参数:串口号 波特率 数据位 奇偶校验位 停止位 数据流控制典型模块化程序串口发送示例/* 初始化串口中断,timer 1, mode 2, 8-bit 重装*/void InitUART (void) SCON = 0 x50; / SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0 x20; / TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0 xF4; / TH1: 重装值可使用专用小工具计算 TR1 = 1; / TR1: timer 1 打开 EA = 1; /打开总中断 ES = 1; /打开串口中断 /* 发送一个字节*/void SendByte(unsigned char dat) SBUF = dat; while(!TI); TI = 0;T1作为通讯波特率发生器Demo:MCU to PC串口通信典型模块化程序串口收发示例Demo:MCU & PC双工通信/* 接收一个字节*/void UART_SER (void) interrupt 4 /串行中断服务程序 unsigned cha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论