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

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

基于stc89c52rc單片機(jī)的數(shù)字鐘設(shè)計(jì)程序部分(1602液晶顯示)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年11月05日   【字體:
與數(shù)字中的數(shù)碼管顯示類似,

增加:

液晶初始化部分

寫命令部分

寫數(shù)據(jù)部分


********************************************************************

*********************************************************************

#include<reg52.h>
#define  uchar unsigned char
#define  uint unsigned int
sbit rs = P2^6; //1602相應(yīng)                                                      
sbit rw = P2^5;                                                       
sbit ep = P2^7;  

uchar hour,min,sec,k;

uchar key;
unsigned char lcdd[]="0123456789"; 
uchar key_code[] = {0xb7,0xbb,0xbd,0xbe};//鍵盤編碼,我只用到四個(gè)鍵。 你我的編碼可能不同 ,具體看電路如何連接。
     
void delay(uint z)
{     

 uint x,y;
 for(z=x;x>0;x--)
    for(y=100;y>0;y--);
}

bit lcd_bz()
{   // 測(cè)試LCD忙碌狀態(tài)
 bit result;
 rs = 0;
 rw = 1;
 ep = 1;
    delay(5);
 result = (bit)(P0 & 0x80);//判斷P0^7是一還是零.屏蔽掉其它位0x80.強(qiáng)制轉(zhuǎn)換位bit型數(shù)據(jù)。在返回給result。
 ep = 0;
 return result; 
}
void lcd_cmd(uchar cmd)
{
   
 while(lcd_bz());
 rs = 0;//rs為1時(shí)寫入的是“數(shù)據(jù)”為0時(shí)寫入“指令”
 rw = 0;//rw為1時(shí)“讀取”為0時(shí)“寫入”
 ep = 0;//使能
 delay(5); 
 P0 = cmd;
 delay(5);
 ep = 1;
 delay(5);
 ep = 0;  
 
}


void lcd_data(uchar dat )//液晶寫數(shù)據(jù)
{
 

 while(lcd_bz());
 rs=1;
 rw=0; 
 ep=0;
    P0 = dat;
    delay(5);
 ep = 1;
 delay(5);
 ep = 0;
 //return dat; 
}

void lcd_init()  //液晶寫命令                  
{                                                                         
    delay(15);      //等待LCD電源穩(wěn)定                      
    lcd_cmd(0x38);                           
    delay(10);                                                            
    lcd_cmd(0x38);                                                       
    delay(10);                                                           
    lcd_cmd(0x38);                                                       
    delay(10);                                                            
                                                                          
    lcd_cmd(0x0c);          //顯示開,關(guān)光標(biāo)                             
    delay(10);                                                            
    lcd_cmd(0x06);          //移動(dòng)光標(biāo)                                   
    delay(10);                                                            
    lcd_cmd(0x01);          //清除LCD的顯示內(nèi)容                          
    delay(10);                                                            
}  

 


void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 k++;
        if(k==20)
        {
        k=0;
          sec++;
  
     }

        if(sec>59)
    {
     min++;
     sec=0;
 }
 if(min>59)
 {
    min=0;
    hour++;
 }
 if(hour>23)
 {
    hour=0;
 }  
}    


void disptime()  //時(shí)間顯示函數(shù)
{
 lcd_cmd(0x0c); //設(shè)置光標(biāo)不顯示、不閃爍
 delay(20);
 lcd_cmd(0x80); //起始顯示地址
 delay(20);

 lcd_data(lcdd[hour/10]);
 delay(10);          
 lcd_data(lcdd[hour%10]);
 delay(10);
 lcd_data(':');
 delay(12);              
      
 lcd_data(lcdd[min/10]);
 delay(10);           
 lcd_data(lcdd[min%10]);
 delay(12);
 lcd_data(':');
 delay(12);
  
 lcd_data(lcdd[sec/10]);
 delay(12);          
 lcd_data(lcdd[sec%10]);
 delay(12);    
 lcd_data(' ');
 delay(12);

 
}

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

  P1 = 0xf0;
  scan1 = P1;
  if (scan1 != 0xf0)
  //判鍵是否按下
  {
    delay(10); //延時(shí)10ms
    scan1 = P1;
    if (scan1 != 0xf0)
    //二次判鍵是否按下
    {
   TR0=0; //如果有鍵按下 則定時(shí)器停止工作
      P1 = 0x0f;
      scan2 = P1;
      keycode = scan1 | scan2; //組合成鍵掃描編碼

      for (j = 0; j < 4; j++)
      {
        if (keycode == key_code[j])
        //查表得鍵值
        {
          key = j;
    while(P1!= 0x0f)    //松手有效 這里需要好好研究一下 可以用萬(wàn)用表測(cè)量管腳電壓幫助理解
    disptime();
          return (key); //返回有效鍵值   
        }
      }
    }
 
  }
  else
    P1 = 0xff;

 
  return (key = 4); //返回?zé)o效碼
}

 


   
void Set_time(uchar key)
{
 
 if(key==0||key==1||key==2)//若s1,s2,s3其中有鍵按下,則為真
 {
    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;   //按下退出鍵 定時(shí)器繼續(xù)工作
 
   }
}

  
void sysint() //定時(shí)器初始化
{   
 
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 }


 void timeint()    //初始化
 {
   
 hour=0;
 min=0;
 sec=0;
 }

 

 

 

void main()
{
    
     sysint() ;
  timeint();
  lcd_init();//函數(shù)調(diào)用
 while(1)
 {
    keyscan();//調(diào)用鍵盤掃描,
    Set_time(key);
    disptime();
          
 }
}
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 国产一区二区 | 精品一区二区观看 | 亚洲www.| 黄色免费网站在线看 | 国产一区二区三区视频 | 日韩三级一区 | 欧美久久久网站 | 麻豆国产一区二区三区四区 | 日韩精品一区二区不卡 | 日韩在线免费视频 | av在线视 | 啪啪免费 | 久久69精品久久久久久久电影好 | 日本一区二区三区视频在线 | 97综合在线| 嫩草视频入口 | 精品av| 国产精品久久久亚洲 | 一级片av| 欧美精品中文字幕久久二区 | 国产精彩视频一区 | 亚洲一区二区三区四区五区中文 | 欧美成视频在线观看 | 日韩免费成人av | 日韩在线观看中文字幕 | 丝袜一区二区三区 | 亚洲美女网站 | 成人在线一区二区 | 国产精品美女久久久久久久网站 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日韩av福利在线观看 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲精品欧洲 | 国产精品久久7777777 | 欧美精品国产一区二区 | 日本一区二区三区精品视频 | 国产精品美女久久久久久不卡 | 国产精品99久久久久久大便 | 欧美中文字幕一区 | 欧美午夜精品理论片a级按摩 | 天天拍天天操 |