第40篇 使用数码管实现计数器<一>

Q:如何用SW和KEY手动控制计数器并在数码管HEX上显示?  

A:基本原理:SW、KEY和HEX是DE2-115_Computer系统中的并行输入输出端口设备。有2种处理输入/输出设备的基本技术:程序查询和程序中断。并行端口接口包含Data、Direction、Interrupt-mask和Edge-capture这四个寄存器。

并非所有的并行端口都具有上述四个寄存器,例如仅当Data寄存器被定义为双向寄存器时,Direction寄存器才会存在。当采用程序中断方式时,Interrupt-mask和Edge-capture寄存器就必须存在。

  • Data寄存器:存储在并行端口和Nios II处理器之间传输的数据,可以实现为输入、输出或双向寄存器。
  • Direction寄存器:当Data寄存器被定义为双向寄存器时,Direction寄存器用于定义数据传输方向。
  • Interrupt-mask寄存器:用于使能连接到并行端口的输入信号的中断。
  • Edge-capture寄存器:表示在连接到并行端口的输入信号中检测到逻辑值变化。当边沿捕获寄存器的某一位有效时,该位就会保持有效。使用Nios II处理器对边沿捕获寄存器中的某一位进行写操作可以使该位无效。

Nios II处理器通过内存映射方式进行I/O 操作,每个并行端口的基地址是固定的,因为Nios II处理器按字寻址。Data寄存器的地址就是并行端口的基址,其他三个寄存器的地址偏移量为4、8或12个字节(1、2或3个字)。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要了解数码管的共阳极和共阴极的区别。共阳极数码管的所有阳极都连接在一起,而阴极是分开控制的。因此,要点亮数码管上的某一位,需要将该位对应的阴极接地,同时将对应的阳极输出高电平。 以下是51单片机控制共阳极数码管实现四位计数器的基本步骤: 1. 定义数码管的引脚和对应的端口,如: ``` sbit DIG1 = P1^0; // 数码管第一位 sbit DIG2 = P1^1; // 数码管第二位 sbit DIG3 = P1^2; // 数码管第三位 sbit DIG4 = P1^3; // 数码管第四位 sbit DIO = P2^0; // 数据线 sbit CLK = P2^1; // 时钟线 ``` 2. 定义数码管的显示字符集,即对应数字的 LED 点阵,如: ``` unsigned char code LEDChar[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; ``` 3. 编写数码管显示函数,根据需要显示的数字将对应的 LED 点阵输出到数据线上,如: ``` void Display(unsigned char num, unsigned char dig){ unsigned char i; DIO = 0; // 数据线清零 for(i = 0; i < dig; i++){ // 循环控制位选 CLK = 0; // 时钟线清零 if(i == num){ // 根据需要显示的数字选择 LED 点阵输出 DIO = LEDChar[i]; } CLK = 1; // 时钟线置高 DIO = 0; // 数据线清零 } } ``` 4. 编写主函数,实现四位计数器的功能。首先需要定义计数器的变量,然后在循环中控制计数器的变化,并将计数器每一位的数字显示到对应的数码管上,如: ``` void main(){ unsigned int cnt = 0; unsigned char cnt0, cnt1, cnt2, cnt3; while(1){ cnt++; // 计数器加1 cnt0 = cnt % 10; // 取个位数字 cnt1 = cnt / 10 % 10; // 取十位数字 cnt2 = cnt / 100 % 10; // 取百位数字 cnt3 = cnt / 1000 % 10; // 取千位数字 DIG1 = 0; // 数码管第一位接地 Display(cnt0, 1); // 显示个位数字 DIG1 = 1; // 数码管第一位输出高电平 DIG2 = 0; // 数码管第二位接地 Display(cnt1, 2); // 显示十位数字 DIG2 = 1; // 数码管第二位输出高电平 DIG3 = 0; // 数码管第三位接地 Display(cnt2, 3); // 显示百位数字 DIG3 = 1; // 数码管第三位输出高电平 DIG4 = 0; // 数码管第四位接地 Display(cnt3, 4); // 显示千位数字 DIG4 = 1; // 数码管第四位输出高电平 delay(10); // 延时10ms,控制计数速度 } } ``` 以上是共阳极数码管实现四位计数器的基本步骤,可以根据需要进行修改和扩展。注意在实际连接数码管时需要根据具体型号和引脚定义进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值