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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年04月03日   【字體:

/**************
此程序在別人的基礎(chǔ)上進(jìn)行了一些修改,能應(yīng)用到我的開發(fā)板中,
并與我自制的外接按鍵和LED燈配合使用,在此感謝原創(chuàng)者!!!
硬件:M16
作用:當(dāng)按下按鍵時(shí)顯示相對應(yīng)的按鍵控制的LED燈
頻率:8.000000MHZ
開發(fā)板: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;
//以下為左右移動(dòng)參數(shù)宏定義
#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;//初始運(yùn)行時(shí)輸出全為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;//無鍵按下則返回初始狀態(tài)
 }
  }
 }
void led_display(void)//按鍵按下時(shí)在LED上顯示相應(yīng)的狀態(tài)
 {
  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();//調(diào)用端口初始化函數(shù)
   while(1)
    {
  key_scan();//調(diào)用按鍵掃描函數(shù)
  led_display();//調(diào)用顯示函數(shù)
 }
 }    

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 一区二区三区免费网站 | 免费在线观看成年人视频 | 亚洲高清在线视频 | 日韩在线不卡视频 | 日本黄色大片免费 | 黄视频网站免费观看 | 夜夜操操操 | 在线免费观看毛片 | 国产91一区 | 另类二区 | 久久爆操 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 日日夜夜天天 | 免费h视频| 天天操夜夜艹 | 欧美亚洲在线 | 精品福利av导航 | 精品成人在线 | 中文字幕av在线播放 | 亚洲夜夜爽 | 日韩欧美在线精品 | 久久国产精品视频 | 91久久精品一区二区二区 | 亚洲免费人成在线视频观看 | 99tv成人影院 | 日韩精品在线一区 | 一级黄色毛片 | 亚洲视频一区在线观看 | 久久国产综合 | av夜夜操 | gav成人免费播放视频 | 久久久久9999 | 日韩一区不卡 | 国产精品3区 | 国产精品一区二区无线 | 蜜桃综合在线 | 九九亚洲| 天堂va在线 | 亚洲一区二区 | 成人日b视频 | 一级做a爰片性色毛片16 |