久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3819|回復: 11
打印 上一主題 下一主題
收起左側

如何把單片機P1端口的值,以二進制的方式顯示在數碼管上?

[復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 10%)
跳轉到指定樓層
樓主
ID:611208 發表于 2020-4-7 14:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機p1端口是簡單的led閃爍,我想把P1口的值(狀態),以二進制的方式 動態掃描的方式顯示在8位數碼管上 。
冥思苦想沒寫出來,太菜了,有個例子也行,我照樣子看看能不能改出來,越是寫不出來,越是想知道。雖然沒有太大意義,我就想知道怎么能顯示出來。
#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)//延時函數
{
      uint x,y;
      for(x=z;x>0;x--)
        for(y=114;y>0;y--);

}
void display(數碼管部分不會寫了)//顯示函數
{
         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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:213173 發表于 2020-4-9 15:10 | 只看該作者
最后一搏 發表于 2020-4-9 09:34
謝謝回復,但是我現在的水平 看不明白

按樓主的現在的理解能力寫的示例


  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)//延時函數
  11. {
  12.       uint x,y;
  13.       for(x=z;x>0;x--)
  14.         for(y=114;y>0;y--);

  15. }
  16. void display()//顯示函數
  17. {
  18.         P0=0x00;//送段碼消隱碼,這很重要,否則數碼管會有殘影
  19.         du=1;                //鎖存
  20.         du=0;
  21.         P0=0xfe;//送位碼
  22.         we=1;                //鎖存
  23.         we=0;
  24.         P0=leddata[P1>>7&0x01];//送段碼,P1的最高位右移7位代入數組
  25.         du=1;                //鎖存
  26.         du=0;
  27.         delay(1);//延時
  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位代入數組
  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. }
復制代碼



回復

使用道具 舉報

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

使用道具 舉報

地板
ID:70069 發表于 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};         //共陽
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;
                }
        }
}
回復

使用道具 舉報

5#
ID:70069 發表于 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};         //共陽
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;
                }
        }
}
回復

使用道具 舉報

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

謝謝回復,但是我現在的水平 看不明白
回復

使用道具 舉報

7#
ID:611208 發表于 2020-4-10 09:12 來自手機 | 只看該作者
wulin 發表于 2020-4-9 15:10
按樓主的現在的理解能力寫的示例

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

使用道具 舉報

8#
ID:611208 發表于 2020-4-10 09:13 來自手機 | 只看該作者
wulin 發表于 2020-4-9 15:10
按樓主的現在的理解能力寫的示例

順便問一句,你圖片顯示數碼管那軟件叫什么,我沒有,謝謝
回復

使用道具 舉報

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

Proteus 7 仿真軟件
回復

使用道具 舉報

10#
ID:723403 發表于 2020-4-10 11:31 | 只看該作者
Proteus 7 大學里用過,挺好用的!
回復

使用道具 舉報

11#
ID:611208 發表于 2020-4-10 21:16 | 只看該作者
wulin 發表于 2020-4-10 10:33
Proteus 7 仿真軟件

非常感謝,又新增長了知識
回復

使用道具 舉報

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

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费av | 毛片视频免费 | 中文字幕视频网 | 亚洲成人精选 | 9191av| a成人| 天天干夜夜拍 | 91精品一区二区三区久久久久久 | 国产一级毛片精品完整视频版 | 高清视频一区二区三区 | 观看毛片| 久久激情视频 | 亚洲视频三 | 手机av免费在线 | 波多野结衣电影一区 | 涩爱av一区二区三区 | 日韩精品二区 | 国产精品2 | 欧美日韩亚洲一区 | 在线国产一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 亚洲欧美中文字幕 | 亚洲国产精品久久久 | 91精品国产一区二区三区 | 五月天婷婷狠狠 | 九九热精品视频 | 久久这里只有精品首页 | 麻豆精品一区二区三区在线观看 | av在线一区二区 | 成人精品 | 黑人巨大精品 | 国产农村妇女精品一二区 | 五月天婷婷久久 | aaa一区 | 亚洲一区二区三区四区五区中文 | 国产精品视频网 | 国产一区二区欧美 | 久久com| 日本免费在线 | 欧美一区免费在线观看 | 亚洲一区二区三区在线视频 |