51单片机的编程学习##

上传人:woxinch****an2018 文档编号:38630673 上传时间:2018-05-05 格式:DOC 页数:21 大小:1.30MB
返回 下载 相关 举报
51单片机的编程学习##_第1页
第1页 / 共21页
51单片机的编程学习##_第2页
第2页 / 共21页
51单片机的编程学习##_第3页
第3页 / 共21页
51单片机的编程学习##_第4页
第4页 / 共21页
51单片机的编程学习##_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《51单片机的编程学习##》由会员分享,可在线阅读,更多相关《51单片机的编程学习##(21页珍藏版)》请在金锄头文库上搜索。

1、51 单片机的编程学习1 数码管动态显示 2 中断 3 单片机的定时器中断 4 中断和数码管动态显示程序 5 键盘 6A/D 与 D/A 7 串行口通信 8 液晶(LCD)显示 9IIC 总线和 AT24C02 10 52 单片机定时器 2 介绍 11TTL 电平通信、RS232 通信、RS422A 通信、RS485 通信、远程无线通信 12 看门狗、PLL 锁相环 13 DS18B20 温度传感器1、 数码管动态显示共阴极数码管的断码: void code table=/共阴极数码管代码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,

2、0x77,0x7c, 0x39,0x5e,0x79,0x71;2、中断 51 单片机共 5 个中断源,分别如下:INT0外部中断 0,由 P3.2 端口引入,低电平或下降沿引起 INT1外部中断 1,由 P3.3 端口引入,低电平或下降沿引起 T0定时器/计数器 0 中断,由 T0 计数器计满回零引起 T1定时器/计数器 1 中断,由 T1 计数器计满回零引起 TI/RI串行口中断,串行口完成一帧字符发送或接收后引起 中断允许寄存器 IE:EA、(ET2)、ES、ET1、EX1、ET0、EX0 中断优先级寄存器 IP:PS、PT1、PX1、PT0、PX03、单片机的定时器中断 定时器/计数器的

3、实质是加 1 计数器(16 位) ,由高八位和低八位两个寄存器组成。 TMOD 是定时器、计数器的工作方式寄存器,确定工作方式和功能; TCON 是控制寄存器,控制 T0、T1 的启动和停止及设置溢出标志。 TMOD位序号D76543210位符号GATEC/TM1M0GATEC/TM1M0TCON位序号D76543210位符号TF1TR1TF0TR0IE1IT1IE0IT0THX 和 TLX 的初值设定:THX=(65536-N)/256,TLX=(65536-N)%256中断服务程序的写法: C51 的中断函数格式如下:Void 函数名()interrupt 中断号 using 工作组 中断

4、服务程序内容 其中中断号为:INT00 T01 INT12 T13 TI/RI4 T254、 中断和数码管动态显示程序 #include #define uchar unsigned char #define uint unsigned int sbit dula=P26; sbit wela=P27; void delayms(uint xms) uint x,y; for (i=xms;i0;i-)for(j=110;j0;j-); void code table=/共阴极数码管代码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0

5、x77,0x7c, 0x39,0x5e,0x79,0x71;void disp(uchar,uchar);uchar num=0,num1=0,shi,ge;void main()TMOD=0x10;/ 设定定时器为工作方式 1TH1=(65535-45872)/256;TL1=(65535-45872)%256;EA=1;ET1=1;TR1=1;while(1) disp(shi,ge);void disp(uchar shi,uchar ge) P0=tableshi;dula=1; dula=0; P0=0xff; P0=0xfe; wela=1; wela=0; delayms(100

6、);P0=tablege; dula=1; dula=0; P0=0xff; P0=0xfd; wela=1; wela=0; delayms(100); void T1_time() interrupt 3 TH1=(65535-45872)/256; /重装初值 TL1=(65535-45872)%256; num1+; if(num1=20) num1=0;num+;if(num=60)num=0;shi=num/10;ge=num%10; 5、 键盘(注意要防止抖动) 矩阵键盘原理:检测时,先送一列为低电平,其余几列全为高电平(此时我们确定了列数) , 然后立即轮流检测一次各行是否有低

7、电平,若检测到某一行有低电平,则可确定当前被按 下的键是哪一行哪一列的,用同样的方流送各列一次低电平。void matrixkeyscan() uchar temo,key;P3=0xfe;/ temp=P3; temp=temp if(temp!=oxf0) delayms(10); temp=P3; temp=temp if(temp!=oxf0) temp=P3; switch(temp) case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break; . 6、 A/D 与

