日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
C51單片機(jī)實(shí)現(xiàn)液晶秒表以及簡單計(jì)算器
C51單片機(jī)實(shí)現(xiàn)液晶秒表以及簡單計(jì)算器
 更新時(shí)間:2009-7-9 16:55:11  點(diǎn)擊數(shù):0
【字體: 字體顏色

電路圖比較簡單,是一個(gè)51最小系統(tǒng),沒有采用總線方式,而簡單的連線方式,上有4*4矩陣鍵盤,一數(shù)碼管,89S51單片機(jī),串口下載線,數(shù)碼管顯示鎖存芯片\蜂鳴器\1602液晶.

因?yàn)樽罱荚囂?剛剛考試完又課程設(shè)計(jì),桌子上太混亂,原理圖沒有找到.所以就先貼上代碼.

此代碼已經(jīng)調(diào)試成功過,可以實(shí)現(xiàn)時(shí)間的調(diào)整.4*4矩陣鍵盤,第一排前三列是實(shí)現(xiàn)小時(shí)\分鐘\秒的加.第二排前三列是實(shí)現(xiàn)小時(shí)\分鐘\秒的減.當(dāng)然還可以通過設(shè)置矩陣鍵盤的鍵值,來實(shí)現(xiàn)加\減\乘\除四則運(yùn)算,由數(shù)碼管顯示參與運(yùn)算的數(shù)字以及最終的運(yùn)算結(jié)果.其他的不多說了,等下次我把圖貼上,大家勉強(qiáng)可以拿去研究下.其實(shí)硬件很簡單,不詳細(xì)說問題也不大的.

#include<reg51.h>
#include<stdio.h>
#include<stdlib.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp1;
void displayListChar(unsigned char X, unsigned char Y, uchar DData);
uchar dispbuf[]={'0','1','2','3','4','5','6','7','8','9',':'};

uchar second; 
uchar minute;
uchar hour;
uint tcnt,g;
uchar flag;

void dlms(void);
uchar kbscan(void);
void Show_Time(void);
void delay5ms(void);
  void dlms(void);
   void Settime(uchar verify);//verify 在這里為調(diào)整的意思

 void delay400ms(void) ;

///#define busy 0x80 file://用/于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí)
///#define RSaddr 0x1000
///#define RWaddr 0x2000
///#define CSaddr 0x0400
#define wc 0x8fff
#define wd 0xdfff
#define rc 0xbfff
void waitLcd()                     //just wait until 液晶不忙為止
  {
    char temp;
    bit flag=1;
    while(flag==1)
    {
       temp=XBYTE[rc];
       if (temp>>7==0) flag=0;
       P1=temp;
    }
      P1=0xff;
  }
                                    //just wait until 液晶不忙為止
void WriteCommand_Lcd(bit isCheck,char c)   
  {
    if (isCheck==1) waitLcd();
     XBYTE[wc]=c;
  }

void writedata(char c)
{
    waitLcd();
    XBYTE[wd]=c;
}

void LcdInit()
  {
    delay5ms();
  delay5ms();
 delay5ms();
 WriteCommand_Lcd(0,0x38); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
 delay5ms();
 WriteCommand_Lcd(0,0x38);
 delay5ms();
 WriteCommand_Lcd(0,0x38);
 delay5ms();
 WriteCommand_Lcd(1,0x38); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào),8位2行5*7
 WriteCommand_Lcd(1,0x08); //關(guān)閉顯示
 WriteCommand_Lcd(1,0x01); //清顯示
 WriteCommand_Lcd(1,0x06); // 文字不動(dòng),光標(biāo)右移
 WriteCommand_Lcd(1,0x0C); // 顯示開及光標(biāo)設(shè)置
  }


