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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的日歷

[復制鏈接]
跳轉到指定樓層
樓主
#include<reg51.h>
#include <intrins.h>
sbit rs= P3^0;
sbit rw= P3^1;
sbit ep= P3^2;
void delay(unsigned char n)         //延時n毫秒
{
while(n--);
}
bit lcd_bz()  //檢測LCD是否忙
{
  bit result;
  rs=0;
  rw=1;
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  result=(bit)(P2&0x80);
  ep=0;
  return(result);
}
void lcd_wcmd(unsigned char cmd)  //寫指令到LCD子程序
{
  while(lcd_bz());
  rs=0;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P2=cmd;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;}
void lcd_pos(unsigned char pos)          //寫顯示位置子程序
{
  lcd_wcmd(pos|0x80);
}
void lcd_wdat(unsigned char dat)  //寫顯示數據到LCD子程序
{
while(lcd_bz());
rs=1;
rw=0;
ep=0;
P2=dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
void lcd_init()           //LCD初始化子程序
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x0c);
delay(1);
lcd_wcmd(0x06);
delay(1);
lcd_wcmd(0x01);
delay(1);
}
#include<reg51.h>
sbit IO=P3^5;
sbit CLK=P3^4;
sbit RST=P3^3;
void writebyte(unsigned char Data) //寫數據到1302程序
{
        unsigned char i;
        for(i=8;i>0;i--)
        {
                Data>>=1;
                IO=CY;
                CLK=1;
                CLK=0;
        }
}
unsigned char readbyte()         //讀數據
{
        unsigned char i,t=0;
                for(i=0;i<8;i++)
        {
                CLK=0;
                if(IO!=0)
                t|=(1<<i);
                CLK=1;
        }       
        return t;
}
void write(unsigned char address,unsigned char DATA) //寫地址,寫數據
{
        RST=0;
        CLK=0;
        RST=1;
        writebyte(address);
        writebyte(DATA);
        CLK=1;
        RST=0;
}
unsigned char read(unsigned char address)          //讀某地址的數據
{
        unsigned char DATA;
        RST=0;
        CLK=0;
        RST=1;
        writebyte(address);
        DATA=readbyte();
        CLK=1;
        RST=0;
        return DATA;
}
void gettime(unsigned char timedata[])          //讀取時間
{
        unsigned char i;
        unsigned char address=0x81;
        for(i=0;i<7;i++)
        {
                timedata[i]=read(address);
                address+=2;
        }
}
void settime(unsigned char timedata[])                //設置時間
{
        unsigned char i;
        unsigned char address=0x80;
        write(0x8e,0x00);
        for(i=0;i<7;i++)
        {
                write(address,timedata[i]);
                address+=2;
        }
        write(0x8e,0x80);

}

#include<reg51.h>
sbit DQ=P0^7;
int k=1;
void delay2(unsigned char us)  //延時
{
        while(us--);
}
bit init(void)                   //初始化
{
        bit x=0;
        DQ=1;
        delay2(8);
        DQ=0;
        delay2(80);
        DQ=1;
        delay2(14);
        x=DQ;
        delay2(20);
        return ~x;

}
unsigned char read2(void)           //讀數據
{
        unsigned char i,d=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                d>>=1;
                DQ=1;
                delay2(1);
                if(DQ)
                d|=0x80;
                delay2(4);
        }
        return(d);
}
void write2(unsigned char d)           //寫數據
{
        unsigned char i;
        for(i=8;i>0;i--)
        {
                DQ=0;
                DQ=d&0x01;
                delay2(5);
                DQ=1;
                d>>=1;
        }
}
unsigned int readt(void)        //讀溫度
{        float tt;
        unsigned char tl,th;
        unsigned int t=0;
        init();
        write2(0xCC);
        write2(0x44);
        init();
        write2(0xCC);
        write2(0xBE);
        tl=read2();
        th=read2();
        t=th;
        t=(t<<8)+tl;
        if(t&0x8000)
        {
                k=0;
                t=~t;
                t++;               
        }
        else k=1;       
        tt=t*0.0625;  
    t=tt*10+0.5;
        return t;               
}

