在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設計應用 > Atmega16單片機實用程序

            Atmega16單片機實用程序

            作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
            /*********************************************************************
            MCU: ATmega16
            外部晶振: 8MHz
            程序功能: 4*4鍵盤識別,LED七段數(shù)碼管顯示,密碼功能模塊,直流電機正反轉(zhuǎn)控制
            AD轉(zhuǎn)換模塊, 模擬比較器,外部中斷應用,12864液晶,C/T0
            硬件設計: 參考PROTUES硬件仿真電路
            調(diào)試: 所有程序主要功能都軟硬件仿真通過,實際使用時要根據(jù)需要加入可靠性。
            編譯環(huán)境: ICC AVR
            Design by: wdw
            ********************************************************************/
            #include
            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            #define SET_1(a,b) a|=bit(b) //將寄存器a的第b位置1
            #define CLR_0(a,b) a&=~bit(b) //將寄存器a的第b位清0
            #program date code:
            const date[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,//共陽數(shù)據(jù);
            0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
            #program duan code:
            const duan[]={0x20,0x10,0x08,0x04,0x02,0x01}; //段選;
            char adchannel;
            int dispbuf[]={0,0,0,0,0,0,}; //顯示緩存;
            uchar securbuf[]={0,0,0,0,0,}; //5位密碼緩存;
            /********************************************************************
            名稱:ms延時子函數(shù)
            功能:延時指定的ms
            *********************************************************************/
            void delayms(int ms)
            {
            int i,j;
            for(i=ms;i>0;i--)
            {
            for(j=1722;j>0;j--); //8M時改為1141;
            } //12M時為1722;
            }
            /*******************************************************************
            名稱:us延時子程序
            功能:延時指定的us
            ********************************************************************/
            void delayus(uchar us)
            {
            for(us;us<0;us--);
            {
            } //12M時單位T為1.45US
            }
            /********************************************************************
            單參數(shù)LED 顯示
            硬件連接:數(shù)據(jù)PORTC-----D7~D0
            段選PORTD-----D7~D4
            *********************************************************************/
            void LEDShow(long int shownum)
            {
            uchar i,tmp,curnum;
            long int tmpnum;
            tmp = 0xfb;
            tmpnum = shownum;
            for(i=0;i<6;i++) //顯示的位數(shù)為5
            {
            curnum = tmpnum % 10;
            tmpnum = tmpnum / 10;
            PORTD = tmp;
            PORTC = date[curnum];
            delayus(1);
            tmp = (tmp << 1) + 0x01; //補上移位造成的最右位為0;
            }
            }
            /*******************************************************
            名稱:七段LED共陽數(shù)碼管,在指定數(shù)位上顯示指定的數(shù),雙參數(shù)
            功能:在指定的位置上顯示制定的數(shù);
            硬件連接:PC口複用控制段選和位選,有2片573進行數(shù)據(jù)鎖存;
            *******************************************************/
            void show(uchar dat,uchar num) //六位七段數(shù)碼管顯示程序OK;
            {
            PORTC=date[dat];
            PORTD|=BIT(0);
            PORTD&=~BIT(0); //送數(shù)據(jù);
            delayus(2);
            PORTC=0X00;
            delayus(1);
            PORTC=duan[num];
            PORTD|=BIT(1);
            delayus(2);
            PORTD&=~BIT(1);
            delayus(2);
            } //送選通信號;
            /************************************************************
            名稱:MCU端口初始化
            功能:設置MCU端口初始方向為輸出初始狀態(tài)為低
            *************************************************************/
            void Gpioinit0()
            {
            DDRA=0XFF;
            PORTA=0X00;
            DDRB=0XFF;
            PORTB=0X00;
            DDRC=0XFF;
            PORTC=0X00;
            DDRD=0XFF;
            PORTD=0X00;
            }
            /***********************************************************
            名稱:MCU端口初始化
            功能:設置MCU端口初始為輸出初始狀態(tài)為高
            ************************************************************/
            void Gpioinit1()
            {
            DDRA=0Xff;
            PORTA=0XFF;
            DDRB=0xff;
            PORTB=0XFF;
            DDRC=0xff;
            PORTC=0XFF;
            DDRD=0xff;
            PORTD=0XFF;
            }
            /**************************************************
            名稱:單端口測試
            輸入:測試PC的任意端口號0~7
            功能:週期改變一個端口的電平
            **************************************************/
            void IOtest(uchar num)
            {
            DDRC|=BIT(num);
            // while(1)
            // {
            PORTC|=BIT(num);
            delayms(50);
            PORTC&=~BIT(num);
            delayms(50);
            // }
            }
            /*************************************************
            名稱:按鍵動作檢測子程序。
            功能:檢測4*4鍵盤是否有鍵按下;
            硬件連接:PB0~PB3為行;PB4~pb7為列;
            *************************************************/
            uchar key_press()
            {
            uchar key;
            DDRB=0XFF;
            PORTB=0X0F;
            DDRB=0XF0;
            delayms(2); //此處要加上適當延時否則讀不到端口信息;
            key=PINB;
            key&=0x0f; //按下返回1,否則為0;
            if(key==0x0f)
            {
            return 0;
            }
            else
            return 1;
            }
            /***************************************************
            名稱:4*4矩陣按鍵掃描子程序
            功能:掃描一個4*4矩陣案件,比返回相應按鍵值;
            硬件連接:PB0~PB3為行;PB4~pb7為列;
            ***************************************************/
            uchar keyscan() //4*4鍵盤掃面程序,調(diào)試0K;
            {
            uchar keycode,keynum;
            do{
            }while(key_press()==0); //按鍵是否按下?
            asm("nop");
            asm("nop");
            while(key_press()==1)
            {
            DDRB=0XFF; //PB0~PB3為列,PB4~PB7為行;
            PORTB=0X0F; //列輸出高電平,行輸出低電平;
            DDRB=0XF0;
            delayus(10); //延時2毫秒,讀列狀態(tài);
            keycode=PINB;
            keycode&=0x0f; //讀列狀態(tài),屏蔽行狀態(tài);
            DDRB=0XFF;
            PORTB=0XF0;
            DDRB=0X0F;
            delayus(10);
            PINB&=0Xf0; //讀行狀態(tài),屏蔽列狀態(tài);
            keycode|=PINB;
            delayus(10);
            do{
            }while(key_press()==1); //按鍵是否釋放;
            switch(keycode)
            {
            case 0xee:
            keynum=0;
            break;
            case 0xde:
            keynum=1;
            break;
            case 0xbe:
            keynum=2;
            break;
            case 0x7e:
            keynum=3;
            break;
            case 0xed:
            keynum=4;
            break;
            case 0xdd:
            keynum=5;
            break;
            case 0xbd:
            keynum=6;
            break;
            case 0x7d:
            keynum=7;
            break;
            case 0xeb:
            keynum=8;
            break;
            case 0xdb:
            keynum=9;
            break;
            case 0xbb:
            keynum=10;
            break;
            case 0x7b:
            keynum=11;
            break;
            case 0xe7:
            keynum=12;
            break;
            case 0xd7:
            keynum=13;
            break;
            case 0xb7:
            keynum=14;
            break;
            case 0x77:
            keynum=15;
            break;
            default :
            keynum=16;
            break;
            }
            }
            return keynum;
            }

            上一頁 1 2 3 下一頁

            評論


            技術專區(qū)

            關閉