8、D/A A/D:1)采样定理:fs=2fi2)量化和编码3)直接 AD 转换:并行比较型、反馈比较型、间接4)AD 转换参数:分辨率、转换误差、转换时间 ADC0804 的工作原理和方法ADC0804:逐次比较型,CMOS 工艺,20 引脚,分辨率为 8 位,转换时间为 100us,输入电压范围为 0-5vADC 启动转换:CS 先为低电平,WR 随后置低,经过至少 tw 时间后,WR 拉高,随后转 换器被启动,并经过一段时间后,模数完成转换,转换结果存入数据锁存器,同时 INTR 自动变为低电平。 ADC0804 读取数据:当 INTR 变为低电平时,将 CS 先置低,接着再将 RD 置低,

9、至少经 过 tcc 时间后,数据输出口上的数据达到稳定状态,此时直接读取数字输出口数据便可得 到结果,然后将 RD 拉高,再将 CS 拉高。 参考程序: sbit adwr=P36; sbit adrd=P37; wela=1; P0=0x7f;/置 CSAD 为 0wela=0; while (1) adwr=1;_nop_();adwr=0;/启动 AD_nop_();/一个机器周期的延迟adwr=1;P1=0xff;adrd=1; /AD 读使能_nop_();adrd=0;_nop_();adval=P1;/结果传给 P1adrd=1;D/A:DAC0832,8 位,转换时间为 1us

10、,工作电压为 5-15v,主要由两个 8 位寄存器和一 个 8 位 DA 转换器组成,以电流形式输出,当输出要转换为电压时,可外接运算放大器相关计算:121215256 256 15256OUTOUTREF OUTREF OUTIIVDIK VDIK 常数DAC0832 操作时序图可以看出,当 CS 为低电平后,数据总线上数据才开始保持有效,然后再将 WR 置低,从 Iout 线上看出,在 WR 置低 ts 后 DA 转换结束,Iout 输出稳定。若只控制一次转换,接下 来将 WR 和 CS 拉高即可,若连续转换则只需要改变数字端输入数据7、 串行口通信 串行通信方式:异步和同步 制式:单工、

11、半双工、全双工RS232 电平与 TTL 电平的转换:MAX232 芯片 RS232 串行总线适用于:设备之间的通讯距离不大于 15m,传输距离最大为 20kBps。RS232 协议以-515v 为逻辑 1,以+5-+15v 为逻辑 0波特率:每秒传输二进制代码的位数 串行口的四种工作方式对应的波特率方式 0 的波特率:/12oscf方式 1 的波特率:12/32 ()SMODT的溢出率方式 2 的波特率:2/64SMOD oscf方式 3 的波特率:12/32 ()SMODT的溢出率相关寄存器:PCON 51 串行口是一个可编程全双工的通信接口,具有 UART(通用异步接发器) ,能同时进行

12、 数据的发送和接收。主要由两个独立的串行数据缓冲寄存器 SBUF 和发送控制器、接受寄 存器、输入移位寄存器和若干控制门电路组成。 串行口控制寄存器 SCON位序号D76543210位符号SM0SM1SM2RENTB8RB8TIRI串行口四种工作方式由 SM0、SM1 控制SM2多机通信 REN允许串行接收位 TB8、RB8方式 2、3 中发送、接收的第九位,作为地址帧、数据帧的标志位 TI、RI发送、接收中断标志位 串行口方式一编程:#include #define uchar unsigned char#define uint unsigned int uchar flag,a,i; uc

13、har code table=“i get“; void init() TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM1=1; Sm0=0; EA=1; ES=1; void main() init();while (1)if (flag=1)ES=0;for(i=0;i #define uchar unsigned char #define uint unsigned int sbit rs=P35; sbit lcden=P34; sbit dula=P26; sbit wela=P27; uchar table1=“hello everyo

14、ne!“; uchar table2=“welcome to here!“; void delay(uint x) uint a,b; for(a=x;a0;a-) for(b=10;b0;b-); void delay1(uint x) uint a,b; for(a=x;a0;a-) for(b=100;b0;b-); void write_com(uchar com) P0=com; rs=0; lcden=0; delay(10); lcden=1;/高脉冲 delay(10); lcden=0;void write_date(uchar date) P0=date; rs=1; lc

15、den=0; delay(10); lcden=1;/高脉冲 delay(10); lcden=0;void init() dula=0; wela=0; write_com(0x38); delay(20); write_com(0x0c); delay(20); write_com(0x06); delay(20); write_com(0x01); delay(20); void main() uchar a; init();write_com(0x80+17); delay(20);for(a=0;a16;a+) write_date(table1a); delay(20); write_com(0xc0+17); delay(50); for(a=0;a16;a+) write_date(table2a); delay(40); for(a=0;a16;a+) write_com(0x18); delay1(200); while(1); 12232 液晶操作:12232 液晶,5V 电压驱动,带背光,内置 8192 个汉字的 16*16 点汉字库 和 128 个字符的 16*8 点 ASCII 字符集。该液晶主要由行驱动、列驱动、128*32 全点阵液 晶显示器组成, 采用并行或串行两种控制方式。12864 汉字图形点阵液晶显示

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号