欢迎来到天天文库
浏览记录
ID:47537779
大小:971.22 KB
页数:34页
时间:2019-09-15
《蓝侨杯单片机编程笔记-胡昶威》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、蓝桥杯单片机编程笔记一点说明本笔记为准备第六届蓝桥杯单片机组省赛时写下,其中知识点不乏有所错漏、理解偏颇,但都是经实际测试代码,仅用于应付比赛使用。作者:胡昶威QQ:10403859742015.3.25一、IO口编程1二、数码管动态扫描和定时器3三、矩阵键盘5四、串口通讯和串口中断9五、外部中断的使用14六、实时时钟DS1302的使用14七、PCF8591与IIC总线的使用16八、DS18B20温度芯片的使用22九、超声波传感器的使用23十、步进电机与直流电机的使用26十一、扩展:宏定义编程方法(推荐)29十二、注意事项(常见编程错误
2、)33一、IO口编程IO编程,该开发板使用了573锁存器,通过P2口的5,6,7位连接3-8译码器,扩展出了8个口,其中4个口分别连接4个573锁存器,这里以LED的锁存器来举例:原理图573:分析代码:P2=((P2&0x1f)|0x80);其中0x1f=0001 1111,P2与0x1f进行与运算,高三位清零,其余位保持原来状态,不改变,即把控制3-8译码器的高三位留出来:接着再或上0x80;容易发现0x80=1000 0000;或运算,与1或结果为1,与0或结果不变,所以或上0x80只需看P2的高三位,则高三位为100,对应3-8
3、译码器的话,P2^7=1;P2^6=0;P2^5=0;所以输出Y4=0;Y4再经过与非运算,看下图示:则输出Y4C=1;即LED对应的锁存器的片选信号被选中,锁存器打通,接下来就可以对P0口进行操作,操作完之后,P2=P2&0x1f;P2高三位直接清零,此时Y4C=0,则把锁存器锁上了。类似的方法,数码管、蜂鸣器等都是如此操作,选中锁存器代码:P2=((P2&0x1f)
4、(这里填对应锁存器的位移号))。一、数码管动态扫描和定时器数码管显示分为段选和位选,数码管定义和显示函数:codeunsignedchartab[]={0xc0,0xf
5、9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsignedchardspbuf[]={10,10,10,10,10,10,10,10};unsignedchardspcom=0;voiddisplay(){//段选,消隐P2=((P2&0x1f)
6、0xe0);P0=0xff;P2=P2&0x1f;//位选P2=((P2&0x1f)
7、0xc0);P0=(1<8、0xe0);P0=tab[dspbuf[dspcom]];P9、2=P2&0x1f;if(++dspcom==8)dspcom=0;}注意:这里1左移dspcom位,刚开始dspcom=0,则1左移dspcom位依旧为1,接着dspcom每次自增1,1对应二进制00000001,即把1每次向左移,每次都比上一次多移一位,直至8位移完,对应8个数码管。定时器配置:这里只需记住定时器的配置,知道怎么使用就可以了。首先有两个定时器,T0和T1,(也有的单片机有T2),定时器有4种工作方式0,1,2,3;其中最常用的是方式1(16位),其次是方式2(8位自动重装,串口通讯中断会用到)。定时器需要配置:TMO10、D11、=0x01;配置成使用定时器0,工作方式为1;同理使用定时器1工作方式1:TMOD12、=0x10;则同时使用两个定时器且工作方式为1,那么可以:TMOD13、=0x11;定时器1配置成工作方式2:TMOD14、=0x20;接着配置(以定时器0举例):TH0=(65535-2000)/256;//配置初值TL0=(65535-2000)%256;ET0=1;TR0=1;//定时0中断EA=1;//总中断定时器1也是同理的,只不过0要改成1.接着定时中断函数和优先级:定时器0voidisr_timer_0(void)interrupt1//默认中15、断优先级1{TH0=(65536-2000)/256;TL0=(65536-2000)%256;//定时器重载display();}定时器1:voidisr_timer_1(void)interrupt3//默认中断优先级3{TH0=(65536-2000)/256;TL0=(65536-2000)%256;//定时器重载display();}注意:定时器0优先级为1,定时器1为3,串口中断优先级为4,总共有5个中断源,后面还会介绍外部中断和串口中断。数码管动态扫描,显示函数放在定时中断函数里面,2ms扫一次是最稳定的!!一、矩阵键盘矩16、阵键盘需要死记了!这里不再讲独立键盘。第二种单片机键盘扫描代码(没有消抖):sfrP4^4=0xC0;//键盘定义sbitr1=P3^0;//4行sbitr2=P3^1;sbitr3=P3^2;sbitr4
8、0xe0);P0=tab[dspbuf[dspcom]];P
9、2=P2&0x1f;if(++dspcom==8)dspcom=0;}注意:这里1左移dspcom位,刚开始dspcom=0,则1左移dspcom位依旧为1,接着dspcom每次自增1,1对应二进制00000001,即把1每次向左移,每次都比上一次多移一位,直至8位移完,对应8个数码管。定时器配置:这里只需记住定时器的配置,知道怎么使用就可以了。首先有两个定时器,T0和T1,(也有的单片机有T2),定时器有4种工作方式0,1,2,3;其中最常用的是方式1(16位),其次是方式2(8位自动重装,串口通讯中断会用到)。定时器需要配置:TMO
10、D
11、=0x01;配置成使用定时器0,工作方式为1;同理使用定时器1工作方式1:TMOD
12、=0x10;则同时使用两个定时器且工作方式为1,那么可以:TMOD
13、=0x11;定时器1配置成工作方式2:TMOD
14、=0x20;接着配置(以定时器0举例):TH0=(65535-2000)/256;//配置初值TL0=(65535-2000)%256;ET0=1;TR0=1;//定时0中断EA=1;//总中断定时器1也是同理的,只不过0要改成1.接着定时中断函数和优先级:定时器0voidisr_timer_0(void)interrupt1//默认中
15、断优先级1{TH0=(65536-2000)/256;TL0=(65536-2000)%256;//定时器重载display();}定时器1:voidisr_timer_1(void)interrupt3//默认中断优先级3{TH0=(65536-2000)/256;TL0=(65536-2000)%256;//定时器重载display();}注意:定时器0优先级为1,定时器1为3,串口中断优先级为4,总共有5个中断源,后面还会介绍外部中断和串口中断。数码管动态扫描,显示函数放在定时中断函数里面,2ms扫一次是最稳定的!!一、矩阵键盘矩
16、阵键盘需要死记了!这里不再讲独立键盘。第二种单片机键盘扫描代码(没有消抖):sfrP4^4=0xC0;//键盘定义sbitr1=P3^0;//4行sbitr2=P3^1;sbitr3=P3^2;sbitr4
此文档下载收益归作者所有