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

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

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

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年11月05日   【字體:
與數字中的數碼管顯示類似,

增加:

液晶初始化部分

寫命令部分

寫數據部分


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

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

#include<reg52.h>
#define  uchar unsigned char
#define  uint unsigned int
sbit rs = P2^6; //1602相應                                                      
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忙碌狀態
 bit result;
 rs = 0;
 rw = 1;
 ep = 1;
    delay(5);
 result = (bit)(P0 & 0x80);//判斷P0^7是一還是零.屏蔽掉其它位0x80.強制轉換位bit型數據。在返回給result。
 ep = 0;
 return result; 
}
void lcd_cmd(uchar cmd)
{
   
 while(lcd_bz());
 rs = 0;//rs為1時寫入的是“數據”為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 )//液晶寫數據
{
 

 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電源穩定                      
    lcd_cmd(0x38);                           
    delay(10);                                                            
    lcd_cmd(0x38);                                                       
    delay(10);                                                           
    lcd_cmd(0x38);                                                       
    delay(10);                                                            
                                                                          
    lcd_cmd(0x0c);          //顯示開,關光標                             
    delay(10);                                                            
    lcd_cmd(0x06);          //移動光標                                   
    delay(10);                                                            
    lcd_cmd(0x01);          //清除LCD的顯示內容                          
    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()  //時間顯示函數
{
 lcd_cmd(0x0c); //設置光標不顯示、不閃爍
 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); //返回無效碼
}

 


   
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;   //按下退出鍵 定時器繼續工作
 
   }
}

  
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();//函數調用
 while(1)
 {
    keyscan();//調用鍵盤掃描,
    Set_time(key);
    disptime();
          
 }
}
關閉窗口

相關文章

主站蜘蛛池模板: 一级黄色片网址 | 国产精品久久久久久婷婷天堂 | 日日夜夜草 | 区一区二在线观看 | 日韩www| h片在线播放 | 一区二区在线视频 | 日本不卡一区二区三区在线观看 | 日韩中文字幕区 | 国产在线播放av | 北条麻妃99精品青青久久 | 91精品国产欧美一区二区 | 毛片大全 | 久草青青 | 成人在线视频免费观看 | 在线成人免费视频 | 日韩精品免费 | 久久国产精品网 | 精品一区二区久久久久久久网站 | 国产成人精品一区二区 | 精品视频一区二区三区在线观看 | 成人亚洲视频 | 国产一级毛片精品完整视频版 | 福利社午夜影院 | 999精品视频 | 91久久精品一区二区三区 | 美女网站视频免费黄 | 伊人春色成人网 | 日韩精品三区 | 久久av一区 | 午夜精品一区二区三区在线视频 | 国产精品免费在线 | 国产真实乱全部视频 | 国产精品一区二区三区久久久 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产小视频自拍 | 精品视频在线播放 | 国产免费一区 | 男人天堂99 | 精品久久久久香蕉网 | 免费视频99 |