在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Atmega16單片機實用程序

            Atmega16單片機實用程序

            作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            /************************************************************
            名稱:六位密碼輸入比對程序
            功能:輸入六位數(shù)並與存儲密碼比對,0K返回1,按錯或者順序錯返回0;
            原始密碼654321
            **************************************************************/
            uchar securtcom() //6位密碼輸入比對程序0K;
            {
            uchar keycount=0;
            while(key_press()==1);
            delayms(3);
            do{
            while(key_press()==1);
            delayms(1);
            while(key_press()==0);
            show(8,keycount);
            securbuf[keycount++]=keyscan();
            }while(keycount<6);
            if(securbuf[0]==6) //初始比對,密碼654321;
            {
            if(securbuf[1]==5)
            {
            if(securbuf[2]==4)
            {
            if(securbuf[3]==3)
            {
            if(securbuf[4]==2)
            {
            if(securbuf[5]==1);
            }
            }
            }
            }
            return 1; //密碼正確,返回1;
            }
            else
            return 0; //密碼錯誤,返回0;
            }
            uchar serset() //密碼設(shè)定子程序;
            {
            }
            uchar speci_keypress(uchar presstimes) //特殊按鍵F按下某一設(shè)定次數(shù)OK;
            {
            }
            uchar key_longpress(uchar prst) //按鍵長按子程序
            {
            }
            /**************************************************
            名稱: 直流蜂鳴器控制
            功能: 控制蜂鳴器鳴響時間
            硬件連接:PD5輸出控制信號
            **************************************************/
            void dcbeep(uchar beeptime) //直流蜂鳴器,調(diào)試OK;
            {uchar beep;
            DDRD|=BIT(5);
            PORTD&=~BIT(5);
            PORTD|=BIT(5);
            delayus(beeptime);
            PORTD&=~BIT(5);
            delayus(100-beeptime);
            }
            /**********************************************************
            名稱:直流電機全橋控制
            功能:fbw=1.正轉(zhuǎn);fbw=0,反轉(zhuǎn);
            硬件連接:PD6與PD7口組合輸出控制信號;
            **********************************************************/
            void moto(uchar fbw) //直流電機正反轉(zhuǎn)程序,驅(qū)動全橋;
            {
            DDRD|=BIT(6);
            DDRD|=BIT(7);
            PORTD&=~BIT(6);
            PORTD&=~BIT(7);
            delayms(5);
            if(fbw==1)
            {
            PORTD|=BIT(6);
            delayms(500);
            PORTD&=~BIT(6);
            delayms(20);
            }
            else
            {
            }
            if(fbw==0)
            {
            PORTD|=BIT(7);
            delayms(500);
            PORTD&=~BIT(7);
            delayms(20);
            }
            }
            /*********************************************************
            名稱: AD單次轉(zhuǎn)換子程序;
            功能: 採樣AD通路0的電壓,該函數(shù)輸出為AD 轉(zhuǎn)換後的數(shù)據(jù),
            查詢工作方式
            *********************************************************/
            void ad_init()
            {
            ADMUX=0XC0; //設(shè)置AD輸入通道為0通道,內(nèi)部2.56V參考電壓;
            ADCSRA=0X80; //使能ADC,清中斷標(biāo)誌ADIF,查詢方式;
            DDRA&=~BIT(0); //設(shè)置PA0口為輸入;
            PORTA&=~BIT(0); //PA0口清零;
            }
            int ad_conv() //單次轉(zhuǎn)換子程序,OK;
            {
            int addata;
            ADCSRA|=BIT(ADSC); //啟動一次轉(zhuǎn)換;
            while(!(ADCSRA&(BIT(ADIF)))); //查詢等待轉(zhuǎn)換結(jié)束標(biāo)誌置位;
            ADCSRA&=~BIT(ADIF);
            addata=ADCL;
            addata=addata+ADCH*256;
            return addata;
            }
            int ad_aver() //轉(zhuǎn)換8次,做平均值濾波
            {
            int adaver,count;
            for(count=7;count>0;count--)
            {
            adaver=ad_conv();
            adaver+=adaver;
            delayms(1);
            }
            adaver=adaver/8;
            delayms(1);
            return adaver;
            }
            /*********************************************************
            名稱:AD採樣
            功能:採樣AD0的電壓,內(nèi)部2.56V參考電壓,中斷工作方式
            **********************************************************/
            void ad0_init()
            {
            ADMUX=0xc0;
            adchannel=0;
            ADCSRA=0x98;
            DDRA&=~BIT(0);
            PORTA&=~BIT(0);
            SEI();
            }
            #pragma interrupt_handler process:15 //interrupt process program
            void process()
            {
            int adcode=0;
            ADCSRA&=~BIT(ADIE);
            adcode=ADCL;
            adcode=(ADCH<<8)+adcode; //get adc value
            /************************
            中斷處理函數(shù)
            *************************/
            ADCSRA|=BIT(ADIE);
            }
            /********************************************************
            名稱:DAC0832 DA轉(zhuǎn)換
            輸入:有效分度0~255
            輸出:無
            功能:對8為數(shù)字信號進行DA轉(zhuǎn)換,實際應(yīng)用需調(diào)試
            ********************************************************/
            #define cs_low PORTD&=~BIT(0)
            #define cs_high PORTD|=BIT(0)
            #define wr1_low PORTD&=~BIT(1)
            #define wr1_high PORTD|=BIT(1)
            #define ile_high PORTD|=BIT(2)
            #define ile_low PORTD&=~BIT(2)
            #define wr2_low PORTD&=~BIT(3)
            #define wr2_high PORTD|=BIT(3)
            #define xfer_low PORTD&=~BIT(5)
            #define xfer_high PORTD|=BIT(5)
            void dac(int dadata)
            {
            Gpioinit1();
            DDRD=0xff;
            DDRC=0xff;
            ile_high;
            //delayus(1);
            cs_low;
            wr1_low;
            //delayus(1);
            PORTC=dadata;
            //delayus(1);
            wr1_high;
            cs_high;
            // delayus(1);
            wr2_low;
            xfer_low;
            // delayus(1);
            xfer_high;
            }
            /*****************************************************
            名稱: 數(shù)據(jù)拆分顯示函數(shù)
            功能: 將四位數(shù)據(jù)分別顯示到對應(yīng)的數(shù)碼管。
            *****************************************************/
            void addisplay(int addat) //轉(zhuǎn)換數(shù)據(jù)顯示,運算OK;
            {
            int a;
            a=addat;
            show(a/1000,3);
            delayms(2);
            show((a/100)%10,2);
            delayms(2);
            show(((a/10)%10)/10,1);
            delayms(2);
            show(a%10,0);
            delayms(2);
            }
            /**********************************************************
            名稱:SPI通信
            功能:應(yīng)用mega16自身SPI通信模塊與外設(shè)進行通信.查詢方式;
            ***********************************************************/
            void SPI_masterinit()
            {
            DDRB|=BIT(5)|BIT(7); //設(shè)置MOSI與SCK為輸出
            DDRB&=~(BIT(4)&BIT(6)); //設(shè)置MISO與SS為輸入
            SPCR|=BIT(4)|BIT(3)|BIT(1)|BIT(0); //數(shù)據(jù)高位先發(fā)送,主機模式,空閒時鐘極性
            //為高,SCK起始沿採樣數(shù)據(jù),128分頻
            SPCR|=BIT(6); //使能SPI
            delayms(1);
            }
            void SPI_mastertransdata(uchar data)
            {
            SPDR=data;
            while(!(SPSR&BIT(7)));
            }
            void SPI_slaveinit()
            {
            }
            void SPI_slaverecive()
            {
            }
            /*********************************************************
            名稱:比較匹配模式,,中斷方式,調(diào)試OK
            功能:AVR比較匹配模式應(yīng)用,當(dāng)AIN大於AIN1時,上升沿產(chǎn)生中斷
            **********************************************************/
            void com_inti()
            {
            SEI(); //開總中斷;
            DDRB&=((~BIT(2))&(~BIT(3))); //設(shè)置PB2/3口為輸入;
            SFIOR&=~BIT(3); //設(shè)置AIN1為模擬比較器反向輸入端;
            ACSR&=~BIT(7); //使能模擬比較器,注意此處為低電平有效;
            ACSR&=~BIT(6); //設(shè)置AIN0為正極輸入端;
            ACSR|=BIT(3); //使能模擬比較器中斷;
            ACSR|=(BIT(1)|BIT(0)); //比較器上升沿觸發(fā)中斷;
            }
            #pragma interrupt_handler comp:17 //注意函數(shù)名後不加();
            void comp() //模擬比較器中斷服務(wù)程序;
            {
            ACSR&=~BIT(3);
            /*************
            此處加中斷處理函數(shù)
            **************/
            ACSR|=BIT(3);
            }
            /**********************************************************
            名稱:外部中斷INT0 調(diào)試OK
            功能:低電平觸發(fā)INT0端口引起中斷,並響應(yīng)相關(guān)中斷服務(wù)程序
            **********************************************************/
            void int0_init()
            {
            DDRD&=~BIT(2); //PD2/INT0端口配置為輸入;
            MCUCR&=((~BIT(0))&(~BIT(0))); //INT0觸發(fā)方式為低電平;
            GICR|=BIT(6); //使能外部中斷0;
            SEI(); //開總中斷;
            }
            #pragma interrupt_handler int0:2
            void int0() //INT0中斷服務(wù)函數(shù);
            {
            GICR&=~BIT(6); //關(guān)閉外部INT0;
            /************************
            此處加INT0中斷處理函數(shù)
            ************************/
            GICR|=BIT(6); //開啟外部INT0;
            }
            /*********************************************************
            名稱:外部中斷INT1,
            功能:邊沿觸發(fā)INT0端口引起中斷,並響應(yīng)相關(guān)中斷服務(wù)程序
            **********************************************************/
            void int1_init()
            {
            DDRD&=~BIT(3); //將PD3口配置為輸入;
            PORTD&=~BIT(3); //pd3口初始值為0;
            MCUCR|=(BIT(3)|BIT(2)); //INT1上升沿觸發(fā)中斷;
            GICR|=BIT(7); //使能INT1中斷;
            SEI(); //開總中斷;
            }
            #pragma interrupt_handler int1:3
            void int1()
            {
            GICR&=~BIT(7); //關(guān)閉INT1中斷;
            /*******************************
            此處加INT1中斷服務(wù)函數(shù);
            *******************************/
            GICR|=BIT(7); //開啟INT1中斷;
            }
            /**********************************************************
            /**********************************************************
            名稱:12864(ks0108)顯示應(yīng)用
            功能:圖形液晶使用
            **********************************************************/
            #define EN_CLR PORTD&=~BIT(0) //使能12864
            #define EN_SET PORTD|=BIT(0) //關(guān)閉12864
            #define RW_READ PORTD|=BIT(1) //讀操作
            #define RW_WRITE PORTD&=~BIT(1) //寫操作
            #define RS_COMM PORTD&=~BIT(2) //命令操作
            #define RS_DATA PORTD|=BIT(2) //數(shù)據(jù)操作
            #define RESET PORTD&=~BIT(3) //12864液晶複位
            #define RESET_OVER PORTD|=BIT(3) //12864液晶結(jié)束複位;
            #define CS1_EN PORTD&=~BIT(4) //使能CS1,選擇左半屏幕;
            #define CS1_DIS PORTD|=BIT(4) //禁止CS1
            #define CS2_EN PORTD&=~BIT(5) //使能CS2,選擇右半屏幕;
            #define CS2_DIS PORTD|=BIT(5) //禁止CS2
            #define basic_com 0x30 //一次送8BIT數(shù)據(jù),基本指令集;
            #define explo_com 0xc4 //擴展指令集
            #define show_stitude 0x0f //顯示狀態(tài),整體顯示,游標(biāo)開,游標(biāo)位置開
            #define cleanscreen 0x01 //顯示清零,AC歸零
            #define cursor 0x07 //寫入/讀取時,游標(biāo)右移,畫面左移
            #define AC_0 0x03 //AC歸0,不改變DDRAM內(nèi)容
            const int char_0816[]={
            0xe0,0x18,0x04,0x04,0x04,0x18,0xe0,0x00,
            0x07,0x18,0x20,0x20,0x20,0x18,0x07,0x00
            };
            /************************************************************
            名稱:MCU端口初始化
            功能:設(shè)置MCU端口初始方向以及狀態(tài)
            *************************************************************/
            void GPIO_INIT()
            {
            DDRA=0XFF;
            PORTA=0X00;
            DDRB=0XFF;
            PORTA=0X00;
            DDRC=0XFF;
            PORTA=0X00;
            DDRD=0XFF;
            PORTA=0X00;
            }
            /****************************************************************
            名稱:輸入數(shù)據(jù)
            功能:MCU將數(shù)據(jù)送到總線
            *****************************************************************/
            void SET_DATA(uchar data)
            {
            delayus(3);
            PORTC=data;
            delayus(3);
            }
            /****************************************************************
            名稱:開關(guān)顯示控制
            功能:開啟與關(guān)閉顯示操作,1為開顯示,0為關(guān)閉顯示
            *****************************************************************/
            void LCD_Command_Displayonoff(uchar onoff)
            {
            RW_WRITE;
            RS_COMM;
            EN_CLR;
            SET_DATA(0x3e + onoff); //onoff為1開顯示,為0關(guān)顯示;
            EN_SET;
            delayus(2);
            EN_CLR;
            }
            /***************************************************************
            名稱: LCD顯示起始行設(shè)定
            功能:設(shè)置LCD顯示起始行位置,startline範(fàn)圍0~63
            ***************************************************************/
            void LCD_Command_setstartline(uchar startline)
            {
            RW_WRITE;
            RS_COMM;
            EN_CLR;
            SET_DATA(0Xc0 + startline); //12864行地址為0~63之間設(shè)定;
            EN_SET;
            delayus(2);
            EN_CLR;
            }
            /***************************************************************
            名稱:設(shè)置顯示行頁地址
            功能:設(shè)置顯示行頁地址,12864為0~7
            ****************************************************************/
            void LCD_Command_set_x(uchar x)
            {
            RW_WRITE;
            RS_COMM;
            EN_CLR;
            SET_DATA(0xB8+x); //設(shè)置12864行頁地址 x範(fàn)圍0~7;
            EN_SET;
            delayus(2);
            EN_CLR;

            關(guān)鍵詞: Atmega16單片機實用程

            評論


            技術(shù)專區(qū)

            關(guān)閉