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

專注電子技術(shù)學(xué)習(xí)與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機驅(qū)動ADC0808電路圖C51及匯編程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月13日   【字體:

        這兩天剛剛完成了一個用C編寫的程序,這是我第一個用C語言編寫的程序,并且調(diào)試成功。

        第一個C程序,值得紀念,也值得以后參考。

        本程序的功能是:

          1.ADC0808轉(zhuǎn)換功能;

   2.數(shù)據(jù)16進制顯示;

          3.串行通信數(shù)據(jù)。

 


C51程序:工程文件下載: http://www.zg4o1577.cn/f/0808_c.rar

#include<absacc.h>
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
sbit START=P3^6;  //啟動轉(zhuǎn)換
sbit OE=P3^5;     //輸出允許
sbit EOC=P3^7;    //轉(zhuǎn)換結(jié)束
sbit WC=P3^4;     //通道選擇
sbit WB=P3^3;     //通道選擇
sbit WA=P3^2;     //通道選擇
uchar data  led[12];
signed data  data1;
signed data  data2;
signed data  data3;
signed data  data4;
signed data  data5;
signed data  data6;
signed data  data7;
uchar code  tv[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb};
uchar code  dc[]={0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  };//"F"};/十六進制顯示方式
void delay(void)                      //延時程序
{
  uint i;
  for(i=0;i<10;i++);
}
void ledxianshi(void)       //顯示模塊
{
  uchar k,i;
  led[0]=data1%16;        //編碼1個位
  led[1]=data1/16%16;     //編碼1十位

  led[2]=data2%16;        //數(shù)據(jù)1個位
  led[3]=data2/16%16;     //數(shù)據(jù)1十位

  led[4]=data3%16;        //編碼2個位
  led[5]=data3/16%16;     //編碼2十位

  led[6]=data4%16;        //數(shù)據(jù)2個位
  led[7]=data4/16%16;     //數(shù)據(jù)2十位

  led[8]=data5%16;        //編碼3個位
  led[9]=data5/16%16;     //編碼3十位

  led[10]=data6%16;        //數(shù)據(jù)3個位
  led[11]=data6/16%16;     //數(shù)據(jù)3十位

  for(k=0;k<12;k++)
  {
   P2=tv[k];  //位選用
   i=led[k];
   P1=dc[i];  //段碼數(shù)顯示
   delay();
  }
}

void csh(void)
 {
 SM0=0;
 SM1=1;
 REN=1;
 TI=0;
 RI=0;
 PCON=0;
 TH1=0xF3;
 TL1=0XF3;
 TMOD=0X20;
 EA=1;
 ET1=0;
 ES=1;
 TR1=1;

 TI=0;
 SBUF=data1;
 while(!TI);
 TI=0;
 SBUF=data2;
 while(!TI);
 TI=0;
 SBUF=data3;
 while(!TI);
 TI=0;
 SBUF=data4;
 while(!TI);
 TI=0;
 SBUF=data5;
 while(!TI);
 TI=0;
 SBUF=data6;
 while(!TI);
 TI=0;
 }
void ad1(void)
{
 WA=0;            //通道1
    WB=0;
    WC=0;
    START=1;
    START=0;          //啟動轉(zhuǎn)換
    while(EOC==0);    //轉(zhuǎn)換結(jié)束信號,為0則說明轉(zhuǎn)換結(jié)束
    OE=1;             //輸出允許信號,為真,可以輸出
    data7=P0;       //P0口的測量值送到TVDATE
    OE=0;             //關(guān)輸出允許
}
void ad2(void)
{
 WA=1;            //通道1
    WB=0;
    WC=0;
    START=1;
    START=0;          //啟動轉(zhuǎn)換
    while(EOC==0);    //轉(zhuǎn)換結(jié)束信號,為0則說明轉(zhuǎn)換結(jié)束
    OE=1;             //輸出允許信號,為真,可以輸出
    data4=P0;       //P0口的測量值送到TVDATE
    OE=0;             //關(guān)輸出允許
}
void ad3(void)
{
 WA=0;            //通道1
    WB=1;
    WC=0;
    START=1;
    START=0;          //啟動轉(zhuǎn)換
    while(EOC==0);    //轉(zhuǎn)換結(jié)束信號,為0則說明轉(zhuǎn)換結(jié)束
    OE=1;             //輸出允許信號,為真,可以輸出
    data6=P0;       //P0口的測量值送到TVDATE
    OE=0;             //關(guān)輸出允許
}
void main(void)
{
    data1=0X01;
    data3=0X02;
    data5=0X03;
 ad1();
 ad2();
 ad3();
 loop:
 ledxianshi();
 ad1();
 if ((data7-data2)>0)
 {
 data2=data7;
 ad2();
 ad3();
 csh();
 goto loop ;
 }
 else
 goto loop ;

 }

