日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
[課程設計]數(shù)控步進直流穩(wěn)壓電源(c程序)
[課程設計]數(shù)控步進直流穩(wěn)壓電源(c程序)
 更新時間:2008-7-27 13:55:39  點擊數(shù):4
【字體: 字體顏色

#i nclude 
 //此程序實現(xiàn)"數(shù)控步進直流穩(wěn)壓電源"的功能,調試時為了避免資源沖突,應使實驗板上    的拔碼開
 
關S8拔向高電平 
  //本程序設定S9鍵為增加鍵,當按住S9鍵不松開時,輸出Vout以0.1V連續(xù)步進, 
  //直至鍵S9松開,當以一定的時間間隔點動S9鍵時,輸出Vout也為點動步進 
  //遞減鍵S11的功能與S9基本相同時,輸出電壓的值顯示在3個LED上 
unsigned  char  R1,R2,R3,TXDATA,LEDF,BJF,COUNTW,data; 
unsigned  int     i; 
          const    char    table[11]={0xc0,0xf9,0xa4,0xb0,0x99,          0x92,   0x82
 
,0XD8,0x80,0x90,0xFF}; 
  //不帶小數(shù)點的顯示段碼表 
const    char    table0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,
 
0xFF}; 
   //帶小數(shù)點的的顯示段碼表 
unsigned char   s[4];     //定義一個顯示緩沖數(shù)組 
   //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組 
void sfz() 
  {  
        s[0]=R3; 
        s[1]=R2; 
        s[2]=R1; 
         s[3]=0x0A;     //最后一個LED顯示"DARK" 
  } 
  //系統(tǒng)各寄存器初始化子程序 
void initial() 
  { 
        R1=0X00; 
        R2=0X00; 
         R3=0X00; 
         sfz();     //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組 
         TXDATA=0X00; 
         LEDF=0X01; 
         BJF=0X01; 
         TRISB1=0; 
         TRISB2=0; 
         TRISB4=1; 
         TRISB5=1; //設置與鍵盤相關的各口的輸入輸出方式 
         RB1=0; 
         RB2=0; //設置掃描初始條件  
   } 
    //spi方式顯示初始化子程序 
void  SPIINIT() 
  { 
         PIR1=0; 
         SSPCON=0x30; 
          SSPSTAT=0xC0; 
    //設置SPI的控制方式,允許SSP方式,并且時鐘下降沿發(fā)送,與"74HC595,當其 
    //SCLK從低到高跳變時,串行輸入寄存器"的特點相對應 
        TRISC=0xD7;    //SDO引腳為輸出,SCK引腳為輸出 
        TRISA5=0;     //RA5引腳設置為輸出,以輸出顯示鎖存信號 
 } 
   //I2C初始化子程序 
void  i2cint() 
  { 
        SSPCON = 0X08;         //初始化SSPCON寄存器 
        TRISC3 =1;        //設置SCL為輸入口 
         TRISC4 =1;            //設置SDA為輸入口 
        TRISA4 = 0; 
        SSPSTAT=0X80;          //初始化SSPSTAT寄存器 
        SSPADD=0X02;           //設定I2C時鐘頻率 
        SSPCON2=0X00;           //初始化SSPCON2寄存器 
          di();                 //關閉總中斷 
          SSPIF=0;              //清SSP中斷標志 
           RA4=0;              //關掉74HC165的移位時鐘使能,以免74HC165 
                     //移位數(shù)據(jù)輸出與I2C總線的數(shù)據(jù)線發(fā)生沖突 
            SSPEN=1;       //SSP模塊使能 
   } 
                          //軟件延時子程序 
void  DELAY() 
         { 
         for(i = 3553; --i ;) continue; 
          } 
