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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機計算器設計

作者:89s51   來源:不詳   點擊數:  更新時間:2007年05月16日   【字體:

1.實驗任務

(1.       開機時,顯示“0”

(2.       第一次按下時,顯示“D1”;第二次按下時,顯示“D1D2”;第三按下時,顯示“D1D2D3”,8個全顯示完畢,再按下按鍵下時,給出“嘀”提示音。

2.電路原理圖

圖4.23.1

3.  系統板上硬件連線

(1.       把“單片機系統”區域中的P1.0端口用導線連接到“音頻放大模塊”區域中的SPK IN端口上;

(2.       把“單片機系統“區域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區域中的C1-C4 R1-R4端口上;

(3.       把“單片機系統”區域中的P0.0-P0.7端口用8芯排線連接到“動態數碼顯示”區域中的A-H端口上;

(4.       把“單片機系統:區域中的P2.0-P2.7端口用8芯排線連接到“動態數碼顯示”區域中的S1-S8端口上;

4.相關程序設計內容

(1.       行列式鍵盤輸入及按鍵功能設定;

(2.       動態數碼顯示;

(3.       數碼顯示方式處理;

5.匯編源程序

(略)

6. C語言源程序

#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[8]={0,16,16,16,16,16,16,16};

unsigned char dispbitcount;

unsigned char temp;

unsigned char i,j;

unsigned char key;

unsigned char keypos;

bit alarmflag;

void change(unsigned char *p,unsigned char count)

{

  while(count>0)

    {

      *(p+count)=*(p+count-1);

      count--;

    }

}

void main(void)

{

  TMOD=0x01;

  TH0=(65536-4000) / 256;

  TL0=(65536-4000) % 256;

  TR0=1;

  ET0=1;

  EA=1;

  while(1)

    {

      P3=0xff;

      P3_4=0;

      temp=P3;

      temp=temp & 0x0f;

      if (temp!=0x0f)

        {

          for(i=50;i>0;i--)

          for(j=200;j>0;j--);

          temp=P3;

          temp=temp & 0x0f;

          if (temp!=0x0f)

            {

              temp=P3;

              temp=temp & 0x0f;             

              switch(temp)

                {

                  case 0x0e:

                    key=7;

                    break;

                  case 0x0d:

                    key=8;

                    break;

                  case 0x0b:

                    key=9;

                    break;

                  case 0x07:

                    key=10;

                    break;

                }

              if ((key>=0) && (key<10))

              {

                keypos++;

                if(keypos<8)

                  {

                    change(dispbuf,keypos);

                    dispbuf[0]=key;

                  }

                  else

                    {

                      keypos=8;

                      alarmflag=1;

                    }

              }

              temp=P3;

              P1_0=~P1_0;

              temp=temp & 0x0f;             

              while(temp!=0x0f)

                {

                  temp=P3;

                  temp=temp & 0x0f;             

                }

              alarmflag=0;

            }

        }

      P3=0xff;

      P3_5=0;

      temp=P3;

      temp=temp & 0x0f;

      if (temp!=0x0f)

        {

          for(i=50;i>0;i--)

          for(j=200;j>0;j--);

          temp=P3;

          temp=temp & 0x0f;

          if (temp!=0x0f)

            {

              temp=P3;

              temp=temp & 0x0f;             

              switch(temp)

                {

                  case 0x0e:

                    key=4;

                    break;

                  case 0x0d:

                    key=5;

                    break;

                  case 0x0b:

                    key=6;

                    break;

                  case 0x07:

                    key=11;

                    break;

                }

              if ((key>=0) && (key<10))

              {

                keypos++;

                if(keypos<8)

                  {

                    change(dispbuf,keypos);

                    dispbuf[0]=key;

                  }

                  else

                    {

                      keypos=8;

                      alarmflag=1;

                    }

              }

              temp=P3;

              P1_0=~P1_0;

              temp=temp & 0x0f;             

              while(temp!=0x0f)

                {

                  temp=P3;

                  temp=temp & 0x0f;             

                }

              alarmflag=0;

            }

        }

      P3=0xff;

      P3_6=0;

      temp=P3;

      temp=temp & 0x0f;

      if (temp!=0x0f)

        {

          for(i=50;i>0;i--)

          for(j=200;j>0;j--);

          temp=P3;

          temp=temp & 0x0f;

          if (temp!=0x0f)

            {

              temp=P3;

              temp=temp & 0x0f;             

              switch(temp)

                {

                  case 0x0e:

                    key=1;

                    break;

                  case 0x0d:

                    key=2;

                    break;

                  case 0x0b:

                    key=3;

                    break;

                  case 0x07:

                    key=12;

                    break;

                }

              if ((key>=0) && (key<10))

              {

                keypos++;

                if(keypos<8)

                  {

                    change(dispbuf,keypos);

                    dispbuf[0]=key;

                  }

                  else

                    {

                      keypos=8;

                      alarmflag=1;

                    }

              }

              temp=P3;

              P1_0=~P1_0;

              temp=temp & 0x0f;             

              while(temp!=0x0f)

                {

                  temp=P3;

                  temp=temp & 0x0f;              

                }

              alarmflag=0;

            }

        }

      P3=0xff;

      P3_7=0;

      temp=P3;

      temp=temp & 0x0f;

      if (temp!=0x0f)

        {

          for(i=50;i>0;i--)

          for(j=200;j>0;j--);

          temp=P3;

          temp=temp & 0x0f;

          if (temp!=0x0f)

            {

              temp=P3;

              temp=temp & 0x0f;             

              switch(temp)

                {

                  case 0x0e:

                    key=0;

                    break;

                  case 0x0d:

                    key=13;

                    break;

                  case 0x0b:

                    key=14;

                    break;

                  case 0x07:

                    key=15;

                    break;

                }

              if ((key>=0) && (key<10))

              {

                keypos++;

                if(keypos<8)

                  {

                    change(dispbuf,keypos);

                    dispbuf[0]=key;

                  }

                  else

                    {

                      keypos=8;

                      alarmflag=1;

                    }

              }

              temp=P3;

              P1_0=~P1_0;

              temp=temp & 0x0f;             

              while(temp!=0x0f)

                {

                  temp=P3;

                  temp=temp & 0x0f;             

                }

              alarmflag=0;

            }

        }

    }

}

void t0(void) interrupt 1 using 0

{

  TH0=(65536-4000) / 256;

  TL0=(65536-4000) % 256;

  P0=dispcode[dispbuf[dispbitcount]];

  P2=dispbitcode[dispbitcount];

  dispbitcount++;

  if (dispbitcount==8)

    {

      dispbitcount=0;

    }

  if (alarmflag==1)

    {

      P1_1=~P1_1;

    }

}

關閉窗口

相關文章

主站蜘蛛池模板: 免费在线a视频 | 成人黄色电影免费 | 精品一区国产 | 一区二区免费 | 国产精品视频一区二区三区不卡 | 亚洲3级| 亚洲人在线 | 国产一区二区免费在线 | 99精品视频免费观看 | 一级片在线观看视频 | 欧美福利一区 | 色网站视频 | 欧美精品在线免费观看 | 精品三区 | 精品乱码一区二区 | 久久久123| 欧美精品在线播放 | 午夜免费观看 | 在线观看免费福利 | 91精品国产综合久久久久久首页 | 夜夜爽99久久国产综合精品女不卡 | 精品成人av| 亚洲国产一区二区三区在线观看 | 免费观看毛片 | 精品一区二区三区免费视频 | yeyeav| 亚洲综合无码一区二区 | 91av在线免费观看 | 91久久久久久久 | 毛片久久久 | 成人小视频在线观看 | 成人不卡视频 | 国产欧美日韩在线播放 | 国产精品成人一区二区三区 | 国产精品区二区三区日本 | 九九久久99 | 黄色免费网址大全 | 一区二区三区在线免费 | 成人欧美日韩一区二区三区 | 成人特级毛片 | 99精品免费 |