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

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

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

作者:佚名   來源:本站原創(chuàng)   點擊數(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};//鍵盤編碼,我只用到四個鍵。 你我的編碼可能不同 ,具體看電路如何連接。
     
void delay(uint z)
{     

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

bit lcd_bz()
{   // 測試LCD忙碌狀態(tài)
 bit result;
 rs = 0;
 rw = 1;
 ep = 1;
    delay(5);
 result = (bit)(P0 & 0x80);//判斷P0^7是一還是零.屏蔽掉其它位0x80.強制轉(zhuǎn)換位bit型數(shù)據(jù)。在返回給result。
 ep = 0;
 return result; 
}
void lcd_cmd(uchar cmd)
{
   
 while(lcd_bz());
 rs = 0;//rs為1時寫入的是“數(shù)據(jù)”為0時寫入“指令”
 rw = 0;//rw為1時“讀取”為0時“寫入”
 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);          //移動光標(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ù)
{
 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); //延時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)    //松手有效 這里需要好好研究一下 可以用萬用表測量管腳電壓幫助理解
    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;   //按下退出鍵 定時器繼續(xù)工作
 
   }
}

  
void sysint() //定時器初始化
{   
 
 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)文章

主站蜘蛛池模板: 日韩高清在线观看 | 久草中文在线 | 国产视频福利一区 | 亚洲日韩视频 | 黄色网一级片 | 日日操日日干 | 欧美精品久久久 | 精品一区二区三区在线观看国产 | 国产午夜精品一区二区三区嫩草 | 91麻豆精品国产91久久久更新资源速度超快 | 久草视频网站 | 亚洲二区在线 | 男女羞羞网站 | 国产精品欧美大片 | 国产欧美在线观看 | 国产精品国产三级国产aⅴ中文 | 国产日韩欧美一区 | 涩涩视频网站在线观看 | 91视频在线 | 久久黄色 | 成人福利在线观看 | 久久综合av | 久久亚洲精品国产精品紫薇 | 久久精品91久久久久久再现 | 亚洲一区播放 | 999国产视频| 99视频免费在线 | 国产成在线观看免费视频 | 国产精久久久久久久 | 国产精品日韩欧美一区二区三区 | 亚洲视频在线观看免费 | 亚洲福利 | 免费看国产一级特黄aaaa大片 | 欧美福利视频 | 国产欧美一区二区三区国产幕精品 | 韩国理论电影在线 | 日韩精品成人一区二区三区视频 | 亚洲精品欧美 | 日韩欧美中文字幕在线观看 | 日韩在线中文字幕 | av免费网址 |