倒计时LCD显示程序

2020-03-26 19:39

倒计时显示程序

程序:

#include //52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义 #include

#define uchar unsigned char //将unsigned char定义为uchar,简化输写。提高编程速度

#define uint unsigned int //将unsigned char定义为uint,简化输写。提高编程速度

sbit lcdrs=P1^0; //数据命令选择控制 sbit lcdrw=P1^1; //读/写选择控制 sbit lcden=P1^2; //使能信号

sbit SCL2=P1^3; //SCL2定义为P1口的第3位脚,连接DS1302SCL和ADC0831SCL脚

sbit SDA2=P1^4; //SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚

sbit RST = P1^5; // DS1302片选脚

sbit H1=P0^4; //高四位分别对应P04-P07 sbit H2=P0^5; sbit H3=P0^6; sbit H4=P0^7; sbit D=P1^7;

unsigned char l_tmpdate[8]={0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0}; unsigned char l_tmpdisplay[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0}; code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

uchar t0[]=%uchar t1[]=%uchar wendu[]=\

uchar shi,ge;

uchar nian,yue,ri,shi,fen; uchar key,num; long number; uchar j;

uchar flag,m,n;

uchar qian2,bai2,shi2,ge2; void delay1(uchar z) {

uchar x,y;

for(x=1000;x>1;x--) for(y=z;y>1;y--); }

void delay(uchar z) {

uchar x,y;

for(x=1000;x>1;x--) for(y=z;y>1;y--); }

void write_com(uchar com) {

lcdrs=0; P2=com; delay1(5); lcden=1; delay1(5); lcden=0; }

void write_date(uchar date) {

lcdrs=1; P2=date; delay1(5); lcden=1; delay1(5); lcden=0; }

void init_lcd() {

uchar i; lcden=0; lcdrw=0;

write_com(0x38); write_com(0x01);

write_com(0x0c); write_com(0x06);

write_com(0x80); for(i=0;i<16;i++) {

write_date(t0[i]); delay(0); }

write_com(0x80+0x40); for(i=0;i<16;i++) {

write_date(t1[i]); delay(0); } }

/**************************DS1302*************************************/

void Write_Ds1302_Byte(unsigned char temp) {

unsigned char i;

for (i=0;i<8;i++) //循环8次 写入数据 {

SCL2=0;

SDA2=temp&0x01; //每次传输低字节 temp>>=1; //右移一位 SCL2=1; } }

/****************************************************************************/

void Write_Ds1302( unsigned char address,unsigned char dat ) {

RST=0; _nop_(); SCL2=0; _nop_(); RST=1; _nop_(); //启动

Write_Ds1302_Byte(address); //发送地址

Write_Ds1302_Byte(dat); //发送数据 RST=0; //恢复 }

/****************************************************************************/

unsigned char Read_Ds1302 ( unsigned char address ) {

unsigned char i,temp=0x00; RST=0; _nop_(); SCL2=0; _nop_(); RST=1; _nop_();

Write_Ds1302_Byte(address);

for (i=0;i<8;i++) //循环8次 读取数据 {

if(SDA2)

temp|=0x80; //每次传输低字节 SCL2=0;

temp>>=1; //右移一位 SCL2=1; }

RST=0;

_nop_(); //以下为DS1302复位的稳定时间 RST=0; SCL2=0; _nop_(); SCL2=1; _nop_(); SDA2=0; _nop_(); SDA2=1; _nop_();

return (temp); //返回 }

/*读取 日历*/

void Read_RTC(void) {

unsigned char i,*p;

p=read_rtc_address; //地址传递

for(i=0;i<7;i++) //分7次读取 年月日时分秒星期

{

l_tmpdate[i]=Read_Ds1302(*p); p++; } }

/*设定 日历*/

void Set_RTC(void) {

unsigned char i,*p,tmp; for(i=0;i<7;i++){

tmp=l_tmpdate[i]/10;

l_tmpdate[i]=l_tmpdate[i]; l_tmpdate[i]=l_tmpdate[i]+tmp*16; }

Write_Ds1302(0x8e,0x00);

p=write_rtc_address; //传地址

for(i=0;i<7;i++) //7次写入 年月日时分秒星期 {

Write_Ds1302(*p,l_tmpdate[i]); p++; }

Write_Ds1302(0x80,0x00); }

void jiaoshi() {

switch(j) {

case 0:break;

case 1:{nian=num/10*16+num;

Write_Ds1302(0x8c,nian);//年 break;}

case 2:{yue=num/10*16+num;

Write_Ds1302(0x88,yue); //月 break;}

case 3:{ri=num/10*16+num;

Write_Ds1302(0x86,ri); //日 break;}

case 4:{shi=num/10*16+num;


倒计时LCD显示程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安徽省保健养生会所名录295家

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: