蓝桥杯单片机编程笔记
一点说明
本笔记为准备第六届蓝桥杯单片机组省赛时写下,其中知识点不乏有所错漏、理解偏颇,但都是经实际测试代码,仅用于应付比赛使用。文档来自于网络搜索
作者:胡昶威
QQ:1040385974文档收集自网络,仅用于个人学习
勿做商业用途
一、 IO口编程 1文档来自于网络搜索
二、 数码管动态扫描和定时器 3文档来自于网络搜索
三、 矩阵键盘 5文档来自于网络搜索
四、 串口通讯和串口中断 9文档收集自网络,仅用于个人学习
五、 外部中断的使用 14个人收集整理 勿做商业用途
六、 实时时钟DS1302的使用 14文档来自于网络搜索
七、 PCF8591与IIC总线的使用 16个人收集整理 勿做商业用途
八、 DS18B20温度芯片的使用 22资料个人收集整理,勿做商业用途
九、 超声波传感器的使用 23资料个人收集整理,勿做商业用途
十、 步进电机与直流电机的使用 26文档收集自网络,仅用于个人学习
十一、 扩展:宏定义编程方法(推荐) 29文档收集自网络,仅用于个人学习
十二、 注意事项(常见编程错误) 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译码器的话,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)|(这里填对应锁存器的位移号))。资料个人收集整理,勿做商业用途
数码管动态扫描和定时器资料个人收集整理,勿做商业用途
数码管显示分为段选和位选,文档收集自网络,仅用于个人学习
数码管定义和显示函数:文档收集自网络,仅用于个人学习
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};个人收集整理 勿做商业用途
unsigned char dspbuf[]={10,10,10,10,10,10,10,10};文档收集自网络,仅用于个人学习
unsigned char dspcom=0;文档来自于网络搜索
void display()资料个人收集整理,勿做商业用途
{
//段选,消隐资料个人收集整理,勿做商业用途
P2=((P2&0x1f)|0xe0);资料个人收集整理,勿做商业用途
P0=0xff;文档来自于网络搜索
P2=P2&0x1f;资料个人收集整理,勿做商业用途
//位选
P2=((P2&0x1f)|0xc0);文档来自于网络搜索
P0=(1<<dspcom);个人收集整理 勿做商业用途
P2=P2&0x1f;个人收集整理 勿做商业用途
//段码输入
P2=((P2&0x1f)|0xe0);文档来自于网络搜索
P0=tab[dspbuf[dspcom]];文档收集自网络,仅用于个人学习
P2=P2&0x1f;资料个人收集整理,勿做商业用途
if(++dspcom==8)个人收集整理 勿做商业用途
dspcom=0;文档来自于网络搜索
}注意:这里1左移dspcom位,刚开始dspcom=0,则1左移dspcom位依旧为1,接着dspcom每次自增1,1对应二进制0000 0001,即把1每次向左移,每次都比上一次多移一位,直至8位移完,对应8个数码管
蓝侨杯单片机编程笔记-胡昶威 来自淘豆网m.daumloan.com转载请标明出处.