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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2312|回復: 0
打印 上一主題 下一主題
收起左側

時鐘萬年歷,keil,proteus仿真圖

[復制鏈接]
跳轉到指定樓層
樓主
                                                                 
關鍵代碼和注釋
//檢測1602 是否忙,如果忙,則等待,直到1602不忙為止。

sbit PLcdRS  =  P1^0 ;
sbit PLcdRW  =  P1^1 ;
sbit PLcdE   =  P2^5 ;
#define PLCDDATA  P0
void vWaitNotBusy(void)
{
        PLcdRS = 0 ;
       
        PLcdRW = 1 ;
       
        PLCDDATA = 0XFF;
       
         while (   PLCDDATA & 0x80 ) //為真,代表忙 1000 0000
        {
                _nop_();       
                PLcdE = 0 ;
                _nop_();       
                PLcdE = 1 ;       
                _nop_();
  }
}
void vLcdCommand(unsigned char ucCommand)
{
        vWaitNotBusy();
  PLcdRS = 0 ;
        PLcdRW = 0 ;
  PLCDDATA = ucCommand ;
        _nop_() ;       
        PLcdE = 1 ;
        _nop_();       
        PLcdE = 0 ;       
        _nop_() ;       
}
void vLcdData(unsigned char ucData)
{
        vWaitNotBusy();
    PLcdRS = 1 ;
        PLcdRW = 0 ;
        _nop_() ;//1us
        PLcdE = 1 ;
PLCDDATA = ucData ;
        _nop_();       
        PLcdE = 0 ;       
_nop_() ;       
}                               //需要等待液晶忙結束
void vLcdInit(void)
{
   vLcdCommand(0x38);  
   vLcdCommand(0x0C);  //0C顯示屏幕,光標不顯示,并不閃爍  
   vLcdCommand(0x06);  //        LCD模式設定,I/D=1(計數地址加1)   
   vLcdCommand(0x01);  //清除LCD的屏幕   
        #define  CLRS  0X01  //清除屏幕
        #define  CURREST 0X02  //光標復位
        #define  DISPLAY  0X0C //開啟顯示
        #define  DISPLAYCUR  0X0E //開啟顯示,并顯示光標,光標不閃爍
        #define  DISPLAYCUR  0X0F //開啟顯示,并顯示光標,光標閃爍

}
void vLcd1Char(unsigned char X,unsigned char Y,unsigned char ucChar)
{
    Y &= 1;     //目的是保證行值為0或者1   
    X &= 15;    //保證列值為0-15   0000 1111  列坐標,范圍0-15  ,
                     if(Y == 1)
                 {
                         X |= 0x40 ;
     }
      X |= 0x80;                    //指令碼為地址碼+0X80
    vLcdCommand(X);         //用命令的方式,發送一個地址,要顯示的地址????。
        //DDRAM  
       
    vLcdData(ucChar);         
}
//計算下一個要顯示的字符,地址是否在16個字符范圍內。
void vLcdString(unsigned char X,unsigned char Y,unsigned char *ucString)
{   
        while(*ucString)
        {  
                vLcd1Char(X,Y,*ucString);
          ucString ++ ;  //指令碼為地址碼+0X80
                X++;
}
}
//lcd顯示16進制數據,
void vLcdHex(unsigned char X,unsigned char Y,unsigned char ucData)
{
        unsigned char ucTemp;
        ucTemp = (ucData & 0xf0) >> 4;
        if(ucTemp >=0x0A)
        {
   ucTemp += 'A'; //x y ucdata 分別是 列,行,數據。 0x39
  }
        else
        {
                ucTemp += '0';
  }
        vLcd1Char(X,Y,ucTemp );
        ucTemp = (ucData & 0x0f);
        if(ucTemp >=0x0A)
        {
   ucTemp += 'A';
  }
        else
        {
                ucTemp += '0';
  }
         vLcd1Char(X+1,Y,ucTemp );
}
void vLcdDec(unsigned char X,unsigned char Y,unsigned char ucData)
{
        unsigned char ucTemp;
        ucTemp =  ucData /100;         
        ucTemp += '0';  
        vLcd1Char(X,Y,ucTemp );
        ucTemp =  ucData %100 /10;
        ucTemp += '0';
        vLcd1Char(X+1,Y,ucTemp );
        ucTemp =  ucData %10;         //lcd顯示10進制數據,

        ucTemp += '0';   
        vLcd1Char(X+2,Y,ucTemp );       
}
void WriteDs1302_1Byte(unsigned char  Address, unsigned char Data)
{
unsigned char i;

RST=0;
SCK=0;
RST=1;
for(i=0;i<8;i++)
        {
        SDA = Address & 0x01;
        Address>>=1;
        SCK=1;
        SCK=0;
        }
for(i=0;i<8;i++)
        {
        SDA=Data&0x01;
        Data>>=1;
        SCK=1;
        SCK=0;
        }
SCK=0;
RST=0;
}
unsigned char ReadDs1302_1Byte(unsigned char  Address)
{
unsigned char i;
unsigned char Data;
Data=0;
RST=0;
SCK=0;
RST=1;
for(i=0;i<8;i++)
        {
        SDA=Address&0x01;
        Address>>=1;
        SCK=1;
        SCK=0;
        }  
for(i=0;i<7;i++)
        {
        if(SDA==1)
        Data|=0x80;
        Data>>=1;
        SCK=1;
        SCK=0;
        }
SCK=0;
RST=0;
return Data;
}
void DS1302_Init(void)
{
WriteDs1302_1Byte(0x80,0x00);//允許時鐘運行
WriteDs1302_1Byte(0x8E,0x00);//允許寫
       
       
}






VHC9RD}W]]FLH`1VAG$%FL0.png (53.05 KB, 下載次數: 67)

VHC9RD}W]]FLH`1VAG$%FL0.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰成人免费观看 | 精品国产不卡一区二区三区 | 午夜理伦三级理论三级在线观看 | 老司机成人在线 | 免费一级片 | 国产麻豆乱码精品一区二区三区 | 日韩av电影院 | 久热m3u8 | 精品在线观看入口 | 在线视频国产一区 | 成人综合视频在线观看 | 欧美一区二区三区在线观看 | 亚洲精品一区二区在线观看 | 精品综合久久 | 国产精品久久二区 | 亚洲v日韩v综合v精品v | 99精品国自产在线观看 | 国产免费黄网 | 日本污视频 | 亚洲成人免费视频在线 | 久久av一区二区三区 | 国产成人高清 | 国产精品视频一区二区三区不卡 | 国产精品久久久久久久久免费桃花 | 91精品一区二区三区久久久久 | 亚洲精品久久久蜜桃网站 | 成人在线免费 | 成人久久久| 久久精品色欧美aⅴ一区二区 | 久久精品久久久久久 | 搞av.com | 视频二区 | 国产在线不卡 | 毛片a| 欧美日韩一区二区三区四区五区 | 精品国产乱码久久久久久蜜臀 | 国产成人免费视频网站视频社区 | 在线观看成人小视频 | 在线看91 | 国产日韩欧美在线观看 | 人妖videosex高潮另类 |