蓝侨杯单片机编程笔记-胡昶威讲解.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
蓝桥杯单片机编程笔记 一点说明 本笔记为准备第六届蓝桥杯单片机组省赛时写下,其中知识点不乏有所错漏、理解偏颇,但都是经实际测试代码,仅用于应付比赛使用。 作者:胡昶威 QQ:1040385974 2015.3.25 一、 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=((P20x1f)|(这里填对应锁存器的位移号))。 二、 数码管动态扫描和定时器 数码管显示分为段选和位选, 数码管定义和显示函数: 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=((P20x1f)|0xe0); P0=0xff; P2=P20x1f; //位选 P2=((P20x1f)|0xc0); P0=(1dspcom); P2=P20x1f; //段码输入 P2=((P20x1f)|0xe0); P0=tab[dspbuf[dspcom]]; P2=P20x1f; if(++dspcom==8) dspcom=0; }注意:这里1左移dspcom位,刚开始dspcom=0,则1左移dspcom位依旧为1,接着dspcom每次自增1,1对应二进制0000 0001,即把1每次向左移,每次都比上一次多移一位,直至8位移完,对应8个数码管。 定时器配置: 这里只需记住定时器的配置,知道怎么使用就可以了。首先有两个定时器,T0和T1,(也有的单片机有T2),定时器有4种工作方式0,1,2,3;其中最常用的是方式1(16位),其次是方式2(8位自动重装,串口通讯中断会用到)。 定时器需要配置:TMOD |=0x01;配置成使用定时器0,工作方式为1;同理使用定时器1工作方式1:TMOD |=0x10;则同时使用两个定时器且工作方式为1,那么可以:TMOD |=0x11; 定时器1配置成工作方式2:TMOD |=0x20; 接着配置(以定时器0举例): TH0=(65535-2000)/256;//配置初值 TL0=(65535-2000)%256; ET0=1; TR0=1;//定时0中断 EA =1;//总中断 定时器1也是同理的,只不过0要改成1. 接着定时中断函数和优先级: 定时器0 void isr_timer_0(void) interrupt 1 //默认中断优先级 1 { TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; //定时器重载 display(); } 定时器1: void isr_timer_1(void) interrupt 3 //默认中断优先级 3 { TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; //定时器重载 display(); } 注意:定时器0优先级为1,定时器1为3,串

文档评论(0)

shuwkb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档