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

標題: STC實驗板顯示函數誰能幫忙解釋一下? [打印本頁]

作者: hjx5548    時間: 2023-11-30 05:34
標題: STC實驗板顯示函數誰能幫忙解釋一下?
STC實驗板這個顯示函數看不懂
/********************** 顯示掃描函數 ************************/
void DisplayScan(void)
{   
    P7 = ~T_COM[7-display_index];
    P6 = ~t_display[LED8[display_index]];
    if(++display_index >= 8)    display_index = 0;  //8位結束回0
}
這段程序誰能幫忙解釋一下?如果位選不在同一個字節的IO口,比如分別用了P1口和P3口,程序要怎樣修改?
作者: devcang    時間: 2023-11-30 10:06
重新定義位變量,賦值時寫單獨的語句,
sbit w1 = P1^1;
sbit w2 = P1^2;
sbit w3 = P1^6;
sbit w4 = P3^7;



賦值時,分別
w1=0;
w2=1;
w3=0;
w4=0;


作者: 小盼666    時間: 2023-11-30 11:09
直接在頭文件把位選 映射到P1 P3端口
作者: hjx5548    時間: 2023-11-30 12:47
devcang 發表于 2023-11-30 10:06
重新定義位變量,賦值時寫單獨的語句,
sbit w1 = P1^1;
sbit w2 = P1^2;

這樣賦值,在上面的函數里面怎么寫?
作者: hjx5548    時間: 2023-11-30 12:50
小盼666 發表于 2023-11-30 11:09
直接在頭文件把位選 映射到P1 P3端口

如果位選三位,斷選有七段,索引又該怎么寫?
作者: hjx5548    時間: 2023-11-30 13:44
devcang 發表于 2023-11-30 10:06
重新定義位變量,賦值時寫單獨的語句,
sbit w1 = P1^1;
sbit w2 = P1^2;

哪這樣的映射在函數里面又該怎么寫
作者: STC新未來    時間: 2023-11-30 13:48
P7做COM口控制,分時輸出。P6口做SEG口,顯示數字碼表。實驗箱采樣共陽極數碼管,所以使用共陰極碼表時要進行反相處理。

若樓主還有疑問可以去STCAI官方咨詢

作者: wulin    時間: 2023-11-30 17:47
/*
t_display[]     //共陰段碼
T_COM[]         //共陰位碼
LED8[8]         //顯示緩沖
display_index;  //顯示位索引
*/
/********************** 顯示掃描函數 ************************/
void DisplayScan(void)
{//使用的是共陽數碼管,段碼、位碼都要取反
        P7 = ~T_COM[7-display_index];//位掃描順序7、6、5、4、3、2、1、0
        P6 = ~t_display[LED8[display_index]];//段碼顯示內容示范12-30-58
        if(++display_index >= 8)    display_index = 0;  //顯示位索引8位結束回0
}

