1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 各位大神幫忙看看單片機程序,我要在個位上顯示小數點 要怎么改 [打印本頁]

作者: ALASA    時間: 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. }
復制代碼

作者: ALASA    時間: 2020-3-30 12:59
smg[6]=num%10&0x80; 改成這樣子也沒用  數碼管直接不亮了
作者: game灬boy    時間: 2020-3-30 14:43
bit_data=0xfe;這個是位選吧?
if(你的位選選到個位的數碼管時)
dis_table[i]等于dis_table[i]和0x80(1000 0000)按位或   //點亮小數點的led
else
按你現在的代碼寫
作者: game灬boy    時間: 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了當然不亮
作者: ALASA    時間: 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
作者: wulin    時間: 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;
作者: game灬boy    時間: 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. }
復制代碼

   
作者: ALASA    時間: 2020-3-30 19:58
wulin 發表于 2020-3-30 16:05
錯誤:unsigned char num;
unsigned int num;

改成這樣數碼管不亮了
作者: ALASA    時間: 2020-3-30 20:21
game灬boy 發表于 2020-3-30 19:16
那你重新寫個數組dis_table_1[]把帶小數點的數組重新定義
當你display()到個位時P1調用dis_table_1[]
...

感謝幫助,問題解決了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1