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

標題: 單片機中斷,定時器,串行口通信實驗指導(附經過測試的參考電路圖與源代碼) [打印本頁]

作者: mmmmmm456    時間: 2017-12-27 17:28
標題: 單片機中斷,定時器,串行口通信實驗指導(附經過測試的參考電路圖與源代碼)
初接觸單片機,老師給的單片機實驗,可以練練手。

調整一下實驗內容,具體情況如下:
第一次流水燈實驗不變,采用第一次試驗課內容。
其余三次實驗現分別確定為中斷實驗、定時器實驗和串行通信實驗,這三次實驗推薦分別采用如下三個(列出的電路圖和源代碼老師都自己全程測試過,沒有問題);如果想在“中斷實驗、定時器實驗和串行通信實驗”框架下選擇其他具體實驗內容也可以,注意把題目要求等都寫清楚。

二、中斷實驗
中斷掃描法行列式鍵盤
1)實驗要求
利用中斷掃描法實現4*4行列式鍵盤,并利用1位共陰極數碼管進行顯示。要求開機后數碼管暫時為黑屏狀態,按下任意鍵后,顯示該鍵的鍵值字符(0—F)。若沒有新鍵按下,則維持前次按鍵結果。
2)參考電路圖


3)參考源程序
#include <reg51.h>
char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};  //led字模
char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};  //鍵值

void getKey() interrupt 0         //中斷函數
{
  char key_scan[]={0xef,0xdf,0xbf,0x7f};    //鍵掃描碼
  char i=0,j=0;
  for(i=0;i<4;i++)
     {
       P2=key_scan[ i];            //輸出掃描碼
       for(j=0;j<16;j++)
       {
            if(key_buf[j] == P2)       //讀鍵值,判斷鍵號
           {
              P0=led_mod[j];       //顯示閉合鍵鍵號
              break;
           }
       }
     }
     P2=0x0f;
}

void main(void)
{
    P0=0x00;       //開機黑屏
    IT0=1;          //脈沖觸發
    EX0=1;          //INT0允許
    EA=1;           //總中斷允許
    P2=0x0f;      //為首次中斷做準備,列線全為0,行線全為1
    while(1);       //模擬其它程序功能
}

三、定時器實驗
對流水燈進行定時中斷控制
1)實驗要求
采用定時中斷方法實現流水燈的控制功能。要求流水燈的閃爍速率約為每秒一次。
2)參考電路圖

3)參考源程序
#include <reg51.h>
#define uchar unsigned char
bit ldelay=0;
uchar t=0;
void main()
{
    uchar code ledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    uchar ledi;
    TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;
    TR0=1;
    ET0=1;
    EA=1;
    while(1){
        if(ldelay) {
            ldelay=0;
            P2=ledp[ledi];
            ledi++;
            if(ledi==8) ledi=0;
        }
    }
}

timer0() interrupt 1{
    t++;
    if(t==20) {t=0;ldelay=1;}
    TH0=0x3c;TL0=0xb0;
}

四、串行口通信實驗
2只單片機的串口方式1通信
1)實驗要求
兩只51單片機進行串口方式1通信,其中兩機fosc約為12MHz,波特率約為2.4kbps。甲機循環發送數字0-F,并根據乙機的返回值決定發送新數(返回值與發送值相同時)或重復當前數(返回值與發送值不同時);乙機接收數據后直接返回接收值;雙機都將當前值以十進制形式顯示在各機的共陰極數碼管上。
2)參考電路圖

3)參考源程序
發送程序:
#include <reg51.h>
#define uchar unsigned char
char code map[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void delay(unsigned int time)
{
     unsigned int j=0;
    for(;time>0;time--)
        for(j=0;j<125;j++);
}

void main(void)
{
     uchar counter=0;
    TMOD=0x20;
    TH1=TL1=0xf4;
    PCON=0;
    SCON=0x50;
    TR1=1;
    while(1)
    {
        SBUF=counter;
        while(TI==0);
        TI=0;
        while(RI==0);
        RI=0;
        if(SBUF==counter)
        {
            P2=map[counter];
            if(++counter>9) counter=0;
            delay(500);
        }
    }
}

接收程序:
#include <reg51.h>
#define uchar unsigned char
char code map[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void delay(unsigned int time)
{
     unsigned int j=0;
    for(;time>0;time--)
        for(j=0;j<125;j++);
}

void main(void)
{
     uchar counter=0;
    TMOD=0x20;
    TH1=TL1=0xf4;
    PCON=0;
    SCON=0x50;
    TR1=1;
    while(1)
    {
        SBUF=counter;
        while(TI==0);
        TI=0;
        while(RI==0);
        RI=0;
        if(SBUF==counter)
        {
            P2=map[counter];
            if(++counter>9) counter=0;
            delay(1000);
        }
    }
}

完整的Word格式文檔51黑下載地址:
單片機后三次實驗調整情況說明(附經過測試的參考電路圖與源代碼).doc (112 KB, 下載次數: 13)



作者: qlasam    時間: 2018-1-8 16:44
很好的,謝謝




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