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

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

單片機(jī)驅(qū)動(dòng)矩陣按鍵與獨(dú)立按鍵源代碼

作者:寒竹子   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月23日   【字體:

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

/*
*功能:使用矩陣按鍵使得按鍵按下時(shí)數(shù)碼管上顯示各自對應(yīng)的數(shù)字的立方數(shù)
*       優(yōu)化顯示,只顯示有效位;
*   且使用獨(dú)立按鍵實(shí)現(xiàn)key1清零,key2加數(shù),key3減數(shù);
*日期:2013-05-07-10:20
*作者:徐冉
*特別說明:本程序代碼已經(jīng)通過調(diào)試,僅供學(xué)習(xí)使用;
*
*/
/***********AT89C52-RC 單片機(jī)-51hei實(shí)驗(yàn)板***********/
/*****************51hei開發(fā)板*********************/


#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!!! 此時(shí)的key值大于258 超出了uchar 故錯(cuò)誤!!
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;
  }
 }
 
}

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 久久久久欧美 | 久久99国产精一区二区三区 | 四虎影院免费在线 | 久草网在线视频 | 日韩电影一区 | 天天干夜夜操视频 | 国产小视频在线观看 | 精品一区二区av | 国产中文在线 | 亚洲一区二区三区免费视频 | 亚洲香蕉 | 午夜精品一区二区三区在线观看 | 成人av电影在线 | 成年免费大片黄在线观看一级 | 亚洲首页| 波霸ol一区二区 | 一区二区中文字幕 | 中文字幕一区二区三区乱码在线 | 亚洲精品白浆高清久久久久久 | 成人av电影天堂 | 国产欧美精品一区 | 国产精品免费观看 | 色综合色综合色综合 | 国产激情免费视频 | 国产96在线 | 国产在线视频一区二区 | 中文字幕在线不卡播放 | 精品国产欧美一区二区三区不卡 | 欧美精品一区二区免费视频 | 日本亚洲欧美 | 美国一级黄色片 | 久久成人国产精品 | 精品日韩电影 | www天天操| 日本黄色片免费在线观看 | 七七婷婷婷婷精品国产 | 中文字幕国产日韩 | 中文字幕亚洲一区二区三区 | 亚洲精品一区二三区不卡 | 精品一区二区av | 久草视频在线播放 |