----------------------------------------------------------------------------------
A51匯編程序:

   ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    DATA1    DATA    60H
    DATA2    DATA    61H
    DATA3    DATA    62H
    DATA4    DATA    63H
    DATA5    DATA    64H
    DATA6    DATA    65H
    DATA7    DATA    66H
    DATA8    DATA    67H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    LDATA    DATA    54H
;;;;;;;;;;;;;;;;;;;;;;;
    EOC BIT P3.7            ;接口定義
    ST  BIT P3.6
    OE  BIT P3.5
    WC  BIT P3.4
    WB  BIT P3.3
    WA  BIT P3.2
    K1  BIT P2.4
    K2  BIT P2.5
    K3  BIT P2.6
    K4  BIT P2.7
    ORG 0000H
    AJMP SEND
    ORG 0030H
SEND:     MOV   TMOD,#20H            ;串口初始化
          MOV   TH1,#0F3H            ;傳輸波特率2400
          MOV   TL1,#0F3H
          MOV   SCON,#50H
          MOV   PCON,#00H
          SETB  TR1
          MOV DATA1,#01H             ;識別碼定義,每個識別碼對應(yīng)一個數(shù)據(jù)
          MOV DATA3,#02H
          MOV DATA5,#03H
LP1: CLR WB   ;AD口選擇:000位通道0數(shù)據(jù)
     CLR WA
     CLR WC
     CLR  ST
     SETB ST
     CLR  ST
     JNB EOC,$
     SETB OE
     MOV DATA2,P0    ;將臨時存儲器上的數(shù)據(jù)送給數(shù)據(jù)1
LP2: CLR WC          ;AD口選擇:001位通道1數(shù)據(jù)
     CLR WB
     SETB WA
     CLR  ST
     SETB ST
     CLR  ST
     JNB EOC,$
     SETB OE
     MOV DATA4,P0    ;將檢測的數(shù)據(jù)送給數(shù)據(jù)2
     CLR OE
LP3: CLR WC          ;AD口選擇:010位通道2數(shù)據(jù)
     SETB WB
     CLR WA
     CLR  ST
     SETB ST
     CLR  ST
     JNB EOC,$
     SETB OE
     MOV DATA6,P0    ;將檢測的數(shù)據(jù)送給數(shù)據(jù)3
     CLR OE
     LCALL TT0       ;調(diào)用串口數(shù)據(jù)傳輸程序
LP:  LCALL LEDSHOW   ;調(diào)用顯示程序
     CLR WC
     CLR WB
     CLR WA
     CLR  ST
     SETB ST
     CLR  ST
     JNB EOC,$
     SETB OE
     MOV LDATA,P0    ;將通道0的檢測數(shù)據(jù)送送給臨時存儲器
     CLR OE
     MOV A,LDATA
     CJNE A,DATA2,DADA    ;數(shù)據(jù)1不等于臨時數(shù)據(jù),跳轉(zhuǎn)到數(shù)據(jù)比較,
     AJMP LP              ;如果相等,執(zhí)行這條指令;
DADA:JC XIXI              ;臨時數(shù)據(jù)小于數(shù)據(jù)1,跳轉(zhuǎn)到小值指令;
     AJMP LP1             ;臨時數(shù)據(jù)大于數(shù)據(jù)1,跳到重新判斷三個數(shù)據(jù)值
XIXI:AJMP LP              ;數(shù)據(jù)1小于臨時數(shù)據(jù),執(zhí)行這條指令,繼續(xù)判斷;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TT0:      MOV SBUF,DATA1 ;編碼1送入串口SBUF
SENT0:    JBC TI,SENWT1  ;判斷發(fā)送是否完成,完成則跳到SENWT1,沒有完成,執(zhí)行下一條指令
          LCALL LEDSHOW  ;調(diào)用數(shù)據(jù)顯示程序
          SJMP SENT0     ;返回繼續(xù)檢測發(fā)送完成指令
