找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1713|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

ATMEGA16A 按鍵數(shù)碼管

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:587926 發(fā)表于 2019-7-24 12:26 來(lái)自手機(jī) | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
* 【編譯環(huán)境】: ICCAVR  
* 【函數(shù)功能】: 按鍵K5 K6 實(shí)現(xiàn)數(shù)碼管加減1  初始值 8888
* 【晶    振】:  8M               
* 【芯    片】:  ATMEGA16A         
*                                              */   
/******************************************************************************/
      #define uchar unsigned char
          #define uint  unsigned int
          #include <iom16v.h>
          #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
      #define Clr_Bit(val, bitn)    (val&=~(1<<(bitn)))
      #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )
          
      uchar disbuf[4]={0,0,0,0};
      uchar  discode[10]={ 0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };  //段碼表
      uchar  disbit[4]  ={ 0xFE, 0xFD,0xFB,0xF7}; //選通值   
      uchar  Key_Up;
      uchar  Key_Down;
          static uint k=8888;  
/******************************************************************************/
//延時(shí)函數(shù)
/******************************************************************************/                                                                                                                   
      void delay(void)
           {uint i;
             for(i=0;i<500;i++);
           }
/******************************************************************************/

/******************************************************************************/

//顯示函數(shù)
/******************************************************************************/                    
          void Display(void)
         {  uchar i;
            for(i=0;i<4;i++)
                {
                         PORTB=discode[disbuf[i]];
                 PORTA=disbit[i];
                 delay();
                 PORTA=0xff;
                            }
                 }       
/******************************************************************************/
//顯示數(shù)據(jù)處理
/******************************************************************************/                 
      void Process(uint i,uchar *disbuf)
         { disbuf[0]=i/1000;
                   i=i%1000;
                   disbuf[1]=i/100;
                   i=i%100;
                   disbuf[2]=i/10;
                   i=i%10;
                   disbuf[3]=i;
          }
/******************************************************************************/
//按鍵處理子程序
/******************************************************************************/            
      void Get_Key(void)
             {
                     if(Get_Bit(PINA,4)==0)    //PA4 按鍵處理函數(shù)        
                        {
                           Display();
                           Display();
                           Display();
                           Display();
                          while(!(Get_Bit(PINA,4)))//等待按鍵松開(kāi)
                  {
                                  Display();
                  }
                                  k++;
                  if(k>9999)k=0;
                  Process(k,disbuf);   
                        }
                       
                      if(Get_Bit(PINA,5)==0)   //PA5 按鍵處理函數(shù)
                {  
                                  Display();
                                  Display();
                                  Display();
                               
                                 while(!Get_Bit(PINA,5))  //等待按鍵松開(kāi)
                  {
                                  Display();
                                   Display();
                  }  
                  k--;   
                                     if(k==65535)k=9999;
                      Process(k,disbuf);     
                            }
         }
         void main (void)
             {
                         
                           DDRA|=1<<0|1<<1|1<<2|1<<3|0<<4|0<<5;//設(shè)置PA0,PA1,PA2為輸出,PA4,PA5為輸入
                   PORTA=0x00;
                                      
               DDRB=0xFF;
               PORTB=0xFF;
                        
               Process(k,disbuf);
                  while(1)
                 {   
                    Get_Key();
                                    Display();  
                              }
                         }
                                 
                     
                     
                       
                           
               
               
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-7-24 14:32 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表