//鍵服務子程序 
void keyserve() 
   { 
        PORTB=0XFD ; 
         if(RB5==0) BJF=0X01;    //S9鍵按下,步進加標志置1 
         PORTB=0XFB ; 
         if(RB5==0) BJF=0X00;    //S11鍵按下,步進加標志清0 
         RB1=0;                 //恢復PORTB的值 
         RB2=0; 

//鍵掃描子程序 
void KEYSCAN() 
  { 
         while(1){  
         while(1) { 
           if (RB5==0) break; 
  } 
       DELAY();             //若有鍵按下,則軟件延時 
         if (RB5==0)break;   //若還有鍵按下,則終止循環(huán)掃描,返回 
     } 

//SPI傳送數(shù)據(jù)子程序 
void  SPILED(data) 

          SSPBUF=data;       // 啟動發(fā)送 
         do { 
       ; 
         }while(SSPIF==0); 
        SSPIF=0; 
  } 
//顯示子程序 
void display() 
 { 
                SPIINIT(); //spi方式顯示初始化 
                RA5=0; //準備鎖存 
                 for(COUNTW=0;COUNTW<4;COUNTW++) { 
                 data=s[COUNTW]; 
                 if(COUNTW==1) data=table0[data];//第二位需要顯示小數(shù)點 
                 else data=table[data]; 
                 SPILED(data); //發(fā)送顯示段碼 
 } 
            for(COUNTW=0;COUNTW<4;COUNTW++){ 
            data=0xFF; 
            SPILED(data); //連續(xù)發(fā)送4個DARK,使顯示看起來好看一些 
 } 
          RA5=1; //最后給一個鎖存信號,代表顯示任務完成 
 } 
//I2C總線輸出數(shù)據(jù)子程序 
void i2cout() 

         i2cint(); //因為SPI輸出和I2C輸出不能同時工作,則需要 
//不斷在兩種方式見切換 
          SEN=1; //產(chǎn)生I2C啟動信號 
          for(i=0x02;--i;) continue; //給予一定的延時,保證啟動 
  do { 
       RSEN=1; //產(chǎn)生I2C啟動信號 
       }while(SSPIF==0); //如果沒能啟動,則反復啟動,直到啟動為止 
         SSPIF=0; //SSPIF標志清0 
         SSPBUF=0X58; //I2C總線發(fā)送地址字節(jié) 
    do { 
      ; 
         }while(SSPIF==0); //等待地址發(fā)送完畢 
          SSPIF=0; //SSPIF標志清0 
          SSPBUF=0X01; //I2C總線發(fā)送命令字節(jié) 
       do { 
            ; 
         }while(SSPIF==0); //等待命令發(fā)送完畢 
           SSPIF=0; //SSPIF標志清0 
            SSPBUF=TXDATA; //I2C總線發(fā)送數(shù)據(jù)字節(jié) 
      do { 
         ; 
            }while(SSPIF==0); //等待數(shù)據(jù)發(fā)送完畢 
            SSPIF=0; //SSPIF標志清0 
             PEN=1; //產(chǎn)生停止條件 
      do { 
           ; 
         }while(SSPIF==0); //等待停止條件產(chǎn)生 
         SSPIF=0; //SSPIF標志清0  
  } 
//步進加子程序 
void BJADD() 

            R1++; 
           TXDATA=TXDATA+2; 
           if(R1>9) { 
             R1=0; 
             R2++; 
            if(R2>9) { 
               R2=0; 
                  R3++; 
 } 

           if((R3==1)&&(R2==2)&&(R1==1)){ 
          R3=0; 
           R2=0; 
              R1=0; //若R3,R2,R1超過120,則又從0計起 
           TXDATA=0; 
 } 
           sfz(); //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組 

//步進減子程序 
void BJSUB() 

                 R1--; 
                   TXDATA=TXDATA-2; 
                  if(R1==0XFF) { 
                 R1=9; 
                    R2--; 
                   if(R2==0XFF) { 
                  R2=9; 
                R3--; 
                   if(R3==0XFF) { 
                  R3=1; 
                   R2=2; 
                R1=0;//若R3,R2,R1小于0,則又從120計起 
                     TXDATA=0XF0; 
              } 
         } 
    } 
   sfz(); //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組 

//主程序 
main() 
  { 
             initial(); //系統(tǒng)各寄存器初始化 
             display(); //調用一次顯示子程序 
             while(1) { 
               i2cout(); //調用I2C子程序,啟動D/A轉換  
               KEYSCAN(); //鍵盤掃描 
               keyserve() ; //若確實有鍵按下,則調用鍵服務程序  
             if(BJF==0X01) BJADD();//若步進加標志為1,則調用步進加子程序 
             else BJSUB(); //若步進加標志為0,則調用步進減子程序 
             display(); //調用一次顯示子程序 
   }

  • 上一篇: [課程設計]單片機控制的電動自行車驅動系統(tǒng)程序
  • 下一篇: 電子鬧鐘(圖+程序)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1