新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR獨立按鍵C程序

        AVR獨立按鍵C程序

        作者: 時間:2016-11-29 來源:網絡 收藏
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        uint num1;
        #pragma data:code//定義程序存在ROM里面
        const table[]={
        0xc0,0xf9,0xa4,0xb0,0x99,
        0x92,0x82,0xf8,0x80,0x90,
        0x88,0x83,0xc6,0xa1,0x86,
        0x8e
        };
        /***********************************************/
        /*******************延時子程序******************/
        /***********************************************/
        void delay(uchar z)
        {
        uchar x,y;
        for(x=0;x<10;x++)
        for(y=0;y}
        /***********************************************/
        /*******************顯示子程序******************/
        /***********************************************/
        void xian(uint num)
        {
        uchar i;
        for(i=0;i<50;i++)//顯示速度
        {
        PORTA=table[num/1000];//千位
        PORTC&=~BIT(3);
        delay(12);
        PORTC|=BIT(3);
        PORTA=table[num%1000/100];//百位
        PORTC&=~BIT(2);
        delay(12);
        PORTC|=BIT(2);
        PORTA=table[num%100/10];//十位
        PORTC&=~BIT(1);
        delay(12);
        PORTC|=BIT(1);
        PORTA=table[num%10];//個位
        PORTC&=~BIT(0);
        delay(12);
        PORTC|=BIT(0);
        }
        }
        /***********************************************/
        /***************按鍵按下判斷子程序*************/
        /***********************************************/
        uchar key()
        {
        uchar i;//定義一個變量來存數
        DDRD&=0Xf0;//設置PD IO口為輸入方式,高4位不管
        PORTD|=0X0f;//設置IO口低4位為輸入方式且帶上拉電阻,即高電平
        i=PIND;//讀出IO口的狀態
        i&=0x0f;//將高4位屏蔽掉,從而得到低四位
        if(i!=0x0f)//判斷按鍵是否有按下狀態
        return 1;//當有按鍵按下時,狀態就不是0x0f,從而返回值1
        else
        return 0;//如果還是那個狀態,則直接返回0
        }
        /***********************************************/
        /*******************鍵值處理子程序**************/
        /***********************************************/
        void keyy()
        {
        uchar k;//定義一個變量來存數
        if(key()==1)//如果鍵值處理函數為1則說明有按鍵按下了
        {
        delay(1);//消抖一下
        if(key()==1)//再次判斷一下
        {
        k=PIND;//讀出IO口的狀態
        k&=0x0f;//同樣將它高4位屏蔽掉
        switch(k)//來判斷具體鍵值,從而實現各種功能
        {
        case 0x0e:num1++;//如果低4位第1個鍵按下了,就將計數器加1
        break;//返回
        case 0x0d:num1--;//如果低4位第2個鍵按下了,就將計數器減1
        break;
        case 0x0b:num1=0;//如果低4位第3個鍵按下了,就將計數器清0
        break;
        }
        while(key()==1);//按鍵松手檢測,即如果鍵值處理程序為1則說明有鍵按下,
        //如果還有鍵按下,則一直等待。
        }
        }
        }
        /***********************************************/
        /*******************主程序*********************/
        /***********************************************/
        void main()
        {
        DDRA=0xff;//設置PA口為輸出
        DDRC=0xff;//設置PC口為輸出
        num1=1234;//計數器初值定義
        while(1)
        {
        keyy();//調用按鍵處理子程序
        xian(num1); //調用顯示子程序
        }


        關鍵詞: AVR獨立按

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大名县| 张家口市| 阿荣旗| 漳浦县| 青河县| 五河县| 韩城市| 桐城市| 西畴县| 资溪县| 汶上县| 德阳市| 隆安县| 蒙自县| 增城市| 桂平市| 开阳县| 乐昌市| 威海市| 稷山县| 永胜县| 富顺县| 利川市| 泰宁县| 南和县| 丹凤县| 开封县| 抚顺县| 安龙县| 佳木斯市| 康马县| 朝阳县| 通城县| 刚察县| 舒兰市| 临清市| 老河口市| 南投县| 武清区| 弋阳县| 禹城市|