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

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

基于stc89c52rc單片機的數字鐘設計(數碼管顯示)

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

事情總是看著簡單,做起來沒那么容易。
這個程序我開始時是根據教程編的,有些地方不理解就匆匆略過……事實證明這是不可取的……
寫了百十來行以后編譯,報錯!就不會解決了。
這時才體會到基礎是多么重要!!!
學習方法要科學,要知其然,更要知其所以然。
就像羅哥說的,從原理入手……
感謝 劉鵬  百忙之中抽出時間指導,真是我的良師和益友。。。。。。。
  *****************************************************
把程序貼出來。大家學習學習。千萬不要ctrl c,ctrl v。
全部代碼下載地址:http://m.zg4o1577.cn/f/ssz.rar
********************************************

       我已經加了部分注釋……

*************************************************************
P1口接4*4矩陣鍵盤
P2口作為數碼管的片選控制端
P0口送給數碼管數據
1:實現時分秒的顯示
2:通過S1調節秒,S2調節分鐘,S3調節小時,S4退出調節模式。
3:按鍵松手有效

*************************************************************
矩陣鍵盤的掃描
定時器的應用
*****************************************
c語言函數調用
形參
實參
******************************************************************

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共陰數碼管字模
uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//P2口位選8個數碼管
uchar key_code[] =
{0xb7,0xbb,0xbd,0xbe};
uchar key;
uchar hour,min,sec;
uchar k;
void delay(uchar z)  //延時函數
{
 uchar x,y;
 for(x=z;x>0;x--)
   for(y=100;y>0;y--);
}

void display() //顯示函數
{
   if(k==20)//定時器定時50ms,20次就是1秒
   {
     k=0;
  sec++;
 }
   if(sec>59)
  {
    sec=0;
    min++;
   }
 if(min>59)
    {
       min=0;
    hour++;
  }
 if(hour>23)
 {
    hour=0;
  }
     P2=table2[5];  //片選
  P0=table1[hour/10];//送數據,十位
  delay(10);
  P2=table2[4];  //片選
  P0=table1[hour%10];//個位
  delay(10);

  P2=table2[3]; 
  P0=table1[min/10];
  delay(10);
  P2=table2[2]; 
  P0=table1[min%10];
  delay(10);


  P2=table2[1]; 
  P0=table1[sec/10];
  delay(10);
  P2=table2[0]; 
  P0=table1[sec%10];
  delay(10);

  
}

unsigned char keyscan()//鍵盤掃描程序
{
  unsigned char scan1, scan2, keycode, j;

  P1 = 0xf0;
  scan1 = P1;
  if (scan1 != 0xf0)
  //判鍵是否按下
  {
    delay(10); //延時10ms
    scan1 = P1;
    if (scan1 != 0xf0)
    //二次判鍵是否按下
    {
   TR0=0;
      P1 = 0x0f;
      scan2 = P1;
      keycode = scan1 | scan2; //組合成鍵掃描編碼

      for (j = 0; j < 4; j++)
      {
        if (keycode == key_code[j])
        //查表得鍵值
        {
          key = j;
    while(P1!= 0x0f)
    display();
          return (key); //返回有效鍵值   
        }
      }
    }
 
  }
  else
    P1 = 0xff;

 
  return (key = 4); //返回無效碼
}
void system_Ini() //定時器初始化
{
    TMOD= 0x01;
    TH0=(65535-50000)/256; 
    TL0=(65535-50000)%256; 
 ET0 = 1; 
    TR0  = 1;
  EA=1;

}
void timer0 () interrupt 1 //中斷程序
{
   TH0=(65535-50000)/256; 
   TL0=(65535-50000)%256;
   k++;
}
void contral(uchar key) //調整時間
{
   if(key==0||key==1||key==2)
   {
     
   if(key==0)
    {
       sec++;
    if(sec>59)
    {
   sec=0;
    }
    }
    else if(key==1)
    {
    min++;
    if(min>59)
    {
       min=0;
    }
    }
       else if(key==2)
    {
     hour++;
     if(hour>23)
     {
        hour=0;
     }
    }

    
   }
   else if(key==3)
   {
   TR0=1;
   }
}

 


 void main()
 {
  uchar a;
 
 system_Ini();//函數調用,初始化
 while(1)
 {
 a=keyscan();
 contral(a);
 display();
 }


 }
關閉窗口

相關文章

主站蜘蛛池模板: 91精品国产一区二区三区香蕉 | 国产一级片精品 | 黄网免费看| 中文字幕av亚洲精品一部二部 | 91xxx在线观看 | 亚洲国产一区二区视频 | 国产精品久久久久久久免费大片 | 欧美成人一区二区三区片免费 | h片在线免费看 | 亚洲精品久久久久久首妖 | 日韩在线免费视频 | 亚洲一区二区三区免费观看 | 欧美久久一区二区三区 | 一区二区福利视频 | 91九色视频| 欧美一二三区 | 久久久久久久久久久久久91 | 色综合视频 | 久久精品69 | 中文字幕日韩一区 | 午夜精品久久久久久久星辰影院 | 久久精品一区二区 | 欧美精品第一区 | 日本三级黄视频 | av国产精品毛片一区二区小说 | 国产精品一级在线观看 | 欧美日韩精品一区二区三区四区 | 一区二区精品视频 | 欧美亚洲第一区 | 精品一区二区久久久久久久网站 | 欧美精品一二三区 | 中文字幕av网站 | 国产成人一区二区三区 | 亚洲一区二区三区免费在线 | 午夜免费福利电影 | 国产一区二区日韩 | 国产精品99一区二区 | 中文字幕一区二区三区四区五区 | 极品的亚洲 | 成人午夜影院 | 91久久国产综合久久 |