void displayListChar(unsigned char X, unsigned char Y, uchar DData)
  {
 Y &= 0x1;
 X &= 0xF;
 if (X <= 0xF)
   {
    Y &= 0x1;
 X &= 0xF;
 if (Y) X |= 0x40;
 X |= 0x80;
 WriteCommand_Lcd(0,X);
 writedata(dispbuf[DData]);
 
   }
 }

 void Show_Time(unit k)
{
   displayListChar(0,0,hour/10);
   displayListChar(1,0,hour%10);
   displayListChar(2,0,10);
   displayListChar(3,0,minute/10);
   displayListChar(4,0,minute%10);
   displayListChar(5,0,10);
   displayListChar(6,0,second/10);
   displayListChar(7,0,second%10);
 switch(k)
{
  case 1: displayListChar(0,1,1);
  case 2: displayListChar(0,1,2);
  case 3: displayListChar(0,1,3);
  case 4: displayListChar(0,1,4);
  case 5: displayListChar(0,1,5);
  case 6: displayListChar(0,1,6);
  case 7: displayListChar(0,1,7);
  case 8: displayListChar(0,1,8);
  case 9: displayListChar(0,1,9);
  case 10:displayListChar(0,1,10);
  case 11:displayListChar(0,1,11);
  case 12:displayListChar(0,1,12);
  case 13:displayListChar(0,1,13);
  case 14:displayListChar(0,1,14);
  case 15:displayListChar(0,1,15);
  case 16:displayListChar(0,1,16);
 }
 


 void Settime(uchar verify)
{
  //鍵盤設(shè)置
//    1 /hour+    (0xee)     2/minute+  0xde   3/second+  0xbe     +
// 4/hour-   0xed   5/ minute-   0xdd     6/second-    0xbd        -
// 7   8   9   *
// 0  CLR  =   /
  ////hour+的代碼
   if(flag)
   {
    if (verify==0xee)
   {
         dlms();
   if (verify==0xee)
   {
           hour++;
                 if(hour==24)
                {
                  hour=0;
                }
    //while(verify==0xee);           
      verify=0x00;
        }
   //    1 /hour+    (0xee)     2/minute+  0xde   3/second+  0xbe
 }
  ///minute +的代碼
   else if (verify==0xde)
   {
         dlms();
   if (verify==0xde)
   {
           minute++;
                 if(minute==60)
                {
                 minute=0;
                }
    //while(verify==0xde);           
      verify=0x00;
        }
   //    1 /hour+    (0xee)     2/minute+  0xde   3/second+  0xbe
  }
//////second++的代碼
    else if (verify==0xbe)
   {
         dlms();
   if (verify==0xbe)
   {
           second++;
                 if(second==60)
                {
                 second=0;
                }
   // while(verify==0xbe);           
       verify=0x00;
        }    
   //    1 /hour+    (0xee)     2/minute+  0xde   3/second+  0xbe
  }

//////hour- (0xed) 的代碼
  else if (verify==0xed)
   {
        dlms();
   if (verify==0xed)
   {
    if(hour==0)
          {hour=24;
     }
     hour--;
                // if(hour==0)
               // {
               //   hour=23;
                //}
    //while(verify==0xed);           
      verify=0x00;
        }
  
 }
 // 4/hour-   0xed   5/ minute-   0xdd     6/second-    0xbd
///下面為minute -的代碼
    else  if (verify==0xdd)
   {
        dlms();
   if (verify==0xdd)
   {     if(minute==0)
          {minute=60;}
           minute--;
                 //if(minute==0)
                //{
                // minute=59;
                //}
    //while(verify==0xdd);           
      verify=0x00;
        }
   
  }
// 4/hour-   0xed   5/ minute-   0xdd     6/second-    0xbd
///下面為second -的代碼
  else  if (verify==0xbd)
   {
         dlms();
   if (verify==0xbd)
   { if(second==0)
          {second=60;}
           second--;
                 //if(second==0)
                //{
                // second=59;
                //}
   // while(verify==0xbd);           
       verify=0x00;
        }     
 // 4/hour-   0xed   5/ minute-   0xdd     6/second-    0xbd 
  }

}

   
}


void main(void)
{
  
    TMOD=0x02; //置自動(dòng)重裝載模式
    TH0=0x06;   //設(shè)初值
    TL0=0x06;  //設(shè)初值
    TR0=1;     //開始計(jì)數(shù)
    ET0=1;    //開定時(shí)器/計(jì)數(shù)器
    EA=1;     //中斷開
    delay400ms();//啟動(dòng)等待,等LCM講入工作狀態(tài)
    LcdInit();     //LCM初始化
    while(1)
   { 
       uchar key;
      key=kbscan();
    dlms(); 
    Show_Time();
   // if ((key==0xee)||(key==0xbe)||(key==0xde)||(key==0xed)||(key==0xdd)||(key==0xbd))
   if (key!=0)
   {
         if (key==0x7e)
           {
              dlms();
   if (key==0x7e)
   {
       EA=0;
    flag=1;
               
                }
    //while(verify==0xee);           
      key=0x00;
        }
     
   if (key==0x7d)
   {
         dlms();
   if (key==0x7d)
   {
       EA=1;
    flag=0;
               
                }
    //while(verify==0xee);           
      key=0x00;
        }
  
         Settime( key );
         delay400ms();
   }

    }
}
    

void delay5ms(void)          
  {
   unsigned int TempCya = 277;
 while(--TempCya);
  }      


 
  //延時(shí)400ms
void delay400ms(void)          
  {
   unsigned int TempCya = 22160;
 while(--TempCya);
  }                     
  //延時(shí)400ms


void timer0(void) interrupt 1 using 1
{  
  tcnt++;
  if(tcnt==2000)
    {
      tcnt=0;
      second++;
      if(second==60)
        {
          second=0;
          minute++;
          if(minute==60)
            {
              minute=0;
              hour++;
              if(hour==24)
                {
                  hour=0;    
                }


             }
   
         }
     }
  
      }


//鍵盤掃描
uchar kbscan(void)
{  
    uchar sccode;
 P1=0xf0;
 if( (P1&0xf0)!=0xf0 )
 {
     dlms();
  if((P1&0xf0)!=0xf0)
  {
     sccode=0xfe;
     while ((sccode&0x10)!=0)
     {
         P1=sccode;
      if ((P1&0xf0)!=0xf0)
       {
        temp1=P1;
     return  temp1;
    }
    else
    {
       sccode=(sccode<<1)|0x01;
                }
         
      }
        }
      }
return (0);
}
            
void dlms(void)
{   
      g=554;
      while(g--);  //延時(shí)10mS鐘
}

  • 上一篇: 改善8051系統(tǒng)用電效率的微控制器
  • 下一篇: 基于RTX51的單片機(jī)軟件設(shè)計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1