#include<reg51.h>
#define Adjust(Item,Max,Min)do{unsigned char temp;temp=(Item>>4)*10;temp+=Item&0x0f;if(++temp==Max)temp=Min;Item=temp/10*16;Item+=temp%10;}while(0)
sbit K1=P3^6;
sbit K2=P3^7;
unsigned char code du[]={0x10,6,9,8,8,9,6,0};
unsigned char code year[]={8,31,2,15,10,31,2,0};
unsigned char code mouth[]={15,9,15,9,15,9,19,0};
unsigned char code day[]={15,9,9,15,9,9,15,0};
unsigned char s,c;
bit f;
unsigned char datatime[7];
unsigned char displaybuffer[32];
unsigned char week[7][3]={"SUN","MON","TUS","WED","THR","FRI","SAT"};
unsigned int t;
extern void gettime(unsigned char *);
extern void settime(unsigned char *);
extern void lcd_init();
extern void lcd_wdat(unsigned char);
extern void lcd_wcmd(unsigned char);
extern void delay(unsigned char);
extern unsigned int readt(void);
extern int k;
void display()
{       
        unsigned char i;
        displaybuffer[0]='0'+2;
        displaybuffer[1]='0'+0;
        displaybuffer[2]='0'+datatime[6]/16;
        displaybuffer[3]='0'+datatime[6]%16;
        displaybuffer[4]=1;
        displaybuffer[5]='0'+datatime[4]/16;
        displaybuffer[6]='0'+datatime[4]%16;
        displaybuffer[7]=2;
        displaybuffer[8]='0'+datatime[3]/16;
        displaybuffer[9]='0'+datatime[3]%16;
        displaybuffer[10]=3;
        displaybuffer[11]=' ';
        displaybuffer[12]=week[datatime[5]-1][0];
        displaybuffer[13]=week[datatime[5]-1][1];
        displaybuffer[14]=week[datatime[5]-1][2];
        displaybuffer[15]=' ';
        displaybuffer[16]='0'+datatime[2]/16;
        displaybuffer[17]='0'+datatime[2]%16;
        displaybuffer[18]=':';
        displaybuffer[19]='0'+datatime[1]/16;
        displaybuffer[20]='0'+datatime[1]%16;
        displaybuffer[21]=':';
        displaybuffer[22]='0'+datatime[0]/16;
        displaybuffer[23]='0'+datatime[0]%16;
        displaybuffer[24]=' ';
        if(s&&f)
        {
                if(s==1)
                        displaybuffer[0]=displaybuffer[1]=displaybuffer[2]=displaybuffer[3]=' ';       
                else if(s==2)
                        displaybuffer[5]=displaybuffer[6]=' ';
                else if(s==3)
                        displaybuffer[8]=displaybuffer[9]=' ';
                else if(s==4)
                        displaybuffer[12]=displaybuffer[13]=displaybuffer[14]=' ';
                else if(s==5)
                        displaybuffer[16]=displaybuffer[17]=' ';
                else if(s==6)
                        displaybuffer[19]=displaybuffer[20]=' ';       
                else if(s==7)
                        displaybuffer[22]=displaybuffer[23]=' ';                               
        }
        displaybuffer[25]=' ';
        displaybuffer[26]=displaybuffer[27]=' ';
        displaybuffer[28]='0'+t%100/10;
        displaybuffer[29]='.';
        displaybuffer[30]='0'+t%10;
        displaybuffer[31]=0x00;

        if(!k)
        {
                displaybuffer[25]='-';               
        }
       
        if(t/1000)
                displaybuffer[26]='0'+t/1000;
        if(t/100)
                displaybuffer[27]='0'+t%1000/100;
        lcd_wcmd(0x80);
        for(i=0;i<16;i++)
                lcd_wdat(displaybuffer[i]);
        lcd_wcmd(0xC0);
        for(;i<32;i++)
                lcd_wdat(displaybuffer[i]);
}
void delayms(unsigned char n)         
{
unsigned char i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++);
}
void key()
{
        if(K1)
        return;
        delayms(20);
        if(K1)
        return;
        if(++s==8)
        s=0;
        while(!K1);
}
void key2()
{
        if(K2)
        return;
        delayms(20);
        if(K2)
        return;
        switch(s)
        {
                case 1:                Adjust(datatime[6],100,0);
                                break;
                case 2:                Adjust(datatime[4],13,1);
                                break;
                case 3:                Adjust(datatime[3],32,1);
                                break;
                case 4:                Adjust(datatime[5],8,1);
                                break;
                case 5:                Adjust(datatime[2],24,0);
                                break;
                case 6:                Adjust(datatime[1],60,0);
                                break;
                case 7:                datatime[0]=0;
                                break;
        }
        settime(datatime);
        while(!K2);
}
void main()
{
        unsigned char i;
        lcd_init();
        delay(100);

        for(i=0;i<32;i++)
        {lcd_wcmd(0x40+i),
        lcd_wdat(du[i]); }
        TMOD=1;
        ET0=1;
        EA=1;
        TR0=1;
        while(1)
        {
                key();
                key2();
        }
}
void t0s() interrupt 1
{
        TH0=15536/256;
        TL0=15536%256;
        if(++c==5)
        {
                c=0;
                f=~f;
                gettime(datatime);
                t=readt();
                display();
        }
}


L@QS7[7NKCLRC$H}XDVT$~O.png (17.71 KB, 下載次數: 47)

L@QS7[7NKCLRC$H}XDVT$~O.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合国产 | 天堂综合网 | 国产精品揄拍一区二区 | 日韩久久久久久 | 久草视频观看 | 欧美爱爱视频网站 | 日韩一区在线播放 | 成人精品鲁一区一区二区 | av片免费 | 午夜电影福利 | 亚洲精品久久久久中文字幕二区 | 国内精品视频在线观看 | 精品亚洲一区二区三区四区五区高 | 欧美一区二区另类 | 国产粉嫩尤物极品99综合精品 | 久久黄色精品视频 | 欧美日韩国产一区 | 精品香蕉一区二区三区 | 99精品福利视频 | 久久成人一区 | 精品三区 | 日韩成年人视频在线 | 粉嫩在线 | 亚洲精品国产综合区久久久久久久 | 亚洲在线视频 | 欧美精品一区二区三区四区五区 | 九九热精品在线 | 国产精品高潮呻吟久久久久 | 丁香婷婷久久久综合精品国产 | 精品无码久久久久久国产 | 美女一区二区在线观看 | 国产成人高清视频 | 国产福利在线小视频 | 国产高清免费 | 国产日韩欧美一区二区 | 国产第一页在线观看 | 久久精品国产99国产精品亚洲 | 午夜性色a√在线视频观看9 | 一级黄色片免费在线观看 | 国产精品毛片久久久久久久 | 老牛影视av一区二区在线观看 |