DSP-F28335学习日志-数码管亮度问题

最近在学习使用普中DSP-F28335,以数码管示例代码为基础设计定时器,发现使用定时器中断控制数码管显示时间时,4位数码管的最后一位亮度明显更高,如下图所示:

 在每个显示位刷新速率相同的情况下,亮度更高说明点亮时间更长,因此问题应该出在显示代码部分,如下

	for(i=0;i<4;i++)
	{
		HC164SendData(buf[i]);
		switch(i)
		{
			case 0: SEG1_SETH;SEG2_SETL;SEG3_SETL;SEG4_SETL;break;
			case 1: SEG1_SETL;SEG2_SETH;SEG3_SETL;SEG4_SETL;break;
			case 2: SEG1_SETL;SEG2_SETL;SEG3_SETH;SEG4_SETL;break;
			case 3: SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETH;break;
		}
		DELAY_US(500);
	}

以上为数码管显示源代码(smg.c)中 void SMG_DisplayFloat(float num,unsigned char dotnum) 函数部分,在刷写完第四位后,段选停留在case3,即保持在第4位被点亮状态,直到下次中断产生,数码管开始时下一次刷新。修改方案也很简单,即在每次刷新完成后,将段选置零即可,如下所示

	for(i=0;i<4;i++)
	{
		HC164SendData(buf[i]);
		switch(i)
		{
			case 0: SEG1_SETH;SEG2_SETL;SEG3_SETL;SEG4_SETL;break;
			case 1: SEG1_SETL;SEG2_SETH;SEG3_SETL;SEG4_SETL;break;
			case 2: SEG1_SETL;SEG2_SETL;SEG3_SETH;SEG4_SETL;break;
			case 3: SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETH;break;
		}
		DELAY_US(500);
	}
	SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETL;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你实现按键控制数码管显示0-f的功能。你需要一个数码管模块和一些按键模块,以及一个开发板或者单片机来控制它们。 首先,你需要将数码管模块连接到开发板或单片机上,并根据具体的型号和接口来设置它的引脚。然后,你需要连接按键模块,并设置其引脚。 接下来,你需要编写代码来控制数码管和按键。这里我提供一个简单的示例代码,你可以根据自己的需求进行修改和优化。 ``` #include <reg52.h> // 数码管引脚定义 sbit D1 = P1^0; sbit D2 = P1^1; sbit D3 = P1^2; sbit D4 = P1^3; // 按键引脚定义 sbit K1 = P2^0; sbit K2 = P2^1; sbit K3 = P2^2; sbit K4 = P2^3; // 数码管显示表 unsigned char code numTable[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; void delay(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) { for(j = 0; j < 120; j++); } } void main() { // 初始化数码管 D1 = D2 = D3 = D4 = 1; while(1) { if(K1 == 0) { // 按键1 D1 = 0; D2 = 1; D3 = 1; D4 = 1; P0 = numTable[0]; } else if(K2 == 0) { // 按键2 D1 = 1; D2 = 0; D3 = 1; D4 = 1; P0 = numTable[1]; } else if(K3 == 0) { // 按键3 D1 = 1; D2 = 1; D3 = 0; D4 = 1; P0 = numTable[2]; } else if(K4 == 0) { // 按键4 D1 = 1; D2 = 1; D3 = 1; D4 = 0; P0 = numTable[3]; } else { D1 = D2 = D3 = D4 = 1; P0 = 0xff; } delay(10); // 延时一段时间,防止按键抖动 } } ``` 这个示例代码实现了按键控制数码管显示0-f的功能。当按下不同的按键时,会在数码管上显示对应的数字或字母。你可以根据自己的需求修改代码,并添加更多的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值