求51单片机12864和ds1307时钟程序

求51单片机12864和ds1307时钟程序,第1张

#include <reg51h>

#include <stringh>

#include "ds1302h"

#include "menuh"

#include "lcd12864h"

#define uchar unsigned char

#define uint unsigned int

sbit led=P3^7;

uchar temp,keyval;

uchar usern=0;   //用户序号

//struct mlist nuser;

uchar disdat[16];

void displaykey()

{

keyval=0xff;

P1=0xfe;

temp=P1;

temp&=0xf0;

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

delay(50);

temp=P1; 

temp=temp&0xf0;

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1;

switch (temp)

{

  case 0xee:keyval='0';break;

  case 0xde:keyval='1';break;

  case 0xbe:keyval='2';break;

  case 0x7e:keyval='3';break;

default: break;

}

}

}

while((P1&0xf0) != 0xf0);

//判断第二行键盘

P1=0xfd;

temp=P1;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(50);

temp=P1; 

temp=temp&0xf0;

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1;

switch (temp)

{

  case 0xed:keyval='4';break;

  case 0xdd:keyval='5';break;

  case 0xbd:keyval='6';break;

  case 0x7d:keyval='7';break;

default: break;

}

}

}

while((P1&0xf0) != 0xf0);

//判断第三行键盘

P1=0xfb;

temp=P1;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(50);

temp=P1; 

temp=temp&0xf0;

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1;

switch (temp)

{

  case 0xeb:keyval='8';break;

  case 0xdb:keyval='9';break;

  case 0xbb:keyval='a';break;

  case 0x7b:keyval='b';break;

default:break;

}

}

}

while((P1&0xf0) != 0xf0);

//判断第四行键盘

P1=0xf7;

temp=P1;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(50);

temp=P1; 

temp=temp&0xf0;

if(temp!=0xf0)//判断是否有键盘按下,真 为有

{

temp=P1;

switch (temp)

{

  case 0xe7:keyval='c';break;

    case 0xd7:keyval='d';break;

case 0xb7:keyval='e';break;

  case 0x77:keyval='f';break;

default:break;

}

}

}

while((P1&0xf0) != 0xf0);

}

void distime(void)

{

uchar cal="年月日";

disdat[0]='2';

disdat[1]='0';

disdat[2]='0'+TIME[6]/16;      //年

disdat[3]='0'+(TIME[6]&0x0f);

disdat[4]=cal[0];

disdat[5]=cal[1];

disdat[6]='0'+TIME[4]/16;      //月

disdat[7]='0'+(TIME[4]&0x0f);

disdat[8]=cal[2];

disdat[9]=cal[3];

disdat[10]='0'+TIME[3]/16;      //日

disdat[11]='0'+(TIME[3]&0x0f);

disdat[12]=cal[4];

disdat[13]=cal[5];

disdat[14]=0;

displaystr(1,2,disdat);

disdat[0]='0'+TIME[2]/16;      //时

disdat[1]='0'+(TIME[2]&0x0f);

disdat[2]=':';

disdat[3]='0'+TIME[1]/16;      //分

disdat[4]='0'+(TIME[1]&0x0f);

disdat[5]=':';

disdat[6]='0'+TIME[0]/16;      //秒

disdat[7]='0'+(TIME[0]&0x0f);

disdat[8]=0;

displaystr(4,4,disdat);

}

void init_timer(void)

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0x40;

}

main()

{

uchar num;

InitLCD();//初始LCD  

Ds1302Init();

init_timer();

ClearScreen(0);

delay(200);

num=0;

while(1)

{

Ds1302ReadTime();

distime();  

displaykey();

delay(200);

}

}

x00=unm/100;

xx=unm%100;

x0=xx/10;

x=xx%10;

数据分离出错

改下

x00=unm/1000; 千位

xx=unm%1000/100;百

x0=xx%100/10;十

x=xx%10;个

RST EQU P20

CS2 EQU P21

CS1 EQU P22

E EQU P23

RW EQU P24

DI EQU P25

;

ORG 0000H

LJMP MAIN

;

ORG 0050H

MAIN:

MOV SP,#60H

LCALL CHUSH

;

NIEXIAO:

LCALL YEXIAN

LJMP NIEXIAO

;

YEXIAN:

MOV DPTR,#TAB

SETB CS1

CLR CS2

MOV A,#0C0H

LCALL WING

SETB CS2

CLR CS1

MOV A,#0C0H

LCALL WING

MOV R7,#08

MOV R6,#0B8H

TU1:

SETB CS1

CLR CS2

MOV A,R6

LCALL WING

MOV A,#40H

LCALL WING

MOV R5,#64

TU2:

MOV A,#00H

MOVC A,@A+DPTR

LCALL DING

INC DPTR

DJNZ R5,TU2

TU3:

SETB CS2

CLR CS1

MOV A,R6

LCALL WING

MOV A,#40H

LCALL WING

MOV R5,#64

TU4:

MOV A,#00H

MOVC A,@A+DPTR

LCALL DING

INC DPTR

DJNZ R5,TU4

INC R6

DJNZ R7,TU1

RET

;

WING:

LCALL BUSY

CLR E

CLR RW

CLR DI

MOV P0,A

SETB E

CLR E

RET

;

DING:

LCALL BUSY

CLR E

CLR RW

SETB DI

MOV P0,A

SETB E

CLR E

RET

;

BUSY:

CLR E

SETB RW

CLR DI

MOV P0,#0FFH

SETB E

JB P07,BUSY

CLR E

RET

;

CLEAR:

MOV A,#3FH

LCALL WING

MOV R7,#08

MOV R6,#0B8H

CLE1:

MOV A,R6

LCALL WING

MOV A,#40H

LCALL WING

MOV R5,#64

CLE2:

MOV A,#00H

LCALL DING

DJNZ R5,CLE2

INC R6

DJNZ R7,CLE1

RET

;

CHUSH:

CLR RST

MOV R0,#250

DJNZ R0,$

SETB RST

SETB CS1

CLR CS2

LCALL CLEAR

SETB CS2

CLR CS1

LCALL CLEAR

RET

;

TAB:;-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\波形bmp --

;-- 宽度x高度=128x64 --

END

波形用画图画个然后用取模软件就可以咯

以上就是关于求51单片机12864和ds1307时钟程序全部的内容,包括:求51单片机12864和ds1307时钟程序、51单片机上12864显示乱码问题,由于字数限制不相关函数去掉了、51单片机12864液晶的显示双波形程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9823034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存