采用STM32接TM1650驅動共陰數碼管, 程式在除錯時其它一起正常, 但是有個問題困惑很久無法解決: 數值從0~9999增加,剛開始在千百十位不能顯示“0”,隨著數值增加,大于等于10時開始顯示十位,大于等于100時顯示百位,大于等于1000時顯示千位,希望大神幫忙指點方法!!
void TM16_Display(unsigned int data) //顯示函式,data為顯示的資料,0-9999
{
static unsigned char TM16_Display_buf[11]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x00};
unsigned char ge,shi,bai,qian;
ge=data%10; // 求余
shi=(data/10)%10; //先除再求余
bai=(data/100)%10; //先除再求余
qian=(data/1000)%10; //先除再求余
TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //寫個位發送顯示
TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //寫十位發送顯示 |0x80可增加小數點
TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //寫百位發送顯示 |0x80可增加小數點
TM16_Write_REG(0x68,TM16_Display_buf[qian]); //寫千位發送顯示 |0x80可增加小數點
}

uj5u.com熱心網友回復:
用3個輔助信號。雖然看起來有點麻煩。。。。
ALL_OFF();
if (qian)
{
QIAN_ON();
BAI_ON();
SHI_ON();
else if (bai)
{
BAI_ON();
SHI_ON();
}
else if(shi)
{
SHI_ON();
}
TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //寫個位發送顯示
if (SHI_IS_ON()) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //寫十位發送顯示 |0x80可增加小數點
if (BAI_IS_ON()) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //寫百位發送顯示 |0x80可增加小數點
if (QIAN_IS_ON()) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //寫千位發送顯示 |0x80可增加小數點
uj5u.com熱心網友回復:
TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //寫個位發送顯示if (qian || bai || shi) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //寫十位發送顯示 |0x80可增加小數點
else SHI_BLANK(); /* 寫空白 */
if (bai || qian) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //寫百位發送顯示 |0x80可增加小數點
else BAI_BLANK();
if (qian) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //寫千位發送顯示 |0x80可增加小數點
else QIAN_BLANK();
看起來簡單一點。。。實際代碼量不一定少。。
uj5u.com熱心網友回復:
沒啥難度就是麻煩點而已if(num<10)
{
}
else if(num<100)
{
}
else if(num<1000)
{
}
else if(num<10000)
{
}
uj5u.com熱心網友回復:
謝謝回復, 那這幾個SHI_BLANK(),... 函式該咋寫呢
uj5u.com熱心網友回復:
TM16_Write_REG(0x6e,0); //寫個位發送顯示
后面依次類推
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282958.html
標籤:單片機/工控
下一篇:AD 匯入drill檔案報錯Error: Line no. 233 - - Invalid tool number definition: T0, the a