欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3002|回復: 8
收起左側

各位大神幫忙看看單片機程序,我要在個位上顯示小數點 要怎么改

[復制鏈接]
ID:718727 發表于 2020-3-30 12:58 | 顯示全部樓層 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit led=P0^5;
  4. unsigned char code dis_table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
  5. unsigned char smg[8];
  6. unsigned char num;
  7. void mDelay(unsigned int Delay)
  8. {
  9.   unsigned int i;
  10.   for(;Delay>0;Delay--)
  11.   {
  12.     for(i=0;i<54;i++);
  13.   }
  14. }
  15. void display()
  16. { unsigned char i,bit_data;
  17.   bit_data=0xfe;
  18.   for(i=0;i<8;i++)
  19.   {
  20.     P2=0xff;
  21.         P1=dis_table[smg[i]];
  22.         P2=bit_data;
  23.         mDelay(10);
  24.         bit_data=_crol_(bit_data,1);
  25.   }
  26. }

  27. void main()
  28. { TMOD=0x05;
  29.   TH0=0;
  30.   TL0=0;
  31.   ET0=1;
  32.   EA=1;
  33.   TR0=1;
  34.   P1=0;
  35.   while(1)
  36.   {
  37.     num=(TH0<<8|TL0);
  38.         smg[0]=num%16;
  39.         smg[1]=num/16;
  40.         smg[6]=num%10;
  41.         smg[7]=num/10;
  42.         display();
  43.   }
  44. }
  45. void T0_int()interrupt 1
  46. {
  47.   TH0=0;
  48.   TL0=0;
  49.   smg[0]=0;
  50.   smg[1]=0;
  51.   smg[6]=0;
  52.   smg[7]=0;
  53. }
復制代碼
回復

使用道具 舉報

ID:718727 發表于 2020-3-30 20:21 | 顯示全部樓層
game灬boy 發表于 2020-3-30 19:16
那你重新寫個數組dis_table_1[]把帶小數點的數組重新定義
當你display()到個位時P1調用dis_table_1[]
...

感謝幫助,問題解決了
回復

使用道具 舉報

ID:718727 發表于 2020-3-30 19:58 | 顯示全部樓層
wulin 發表于 2020-3-30 16:05
錯誤:unsigned char num;
unsigned int num;

改成這樣數碼管不亮了
回復

使用道具 舉報

ID:367369 發表于 2020-3-30 19:16 | 顯示全部樓層
ALASA 發表于 2020-3-30 16:02
不行呀  dis_table[ i]等于dis_table[ i]和0x80(1000 0000)按位或     寫這句的時候提示  unmodifiable ...

那你重新寫個數組dis_table_1[]把帶小數點的數組重新定義
當你display()到個位時P1調用dis_table_1[]
  1. void display()
  2. { unsigned char i,bit_data;
  3.   bit_data=0xfe;
  4.   for(i=0;i<8;i++)
  5.   {
  6.         P2=0xff;
  7.    if ( bit_data==0xfd)
  8.         P1=dis_table_1[smg[i]];
  9.     else
  10.         P1=dis_table[smg[i]];
  11.         
  12.         P2=bit_data;
  13.         mDelay(10);
  14.         bit_data=_crol_(bit_data,1);
  15.   }
  16. }
復制代碼

   
回復

使用道具 舉報

ID:213173 發表于 2020-3-30 16:05 | 顯示全部樓層
ALASA 發表于 2020-3-30 12:59
smg[6]=num%10&0x80; 改成這樣子也沒用  數碼管直接不亮了

錯誤:unsigned char num;
unsigned int num;

smg[6]=num%10|0x80;
回復

使用道具 舉報

ID:718727 發表于 2020-3-30 16:02 | 顯示全部樓層
game灬boy 發表于 2020-3-30 14:43
bit_data=0xfe;這個是位選吧?
if(你的位選選到個位的數碼管時)
dis_table等于dis_table和0x80(1000  ...

不行呀  dis_table[ i]等于dis_table[ i]和0x80(1000 0000)按位或     寫這句的時候提示  unmodifiable lvalue
回復

使用道具 舉報

ID:367369 發表于 2020-3-30 14:59 | 顯示全部樓層
ALASA 發表于 2020-3-30 12:59
smg[6]=num%10&0x80; 改成這樣子也沒用  數碼管直接不亮了

你這是按位與 1&0=0啊  
例如0x3f&0x80
0011 1111  &  1000 0000
全部為0了當然不亮
回復

使用道具 舉報

ID:367369 發表于 2020-3-30 14:43 | 顯示全部樓層
bit_data=0xfe;這個是位選吧?
if(你的位選選到個位的數碼管時)
dis_table[i]等于dis_table[i]和0x80(1000 0000)按位或   //點亮小數點的led
else
按你現在的代碼寫
回復

使用道具 舉報

ID:718727 發表于 2020-3-30 12:59 | 顯示全部樓層
smg[6]=num%10&0x80; 改成這樣子也沒用  數碼管直接不亮了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表