第43篇 使用数码管实现计数器<四>

Q:如何使用间隔定时器实现数码管循环计数器?  

A:DE2-115_Computer系统包含间隔定时器,Nios II处理器可使用这个定时器实现延时:定时器首先加载一个预设值作为计数值,然后将该计数值递减到0。定时器的时钟信号采用DE2-115_Computer系统提供的50MHz时钟信号。定时器的编程配置接口包含6个16位寄存器。

两个16位的Counter start value寄存器用于修改定时器的定时周期,默认的定时周期为125ms。本实验中需要实现250ms即也是0.25s的延时,其对应的预设计数值为50MHz × 250 ms= 12.5 × 1000000,比之前我们用延迟循环实现的0.25s延时更精准。部分汇编语言程序代码:

同样是在HEX1~HEX0上实现十进制计数器,从0开始每0.25秒递增1计数直到99,再从0开始重新计数;按下任意KEY,计数器会停止或开始计数。

首先,需要了解数码管的共阳极和共阴极的区别。共阳极数码管的所有阳极都连接在一起,而阴极是分开控制的。因此,要点亮数码管上的某一位,需要将该位对应的阴极接地,同时将对应的阳极输出高电平。 以下是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、付费专栏及课程。

余额充值