#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液晶的显示双波形程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)