找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 3910|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

如何把單片機(jī)P1端口的值,以二進(jìn)制的方式顯示在數(shù)碼管上?

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 10%)
跳轉(zhuǎn)到指定樓層
樓主
ID:611208 發(fā)表于 2020-4-7 14:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)p1端口是簡(jiǎn)單的led閃爍,我想把P1口的值(狀態(tài)),以二進(jìn)制的方式 動(dòng)態(tài)掃描的方式顯示在8位數(shù)碼管上 。
冥思苦想沒(méi)寫出來(lái),太菜了,有個(gè)例子也行,我照樣子看看能不能改出來(lái),越是寫不出來(lái),越是想知道。雖然沒(méi)有太大意義,我就想知道怎么能顯示出來(lái)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit du=P2^6;//段選

sbit we =P2^7;//位選
uchar code leddata[]={

                0x3F,  //"0"
                0x06,  //"1"
                         };


void delay(uint z)//延時(shí)函數(shù)
{
      uint x,y;
      for(x=z;x>0;x--)
        for(y=114;y>0;y--);

}
void display(數(shù)碼管部分不會(huì)寫了)//顯示函數(shù)
{
         we=1;
         P1=0xfe;
         we=0;
        P1=0xff;


          du=1;          P0=leddata[];
          du=0;
        delay(5);


}

void main()
{
     P1=0xe7;11100111
     delay(500);
     P1=1;
    delay(500);

   p1=0xaa;
    delay(500);
   p1=1;
    delay(500);

}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 2#
ID:213173 發(fā)表于 2020-4-9 15:10 | 只看該作者
最后一搏 發(fā)表于 2020-4-9 09:34
謝謝回復(fù),但是我現(xiàn)在的水平 看不明白

