久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

基于AVR的4*4矩陣鍵盤掃描與LED顯示程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年04月03日   【字體:

/**************
此程序在別人的基礎上進行了一些修改,能應用到我的開發板中,
并與我自制的外接按鍵和LED燈配合使用,在此感謝原創者!!!
硬件:M16
作用:當按下按鍵時顯示相對應的按鍵控制的LED燈
頻率:8.000000MHZ
開發板:EasyAVR M16 v12
編譯軟件:ICCAVR6.31A
下載軟件:AVRstudio4.14
編寫人:伍建忠
編寫日期:2011.10.14
修改日期:
************/
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uint key_num=20;
//以下為左右移動參數宏定義
#define crol(a,n)a=(a<>(8-n))
#define cror(a,n)a=(a>>n)|(a<<(8-n))
void delay(void)
 {
  uint i;
  for(i=1;i<100;i++);
 }
void delay_1ms(void)
 {
  uint i;
  for(i=1;i<(uint)(8*143-2);i++);
 }
void delay_ms(uint time)
 {
  uint i=0;
  while(i)
   {
    delay_1ms();
 i++;
   }
 }
void port_init(void)
 {
  DDRA=0xff;
  PORTA=0xff;
  DDRB=0x00;
  PORTB=0x00;
  DDRC=0xff;//
  PORTC=0xff;//
  DDRD=0xf0;//D口低四位為輸入,置高電平。
  PORTD=0x00;//高四位為輸出,置低電平。
 }
uchar key_scan(void)
 {
  uchar i,j;
  DDRD=0xf0;
  PORTD=0x00;//初始運行時輸出全為0
  if((PIND&0x0f)==0x0f)//判斷有無按鍵按下
  return 20;
  else
  {
   delay_ms(10);
   if((PIND&0x0f)==0x0f)//第二次判斷,必不可少
   return 20;
   else
    {
  for(i=4;i<8;i++)//掃描行線
  {
   PORTD=~(1<<i)|0x0f;//行線上是否有拉低
   for(j=0;j<4;j++)//掃描列線
    {
     if((PIND&(1<<j))==0)//列線上有無按鍵按下
   key_num=((i-4)*4+j);//確定按鍵值
    }
  }
  return key_num;//無鍵按下則返回初始狀態
 }
  }
 }
void led_display(void)//按鍵按下時在LED上顯示相應的狀態
 {
  switch(key_num)
   {
    case 0: PORTA=0xfe; PORTD=0xee; break;
 case 1: PORTA=0xfc; PORTD=0xde; break;
 case 2: PORTA=0xf8; PORTD=0xbe; break;
 case 3: PORTA=0xf0; PORTD=0x7e; break;
 case 4: PORTA=0xe0; PORTD=0xed; break;
 case 5: PORTA=0xc0; PORTD=0xdd; break;
 case 6: PORTA=0x07; PORTD=0xbd; break;
 case 7: PORTA=0x55; PORTD=0x7d; break;
 case 8: PORTA=0xaa; PORTD=0xeb; break;
 case 9: PORTA=0xcc; PORTD=0xdb; break;
 case 10: PORTA=0xbb; PORTD=0xbb; break;
 case 11: PORTA=0x77; PORTD=0x7b; break;
 case 12: PORTA=0xf0; PORTD=0xe7; break;
 case 13: PORTA=0x66; PORTD=0xd7; break;
 case 14: PORTA=0xee; PORTD=0xd7; break;
 case 15: PORTA=0xdd; PORTD=0x77; break;
 default: break;
 key_num=16;
   }
 }
void main(void)
 {
  #ifdef debag1
   key_code=2;
   #endif
   port_init();//調用端口初始化函數
   while(1)
    {
  key_scan();//調用按鍵掃描函數
  led_display();//調用顯示函數
 }
 }    

關閉窗口

相關文章

主站蜘蛛池模板: 国产精品一区二区无线 | 日本天天操 | 95国产精品| 亚洲欧美日韩一区二区 | 国产福利在线视频 | 精品区一区二区 | 欧美精品一区在线发布 | 日本中文字幕视频 | 欧美国产亚洲一区二区 | 精品一区二区三区在线观看国产 | 久久精品一区二区三区四区 | 992人人草 | 欧美性一区二区三区 | 91精品国产欧美一区二区 | 成人精品鲁一区一区二区 | 欧美国产日韩在线观看成人 | 亚洲国产成人精品久久久国产成人一区 | 古装人性做爰av网站 | 视频一区在线观看 | 噜噜噜噜狠狠狠7777视频 | 日韩一级免费观看 | 久久国产精品视频 | 国产一区欧美 | 女人av | 一区二区成人在线 | 国产欧美精品 | 成人在线影视 | 成人一区在线观看 | 亚洲综合首页 | 国产亚洲精品美女久久久久久久久久 | 日韩免费一二三区 | 三级av在线 | 插插插干干干 | 久久久片 | 97精品久久 | 亚洲视频在线一区 | 欧美日韩精品综合 | 亚洲精品天堂 | 欧美二级| 亚洲成人av在线 | 久久99视频精品 |