/********************** Timer0 1ms中斷函數 ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();  //1ms掃描顯示一位
    B_1ms = 1;      //1ms標志
}

任意端口組合驅動數碼管.rar (136.94 KB, 下載次數: 5)



作者: hjx5548    時間: 2023-12-4 15:36
STC新未來 發表于 2023-11-30 13:48
P7做COM口控制,分時輸出。P6口做SEG口,顯示數字碼表。實驗箱采樣共陽極數碼管,所以使用共陰極碼表時要進 ...

STC官網,只知道截圖手冊,根本不能回答實質性問題。
作者: hjx5548    時間: 2023-12-6 09:43
wulin 發表于 2023-11-30 17:47
/*
t_display[]     //共陰段碼
T_COM[]         //共陰位碼

#include <STC8H.H>

sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit LED7=P2^7;

sbit wei0=P1^4;
sbit wei1=P1^5;
sbit wei2=P3^3;

unsigned char data table[18]={

        0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
  0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,
        0x00,0x02};           //0000  0000

LED_buf[]={8,8,8};       
unsigned int wnd,Temp1=22,Temp2,Temp3;       
       
void LED_dula(unsigned char dat);
void LED_wela(unsigned char dat);
void Delay_ms(unsigned int t);       
void GPIO_CSH();
void LED_xshi();       
void LED_fuwu();
       
void LED_dula(unsigned char dat)
{
        LED0=dat   &0x01;
        LED1=dat>>1&0x01;
        LED2=dat>>2&0x01;
        LED3=dat>>3&0x01;
        LED4=dat>>4&0x01;
        LED5=dat>>5&0x01;
        LED6=dat>>6&0x01;
        LED7=dat>>7&0x01;
}

void LED_wela(unsigned char dat)
{
        wei0=dat   &0x01;
        wei1=dat>>1&0x01;
        wei2=dat>>2&0x01;
}

void Delay_ms(unsigned int t)
{
        unsigned int i,j;
        for(i=t;i>0;i--)
                for(j=120;j>0;j--);
}

void GPIO_CSH()
{
          P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0xc0;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
}

void LED_xshi()
{
          unsigned int i;
        switch (i)
  {
          case0:
                LED_wela(LED_buf[0]);//送位碼       
          LED_dula(0);               //送段碼       
          Delay_ms(1);       
                LED_wela(0x00);                        //位消隱       
                i++;
          break;
               
          case1:
                LED_wela(LED_buf[1]);//送位碼
          LED_dula(1);         //送段碼          
          Delay_ms(1);       
                LED_wela(0x00);                        //位消隱       
                i++;               
          break;
               
          case2:
                LED_wela(LED_buf[2]);//送位碼
          LED_dula(2);               //送段碼       
          Delay_ms(1);       
                LED_wela(0x00);                        //位消隱       
                i=0;
          break;               
               
          default:
          break;
  }

}

void LED_fuwu()
{
unsigned int i;
        switch (wnd)
  {
          case0:
                LED_buf[0]=18;
                LED_buf[1]=Temp1/10;
                LED_buf[2]=Temp1%10;
                for(i=0;i<5000;i++)
    {
                        LED_xshi();
    }
          break;
               
          case1:
                LED_buf[0]=18;
                LED_buf[1]=Temp2/10;
                LED_buf[2]=Temp2%10;
                for(i=0;i<5000;i++)       
    {
                        LED_xshi();
    }               
          break;       

          case2:
                LED_buf[0]=18;
                LED_buf[1]=Temp3/10;
                LED_buf[2]=Temp3%10;
                for(i=0;i<5000;i++)       
    {
                        LED_xshi();
    }               
          break;       
               
          default:
                  break;
  }

}

void main()
{
        unsigned int i;
        GPIO_CSH();
        for(i=0;i<5000;i++)       
    {
                        LED_xshi();
    }       
        while (1)
        {
   LED_fuwu();
        }
}

這個為什么不能顯示?
作者: lkc8210    時間: 2023-12-7 09:45
hjx5548 發表于 2023-11-30 12:50
如果位選三位,斷選有七段,索引又該怎么寫?

假設:
P11是位1
P32是位2
P17是位3
  1. sbit P11 = P1^1;
  2. sbit P32 = P3^2;
  3. sbit P17 = P1^7;
  4. void DigiOut(uchar dat)
  5. {
  6.         if(dat & 0x01)
  7.         {
  8.                 P11 = 1;
  9.         }
  10.         else
  11.         {
  12.                 P11 = 0;
  13.         }
  14.         if(dat & 0x02)
  15.         {
  16.                 P32 = 1;
  17.         }
  18.         else
  19.         {
  20.                 P32 = 0;
  21.         }
  22.         if(dat & 0x04)
  23.         {
  24.                 P17 = 1;
  25.         }
  26.         else
  27.         {
  28.                 P17 = 0;
  29.         }
  30. }
  31. void DisplayScan(void)
  32. {   
  33.     DigiOut(~T_COM[7-display_index]);
  34.     P6 = ~t_display[LED8[display_index]];
  35.     if(++display_index >= 3)    display_index = 0;  //8位結束回0
  36. }
復制代碼





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