蓝桥杯单片机编程笔记蓝桥杯单片机编程笔记 IO编程,该开发板使用了 573 锁存器,通过 P2口的 5,6,7 位连接 3-8 译码 器,扩展出了 8 个口,其中 4 个口分别连接 4 个 573 锁存器,这里以LE D的锁存器来举例: ### 蓝桥杯单片机部分编程笔记 #### IO口编程 在单片机的开发过程中,IO口编程是一项基础而重要的技能。本节主要介绍如何利用573锁存器实现IO口的扩展,并以LED为例进行具体说明。 **原理及应用:** 在本例中,开发板采用了573锁存器来实现IO口的扩展。通过P2口的5、6、7位连接3-8译码器,从而扩展出了8个额外的IO口。这8个扩展口中的4个分别连接到了4个573锁存器上。下面将以LED的锁存器作为例子来解释具体的编程思路。 **编程过程:** 1. **初始化P2口:** - `P2 = ((P2 & 0x1f) | 0x80);` - 上述代码中,`0x1f = 00011111`,通过将P2口与`0x1f`进行与运算,可以确保P2口的高三位被清零,而低五位保持不变。 - 然后通过或运算加上`0x80(10000000)`,可以设置控制3-8译码器的高三位。 2. **选通锁存器:** - 通过上述步骤,我们使得P2口的高三位分别为`100`,这意味着3-8译码器的输出Y4被选中。 - 接下来,通过与非门,Y4C变为1,从而使对应的LED锁存器被选通。 3. **操作P0口:** - 当锁存器选通后,可以通过对P0口的操作来控制LED的状态。 - 在完成P0口的操作后,需要再次将P2口的高三位清零(`P2 = P2 & 0x1f`),以关闭锁存器。 **总结:** 此方法不仅适用于LED,还可以应用于其他外围设备如数码管、蜂鸣器等。选择不同的锁存器只需要更改`((P2 & 0x1f) | (这里填对应锁存器的位移号))`中的位移号即可。 #### 数码管动态扫描和定时器 在单片机系统中,数码管常用于显示数字或其他字符信息。为了实现多段数码管的同时显示,通常采用动态扫描技术。此外,定时器的合理配置对于实现动态扫描至关重要。 **数码管显示原理:** 1. **段选与位选:** - 段选是指控制数码管的各段是否发光,位选则是指控制哪一个数码管被点亮。 - 通过动态扫描技术,可以在短时间内快速地切换每个数码管的显示状态,给人以所有数码管同时显示的错觉。 2. **显示函数示例:** - ```c 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; } ``` - 在这个示例中,通过循环更新`dspcom`变量来实现数码管的轮流点亮。 3. **定时器配置:** - 单片机通常配备有两个定时器T0和T1。定时器的工作方式包括0、1、2、3四种,其中最常用的是工作方式1(16位计数模式)和工作方式2(8位自动重载模式)。 - 配置示例: - ```c TMOD |= 0x01; // 配置T0为方式1 TH0 = (65535 - 2000) / 256; // 配置初值 TL0 = (65535 - 2000) % 256; // 配置低8位初值 ``` **总结:** 通过合理的配置定时器并结合动态扫描技术,我们可以高效地在多个数码管之间切换显示,实现清晰稳定的数字显示效果。这种方法不仅适用于简单的数字显示,还可以扩展到更复杂的信息显示系统中。
剩余34页未读,继续阅读
- 粉丝: 4w+
- 资源: 57
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助