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

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

單片機驅動矩陣按鍵與獨立按鍵源代碼

作者:寒竹子   來源:本站原創   點擊數:  更新時間:2014年03月23日   【字體:

本程序所用的原理圖下載: 點這里 ,單片機芯片使用的stc89c52;找到相應部分即可.這是一整個單片機開發板的電路圖其他的忽略.
hex文件及其工程文件下載:http://m.zg4o1577.cn/f/pingfc.rar  下面是程序源碼:

/*
*功能:使用矩陣按鍵使得按鍵按下時數碼管上顯示各自對應的數字的立方數
*       優化顯示,只顯示有效位;
*   且使用獨立按鍵實現key1清零,key2加數,key3減數;
*日期:2013-05-07-10:20
*作者:徐冉
*特別說明:本程序代碼已經通過調試,僅供學習使用;
*
*/
/***********AT89C52-RC 單片機-51hei實驗板***********/
/*****************51hei開發板*********************/


#include <reg52.h>
typedef unsigned int  uint;
typedef unsigned char uchar;
sbit wela = P2^7;
sbit dula = P2^6;
sbit key1 = P3^4;
sbit key2 = P3^5;
sbit key3 = P3^6;
sbit fm = P2^3;
uint temp;
uchar code table[] = {     
      0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義
 };
// uchar key; Error!!! 此時的key值大于258 超出了uchar 故錯誤!!
uint key;
void display(num);
void delay(uint xms);
void max_kanscan();
void keyscan();
void main(void)
{
 while(1)
 { 
  keyscan();
  max_kanscan();
  display(key);
 }  
}


void display(num)
{
 uchar qian, bai, shi, ge;
 qian = num / 1000 % 10;
 bai  = num / 100 % 10;
 shi  = num / 10 % 10;
 ge   = num % 10;
 
 if(num < 10)
 {
  dula = 1;
  P0 =table[ge];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfe;
  wela = 0;
 }
 else if(num < 100)
 {
  dula = 1;
  P0 =table[shi];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfe;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[ge];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfd;
  wela = 0;
  P0 = 0x00;
  delay(1);
 }
 else if(num < 1000)
 {
  dula = 1;
  P0 =table[bai];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfe;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[shi];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfd;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[ge];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfb;
  wela = 0;
  P0 = 0x00;
  delay(1);
 }
 else if(num < 10000)
 {
  dula = 1;
  P0 =table[qian];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfe;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[bai];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfd;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[shi];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xfb;
  wela = 0;
  P0 = 0x00;
  delay(1);


  dula = 1;
  P0 =table[ge];
  dula = 0;
  P0 = 0xff;
  wela = 1;
  P0 = 0xf7;
  wela = 0;
  P0 = 0x00;
  delay(1);
 }
   
}


void delay(uint xms)
{
 uint i, j;
 for(i = xms; i > 0; i--)
  for(j = 125; j > 0; j--);
}


void keyscan()
{
 if(key1 == 0)
 {
  delay(5);
  if(key1 == 0)
  {
   fm = 0;
   key = 0;
   while(!key1);
   delay(5);
   while(!key1);
   fm =  1;
  }
 }


 if(key2 == 0)
 {
  delay(5);
  if(key2 == 0)
  {
   fm = 0;
   key++;
   while(!key2);
   delay(5);
   while(!key2);
   fm = 1; 
  }
 }


 if(key3 == 0)
 {
  delay(5);
  if(key3 == 0)
  {
   fm = 0;
   key--;
   while(!key3);
   delay(5);
   while(!key3);
   fm = 1; 
  }
 }

 


}
void max_kanscan()
{
 
 P3 = 0xfe;
 temp = P3;
 temp &= 0xf0;
 if(temp != 0xf0)
 {
  delay(5);
  temp = P3;
  temp &= 0xf0;
  if(temp != 0xf0)
  { //按鍵檢測
   temp = P3;
   fm = 0;
   switch(temp)
   {
     case 0xee: key = 1 * 1 *1;
    break;
     case 0xde: key = 2 * 2 *2;
    break;
     case 0xbe: key = 3 * 3 *3;
    break;
     case 0x7e: key = 4 * 4 *4;
    break;
    default:
    break;
   }
   //按鍵釋放
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   delay(5);
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   fm = 1;
  }
 }


 P3 = 0xfd;
 temp = P3;
 temp &= 0xf0;
 if(temp != 0xf0)
 {
  delay(5);
  temp = P3;
  temp &= 0xf0;
  if(temp != 0xf0)
  { //按鍵檢測
   temp = P3;
   fm = 0;
   switch(temp)
   {
     case 0xed: key = 5 * 5 *5;
    break;
     case 0xdd: key = 6 * 6 *6;
    break;
     case 0xbd: key = 7 * 7 *7;
    break;
     case 0x7d: key = 8 * 8 *8;
    break;
    default:
    break;
   }
   //按鍵釋放
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   delay(5);
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   fm = 1;
  }
 }


 P3 = 0xfb;
 temp = P3;
 temp &= 0xf0;
 if(temp != 0xf0)
 {
  delay(5);
  temp = P3;
  temp &= 0xf0;
  if(temp != 0xf0)
  { //按鍵檢測
   temp = P3;
   fm = 0;
   switch(temp)
   {
     case 0xeb: key = 9 * 9 *9;
    break;
     case 0xdb: key = 10 * 10 *10;
    break;
     case 0xbb: key = 11 * 11 *11;
    break;
     case 0x7b: key = 12 * 12 *12;
    break;
    default:
    break;
   }
   //按鍵釋放
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   delay(5);
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   fm = 1;
  }
 }


 P3 = 0xf7;
 temp = P3;
 temp &= 0xf0;
 if(temp != 0xf0)
 {
  delay(5);
  temp = P3;
  temp &= 0xf0;
  if(temp != 0xf0)
  { //按鍵檢測
   temp = P3;
   fm = 0;
   switch(temp)
   {
     case 0xe7: key = 13 * 13 *13;
    break;
     case 0xd7: key = 14 * 14 *14;
    break;
     case 0xb7: key = 15 * 15 *15;
    break;
     case 0x77: key = 16 * 16 *16;
    break;
    default:
    break;
   }
   //按鍵釋放
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   delay(5);
   while(temp != 0xf0)
   {
    temp = P3;
    temp &= 0xf0;
   }
   fm = 1;
  }
 }
 
}

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲午夜视频 | 久久久久国产精品一区三寸 | 99久久久国产精品免费消防器 | 999久久久 | 日韩一区三区 | 国产精品一区在线 | 国产激情在线 | 国产黄色在线观看 | 国产精品爱久久久久久久 | 国产一区在线免费观看视频 | 手机三级电影 | 亚洲高清视频一区二区 | 国产乱码精品一区二区三区五月婷 | 日韩在线h | av高清 | 国产精品一区二区无线 | 精品久久亚洲 | 黄色毛片在线观看 | 精品国产精品一区二区夜夜嗨 | 亚洲国产片 | 亚洲午夜av| 成人精品高清 | 伊人在线 | 中文字幕高清 | 欧美二区在线 | 韩国成人在线视频 | 亚洲午夜视频在线观看 | www亚洲精品 | 欧美伊人 | 欧美1页| 久久亚洲国产精品日日av夜夜 | 91国内精精品久久久久久婷婷 | 精品一区二区三区在线观看国产 | 青青草在线视频免费观看 | 1区2区3区视频 | 91 久久| 国产精品99久久久久久大便 | 99reav| 亚洲www | 免费成人高清在线视频 | 中文成人无字幕乱码精品 |