按樓主的現(xiàn)在的理解能力寫的示例


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit du=P2^6;//段選
  5. sbit we =P2^7;//位選
  6. uchar code leddata[]={
  7.                 0x3f,  //"0"
  8.                 0x06,  //"1"
  9.                 };


  10. void delay(uint z)//延時(shí)函數(shù)
  11. {
  12.       uint x,y;
  13.       for(x=z;x>0;x--)
  14.         for(y=114;y>0;y--);

  15. }
  16. void display()//顯示函數(shù)
  17. {
  18.         P0=0x00;//送段碼消隱碼,這很重要,否則數(shù)碼管會(huì)有殘影
  19.         du=1;                //鎖存
  20.         du=0;
  21.         P0=0xfe;//送位碼
  22.         we=1;                //鎖存
  23.         we=0;
  24.         P0=leddata[P1>>7&0x01];//送段碼,P1的最高位右移7位代入數(shù)組
  25.         du=1;                //鎖存
  26.         du=0;
  27.         delay(1);//延時(shí)
  28.         //以下各位顯示以此類推
  29.         P0=0x00;
  30.         du=1;
  31.         du=0;
  32.         P0=0xfd;
  33.         we=1;
  34.         we=0;
  35.         P0=leddata[P1>>6&0x01];//送段碼,P1的次高位右移7位代入數(shù)組
  36.         du=1;
  37.         du=0;
  38.         delay(1);

  39.         P0=0x00;
  40.         du=1;
  41.         du=0;
  42.         P0=0xfb;
  43.         we=1;
  44.         we=0;
  45.         P0=leddata[P1>>5&0x01];
  46.         du=1;
  47.         du=0;
  48.         delay(1);

  49.         P0=0x00;
  50.         du=1;
  51.         du=0;
  52.         P0=0xf7;
  53.         we=1;
  54.         we=0;
  55.         P0=leddata[P1>>4&0x01];
  56.         du=1;
  57.         du=0;
  58.         delay(1);

  59.         P0=0x00;
  60.         du=1;
  61.         du=0;
  62.         P0=0xef;
  63.         we=1;
  64.         we=0;
  65.         P0=leddata[P1>>3&0x01];
  66.         du=1;
  67.         du=0;
  68.         delay(1);

  69.         P0=0x00;
  70.         du=1;
  71.         du=0;
  72.         P0=0xdf;
  73.         we=1;
  74.         we=0;
  75.         P0=leddata[P1>>2&0x01];
  76.         du=1;
  77.         du=0;
  78.         delay(1);

  79.         P0=0x00;
  80.         du=1;
  81.         du=0;
  82.         P0=0xbf;
  83.         we=1;
  84.         we=0;
  85.         P0=leddata[P1>>1&0x01];
  86.         du=1;
  87.         du=0;
  88.         delay(1);

  89.         P0=0x00;
  90.         du=1;
  91.         du=0;
  92.         P0=0x7f;
  93.         we=1;
  94.         we=0;
  95.         P0=leddata[P1&0x01];
  96.         du=1;
  97.         du=0;
  98.         delay(1);
  99. }

  100. void main()
  101. {
  102.         P1=0xe7;//11100111
  103.         while(1)
  104.         {
  105.                 display();
  106.         }
  107. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

板凳
ID:388929 發(fā)表于 2020-4-7 15:33 | 只看該作者
可以用最笨的方法,用移位一位一位的把8個(gè)位與出來(lái),再一位一位的放到8個(gè)數(shù)碼管上,例如P1與A0,就可以將最高位與出來(lái),顯示在數(shù)碼管上,顯示只選8位數(shù)碼管的最高位,其他滅掉,延時(shí),P1左移1位,重復(fù)上一個(gè)動(dòng)作,應(yīng)該就成了
回復(fù)

使用道具 舉報(bào)

地板
ID:70069 發(fā)表于 2020-4-7 18:18 | 只看該作者
#include<reg52.h>
#include<intrins.h>
unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //共陰
unsigned char code discode3[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};         //共陽(yáng)
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define uchar unsigned char
uchar key=0;
uchar i=0,a;
void delay5ms(uchar k)
{
        uchar i,j;
        for(i=k;i>0;i--)
                for(j=248;j>0;j--);
}
main()
{
     while(1)
   {   key=0x87;
  for(i=0;i<8;i++)
       {
        a=key&0X01;
       key=_crol_(key,1) ;
                   P0=discode3[a];
                P2=wei[i-1];
                delay5ms(600000000);
        //        P2=0x00;       
                P0=0xff;
                }
        }
}
回復(fù)

使用道具 舉報(bào)

5#
ID:70069 發(fā)表于 2020-4-7 18:34 | 只看該作者
#include<reg52.h>
#include<intrins.h>
unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //共陰
unsigned char code discode3[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};         //共陽(yáng)
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code wei2[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
#define uchar unsigned char
uchar key=0;
uchar i=0,a;
void delay5ms(uchar k)
{
        uchar i,j;
        for(i=k;i>0;i--)
                for(j=248;j>0;j--);
}
main()
{
     while(1)
   {   key=0x88;
  for(i=0;i<8;i++)
       {
        a=key&0x01;
      key=_cror_(key,1) ;
         //  key>>=1;
                   P0=discode3[a];
                P2=wei2[i];
                delay5ms(600000000);
        //        P2=0x00;       
                P0=0xff;
                }
        }
}
回復(fù)

使用道具 舉報(bào)

6#
ID:611208 發(fā)表于 2020-4-9 09:34 | 只看該作者
benclee 發(fā)表于 2020-4-7 18:34
#include
#include
unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 ...

謝謝回復(fù),但是我現(xiàn)在的水平 看不明白
回復(fù)

使用道具 舉報(bào)

7#
ID:611208 發(fā)表于 2020-4-10 09:12 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2020-4-9 15:10
按樓主的現(xiàn)在的理解能力寫的示例

非常感謝這位朋友專門寫了這個(gè)程序,這個(gè)我基本能看懂思路了,我就是想不到怎么能把p1值提取出來(lái),看了這個(gè)程序受益匪淺,非常的感謝,謝謝回復(fù)帖子的朋友們,51hei有你們會(huì)更精彩
回復(fù)

使用道具 舉報(bào)

8#
ID:611208 發(fā)表于 2020-4-10 09:13 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2020-4-9 15:10
按樓主的現(xiàn)在的理解能力寫的示例

順便問(wèn)一句,你圖片顯示數(shù)碼管那軟件叫什么,我沒(méi)有,謝謝
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2020-4-10 10:33 | 只看該作者
最后一搏 發(fā)表于 2020-4-10 09:13
順便問(wèn)一句,你圖片顯示數(shù)碼管那軟件叫什么,我沒(méi)有,謝謝

Proteus 7 仿真軟件
回復(fù)

使用道具 舉報(bào)

10#
ID:723403 發(fā)表于 2020-4-10 11:31 | 只看該作者
Proteus 7 大學(xué)里用過(guò),挺好用的!
回復(fù)

使用道具 舉報(bào)

11#
ID:611208 發(fā)表于 2020-4-10 21:16 | 只看該作者

非常感謝,又新增長(zhǎng)了知識(shí)
回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2020-4-14 11:19 | 只看該作者
按你目前的理解能力應(yīng)該能看懂,中斷周期選擇2.5ms的目的是為了使動(dòng)態(tài)數(shù)碼管顯示既不會(huì)閃爍也保證足夠的亮度。 6位百分秒表 仿真.zip (105.39 KB, 下載次數(shù): 4)

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表