SENWT1:   CLR TI         ;關(guān)閉發(fā)送
          MOV SBUF ,DATA2;將數(shù)據(jù)1送入串口SBUF
SENWT2:   JBC TI,SENWT3  ;判斷發(fā)送是否完成,完成則跳到SENWT3,沒有完成,執(zhí)行下一條指令
          LCALL LEDSHOW  ;
          AJMP SENWT2    ;返回繼續(xù)檢測發(fā)送完成指令
SENWT3:   CLR TI         ;關(guān)閉發(fā)送
                         ;以下程序相同功能,發(fā)送另外兩組數(shù)據(jù)
TT0_2:    MOV SBUF,DATA3 ;
SENT0_2:  JBC TI,SENWT1_2;
          LCALL LEDSHOW  ;
          SJMP SENT0_2   ;
SENWT1_2: CLR TI         ;
          MOV SBUF ,DATA4;
SENWT2_2: JBC TI,SENWT3_2;
          LCALL LEDSHOW  ;
          AJMP SENWT2_2  ;
SENWT3_2: CLR TI         ;
                         ;
TT0_3:    MOV SBUF,DATA5 ;
SENT0_3:  JBC TI,SENWT1_3;
          LCALL LEDSHOW  ;
          SJMP SENT0_3   ;
SENWT1_3: CLR TI         ;
          MOV SBUF ,DATA6;
SENWT2_3: JBC TI,SENWT3_3;
          LCALL LEDSHOW  ;
          AJMP SENWT2_3  ;
SENWT3_3: CLR TI         ;
          RET            ;數(shù)據(jù)發(fā)送完成,退出子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;數(shù)據(jù)顯示
LEDSHOW:  MOV R1,#60H
          MOV P2,#0F0H
LEDSHOW_1:
          MOV A,@R1
          MOV B,#16
          DIV AB
          LCALL LED
          INC P2
          MOV A,B
          LCALL LED
          INC P2

          INC R1
          MOV A,R1
          CJNE A,#66H,LEDSHOW_1
          RET
;;;;;;;;;;;;;;數(shù)碼管顯示
LED:  MOV DPTR,#TABLE
      MOVC A,@A+DPTR
      MOV P1,A
      LCALL DELAY1
      RET
TABLE:   
   DB  0C0H        ;"0"
   DB  0F9H        ;"1"
   DB  0A4H        ;"2"
   DB  0B0H        ;"3"
   DB   99H        ;"4"
   DB   92H        ;"5"
   DB   82H        ;"6"
   DB  0F8H        ;"7"
   DB   80H        ;"8"
   DB   90H        ;"9"
   DB  0C8H        ;"A"
   DB  083H        ;"B"
   DB  0C6H        ;"C"
   DB  0A1H        ;"D"
   DB  086H        ;"E"
   DB  08EH        ;"F"
   DB  0BFH        ;"-"
DELAY1:
       MOV R7,#10
L1:    MOV R6,#50
       DJNZ R6,$
       DJNZ R7,L1
       RET
DELAY:
       MOV R5,#250
D1:    MOV R6,#200
D2:    DJNZ R6,D2
       DJNZ R5,D1
       RET
       END

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 91高清免费 | 四虎影音| 久久中文字幕一区 | 99久久国产综合精品麻豆 | 亚洲成人一区二区 | 免费久久久| 一级黄色片美国 | 国产成人一区二区 | av在线电影网站 | 久久久福利 | 一区二区三区欧美 | 九九精品网 | 天天操,夜夜爽 | 在线不卡 | 午夜一区二区三区在线观看 | 在线观看av网站永久 | 一区二区在线不卡 | 成人在线激情 | 欧美一级在线视频 | 久久久成人网 | 欧美日韩中文字幕 | 国产精品日韩一区二区 | 亚洲www | 99re在线视频免费观看 | 午夜爱爱毛片xxxx视频免费看 | 日韩中文字幕在线视频 | 91亚洲国产 | 激情综合五月 | 国产97在线视频 | 国产精品视屏 | 亚洲精品一区二区三区在线 | 精品欧美一区二区久久久伦 | 特黄级国产片 | 美女二区 | 国产一区二区视频免费在线观看 | 国产精品一区二区三区四区 | 亚洲国产精品人人爽夜夜爽 | 天天干 夜夜操 | 日韩欧美在线一区 | 手机看片169 | 一区二区三区四区电影视频在线观看 |