时钟的时钟线引脚*/

sbit T_IO=P2^1; /* 实时时钟的数据线*/

sbit T_RST=P2^2; /* 实时时钟的复位线引脚*/

uchar bdata datbyte;

sbit datbyte0=datbyte^0;

sbit datbyte7=datbyte^7;

/*----------键盘相关声明-------------------------------------*/

sbit key=P1^0; //功能键

sbit key1=P1^1; //只有加1键

sbit key2=P1^2;

uchar sum,keyflag=0; //调用时,分,秒,标志,调用键盘处理标志.

/*--------------以下为LCD12864相关函数--------------------------*/

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

函数名称:void delay1ms(uint x)

函数功能: 延时1MS

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

void delay1ms(uint x)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

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

函数名称:void w_12864byte(uchar byte)

函数功能: 写字节

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

void w_12864byte(uchar byte)

{

uchar i;

for(i=0;i<8;i++)

{

sck=0;

byte<<=1;

sid=CY;

sck=1;

}

}

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

函数名称:uchar r_12864byte(void)

函数功能: 读字节

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

uchar r_12864byte(void)

{

uchar i,temp1,temp2;

temp1 = 0;

temp2 = 0;

for(i=0;i<8;i++)

{

temp1=temp1<<1;

sck = 0;

sck = 1;

sck = 0;

if(sid) temp1++;

}

for(i=0;i<8;i++)

{

temp2=temp2<<1;

sck = 0;

sck = 1;

sck = 0;

if(sid) temp2++;

}

return ((0xf0&temp1)+(0x0f&temp2));

}

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

函数名称:void c_12864busy( void )

函数功能: 检测忙函数

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

void c_12864busy( void )

{

do

w_12864byte(0xfc); //11111,RW(1),RS(0),0

while(0x80&r_12864byte());

}

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

函数名称:void w_12864(bit dat_com,uchar byt)

函数功能: 写入函数

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

void w_12864(bit dat_com,uchar byt)

{

uchar temp;

if(dat_com==0) //为零,写入指令

temp=0xf8; //11111,RS(0),RW(0),0

else //否则,写入数据

temp=0xfa; //11111,RS(1),RW(0),0

cs=1;

c_12864busy();

w_12864byte(temp);

w_12864byte(byt&0xf0); //写入高四位

w_12864byte(byt<<4); //写入低四位

cs=0;

}

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

函数名称:void init_12864(void)

函数功能:初始化12864

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

void init_12864(void)

{

w_12864(com,0x30); //基本指令功能.

w_12864(com,0x0c); //显示打开,关光标,反白关.

w_12864(com,0x01); //清屏指令.

w_12864(com,0x06); //AC自动加一

}

/*----------------以下为DS1302相关函数-------------------------*/

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

函数名称:void w_1302byte(uchar date)

函数功能:写一个字节(上升沿)

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

void w_1302byte(uchar date)

{ uchar i;

datbyte=date;

for(i=0;i<8;i++)

{ T_IO=datbyte0; //写最低位

T_CLK=0;

T_CLK=1;

datbyte>>=1;

}

}

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

函数名称:uchar r_1302byte(void)

函数功能:读一个字节(下降沿)

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

uchar r_1302byte(void)

{ uchar i;

datbyte=0;

for(i=0;i<8;i++)

{ datbyte7=T_IO; //读最低位

T_CLK=1;

T_CLK=0;

datbyte>>=1;

}

return(datbyte);

}

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

函数名称:void write_1302(uchar addr,uchar date)

函数功能: 指定位置写数据

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

void write_1302(uchar addr,uchar date)

{ T_RST=0;

T_CLK=0;

T_RST=1;

w_1302byte(addr);

w_1302byte(date);

T_CLK=0;

T_RST=0;

}

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

函数名称:uchar read_1302(uchar addr)

函数功能: 指定位置读数据

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

uchar read_1302(uchar addr)

{ uchar dat1,dat2,temp;

T_RST=0;

T_CLK=0;

T_RST=1;

w_1302byte(addr);

temp=r_1302byte();

T_RST=0;

T_CLK=0;

dat1=temp/16;

dat2=temp%16;

temp=dat1*10+dat2;

return(temp);

}

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

函数名称:void init_1302(void)

函数功能: 初始化

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

void init_1302(void)

{ uchar i;

uchar addr=0x80;

write_1302(0x8e,0x00);

for(i=0;i<7;i++)

{

write_1302(addr,TAB_1302);

addr+=2;

}

write_1302(0x8e,0x80);

}

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

函数名称:void get_1302(void)

功能说明:读取DS1302时钟信息.

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

void get_1302(void)

{ uchar i,addr=0x81;

for(i=0;i<7;i++)

{ TAB_1302=read_1302(addr);

addr+=2;

}

}

/*---------------以下为显示相关函数--------------------------*/

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

函数名称: void fenli(uchar x,uchar y,uchar val)

功能描述: 指定位置写入数据

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

void fenli(uchar x,uchar y,uchar val)

{ uchar ge,shi,addr,i=0;

if(val==5)//这里把星期数字显示的转换为中文

{

w_12864(com,0x88+2);

for(i=0;i<2;i++)

{ //一个汉字写两次

if(TAB_1302[5]==0)w_12864(dat,TAB_XQ);

if(TAB_1302[5]==1)w_12864(dat,TAB_XQ[2+i]); //

if(TAB_1302[5]==2)w_12864(dat,TAB_XQ[3+i]); //!!??星期三显示没规律,不知咋回事.

if(TAB_1302[5]==3)w_12864(dat,TAB_XQ[5+i]);

if(TAB_1302[5]==4)w_12864(dat,TAB_XQ[7+i]);

if(TAB_1302[5]==5)w_12864(dat,TAB_XQ[9+i]);

if(TAB_1302[5]==6)w_12864(dat,TAB_XQ[11+i]);

}

}

else

{

shi=TAB_1302[val]/10;//分离十位

ge=TAB_1302[val]%10;

if(x==1)x=0x80;

if(x==2)x=0x90;

if(x==3)x=0x88;

if(x==4)x=0x98;

addr=x+y;

w_12864(com,addr);//指定位置

w_12864(dat,0x30+shi);//写入

w_12864(dat,0x30+ge);

}

}

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

函数名称:void display(void)

功能描述: 显示函数

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

void display(void)

{ get_1302(); //读1302

fenli(3,7,0); //读秒

fenli(3,5,1); //读分

fenli(3,3,2); //读时

fenli(2,5,3); //读日

fenli(2,3,4); //读月

fenli(3,2,5); //读星期

fenli(2,1,6); //读年

}

/*---------------按键处理相关函数--------------------------*/

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

函数名称:void scanner()

功能描述: 按键函数

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

void scanner()

{ uchar i,j;

if(!key) //功能键按下

{ delay1ms(500); //延时500MS

if(!key) //还按下,退出时间调整

{ keyflag=0; //标志位为0

sum=0; //清0

w_12864(com,0x0c);//清闪烁

for(i=0;i<7;i++)//十进制转十六进制

{ j=TAB_1302/10;

TAB_1302=TAB_1302%10;

TAB_1302=TAB_1302+16*j;

}

init_1302(); //写入1302

while(!key); //等待释放

delay1ms(10); //延时消抖

}

else //500MS内放开

{ keyflag=1; //标志为1,进行时间调整

sum++; //功能键加1

if(sum==8)

sum=0;

switch(sum)

{ case 1: //

{ w_12864(com,0x98+7);

w_12864(com,0x0f);

break;

}

case 2: //为2,年闪烁

w_12864(com,0x90+1);

break;

case 3: //月闪烁

w_12864(com,0x90+3);

break;

case 4: //日闪烁

w_12864(com,0x90+5);

break;

case 5: //分闪烁

w_12864(com,0x88+5);

break;

case 6: //时闪烁

w_12864(com,0x88+3);

break;

}

}

}

if(sum) //功能键按下

{

if(!key1)

{ delay1ms(10);

if(!key1)

{ while(!key1);//等待加1键释放

delay1ms(10);

if(sum==1)

{ //备用

}

if(sum==2)

{ TAB_1302[6]++;

if(TAB_1302[6]==100)

TAB_1302[6]=0;

fenli(2,1,6);

w_12864(com,0x90+1);//闪烁归位

}

if(sum==3)

{ TAB_1302[4]++;

if(TAB_1302[4]==13)

TAB_1302[4]=1;

fenli(2,3,4);

w_12864(com,0x90+3);

}

if(sum==4)

{ TAB_1302[3]++;

if(TAB_1302[3]==32)

TAB_1302[3]=1;

fenli(2,5,3);

w_12864(com,0x90+5);

}

if(sum==5)

{ TAB_1302[1]++;

if(TAB_1302[1]==60)

TAB_1302[1]=0;

fenli(3,5,1);

w_12864(com,0x88+5);

}

if(sum==6)

{ TAB_1302[2]++;

if(TAB_1302[2]==24)

TAB_1302[2]=0;

fenli(3,3,2);

w_12864(com,0x88+3);

}

}

}

if(sum) //功能键按下

{

if(!key2)

{ delay1ms(10);

if(!key2)

{ while(!key2);//等待加1键释放

delay1ms(10);

if(sum==1)

{

}

if(sum==2)

{ TAB_1302[6]--;

if(TAB_1302[6]==0)

TAB_1302[6]=100;

fenli(2,1,6);

w_12864(com,0x90+1);//闪烁归位

}

if(sum==3)

{ TAB_1302[4]--;

if(TAB_1302[4]==0)

TAB_1302[4]=12;

fenli(2,3,4);

w_12864(com,0x90+3);

}

if(sum==4)

{ TAB_1302[3]--;

if(TAB_1302[3]==0)

TAB_1302[3]=31;

fenli(2,5,3);

w_12864(com,0x90+5);

}

if(sum==5)

{ TAB_1302[1]--;

if(TAB_1302[1]==0)

TAB_1302[1]=60;

fenli(3,5,1);

w_12864(com,0x88+5);

}

if(sum==6)

{ TAB_1302[2]--;

if(TAB_1302[2]==0)

TAB_1302[2]=24;

fenli(3,3,2);

w_12864(com,0x88+3);

}

}

}

}

}

}

//=============================================================

void init(void)

{

uchar i;

init_12864();

init_1302();

while(TAB1!='\0')

{

w_12864(dat,TAB1);

i++;

}

i=0;

w_12864(com,0x90);

while(TAB2!='\0')

{

w_12864(dat,TAB2);

i++;

}

i=0;

w_12864(com,0x88);

while(TAB3!='\0')

{

w_12864(dat,TAB3);

i++;

}

i=0;

w_12864(com,0x98);

}

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

函数名称:主函数

函数功能:

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

main()

{

init();

while(1)

{

scanner(); //检测键盘

if(!keyflag) //标志为0

{ display(); //调用显示

delay1ms(500);

}

}

}

0

万年历程序加入农历c语言,大神们日历程序里面怎么加农历(附程序)相关推荐

  1. 用c语言求元素移动的次数T(n),悬赏!求C语言大神帮忙,写一个数字推盘游戏的程序(N-puzzle) 具体的要求看图片...

    满意答案 zcloj 2013.10.14 采纳率:56%    等级:12 已帮助:5505人 这是我在网上收藏在本地的数独游戏代码.看能否符合你的要求 #include int fun(int a ...

  2. Java程序员日常积累-向大神学习(三)

    前言 <Java程序员日常积累-向大神学习>系列是本人根据日常工作中碰到的问题写的一个问题记录,比较琐碎零散. 主要用于记录和忘记时可以有个地方查询.现分享给大家,这是这个系列的第三篇. ...

  3. 【任务脚本】0530更新淘宝618活动领喵币脚本,OrangeJs基于autojs全自动程序稳定运行,向大神致敬...

       公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 0530:     更新一下文章内容,除了苹果手机用户最近没有收到其他手机不能 ...

  4. python代码少的作品_原创 8行python代码展示程序员从入门到大神(或跑路)的全部状态...

    一行python代码可以做什么? 人生苦短,我用python.python的世界里无处不在的简洁和短小,往往一行代码可以实现很多有意思功能. 你敢想象你从入门python代码.网络达人.反重力怪才.爱 ...

  5. 8行python代码展示程序员从入门到大神(或跑路)的全部状态

    一行python代码可以做什么? 人生苦短,我用python.python的世界里无处不在的简洁和短小,往往一行代码可以实现很多有意思功能. 你敢想象你从入门python代码.网络达人.反重力怪才.爱 ...

  6. 饭店菜单选择c语言,求C语言大神,帮忙做一下这个题,要源代码设计实现一个餐厅点餐系统? 爱问知识人...

    求C语言大神,帮忙做一下这个题,要源代码 设计实现一个餐厅点餐系统,实现电子点餐.要求实现二级菜单: 一级菜单: 请选择: 1.点餐 2.查看已点菜品 3.添菜 求C语言大神,帮忙做一下这个题,要源代 ...

  7. php输出后以密文显示,加密解密,_求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢,加密解密 - phpStudy...

    求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢 求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢 def parserLicense(self,encCode): data = base ...

  8. 三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰

    三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰,简洁明了. 通过结构体和函数块的使用,可以使您在程序编写水平得到很大提高. ST语言是PLC后续的主流语言,是日后编程 ...

  9. .net4.0 使用低版本生成的dll, 混合模式程序集市针对V1.1.4322,无法在 4.0 运行时中加载该程序解决办法

    使用.net4.0开发DirectX,运行时报错:混合模式程序集市针对V1.1.4322,无法在 4.0 运行时中加载该程序 原因是DirectX是由.net1.1生成的,不能直接在.net4.0使用 ...

最新文章

  1. 学python好不好-学历低可以学python吗?好不好就业?
  2. POJ 3258 River Hopscotch(二分查找答案)
  3. FPGA(2)--例化语句--1位全加器
  4. android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...
  5. javascript时间函数
  6. 三码合一方法 制作QQ、微信、支付宝收款码合一
  7. OPENWRT:编译E8820V2总结
  8. 第一次用vc写的文件切割小软件_CutFile
  9. 一文述说人工智能(AI)发展史,几经沉浮!
  10. 申请公网IP实战 #华北天津联通
  11. 带省略号的比喻句_标点符号往往能引发人们的联想,例如:“省略号像一条漫长的人生道路,等着你去书写它留下的空白。”请以一种标点符号(省略号除外)为描述对象,写一个比喻句,形象地阐发某种生活道理。...
  12. 达梦数据库如何把EXCEL的数据导入到表中?
  13. js 获取当前日期的前三个月
  14. 03 day2--javascript笔记pink老师--对象
  15. txt文件字符在计算机,(35)在C盘当前文件夹下有一个已经建立好的顺序文件Alph.txt,文件内容为只含有字母的一个字符去、...
  16. Java计算连续自交杂合概率代系变化
  17. 芯片IC失效分析测试
  18. 《安富莱嵌入式周报》第227期:2021.08.23--2021.08.29
  19. Error: Your CLT does not support macOS 11.
  20. 安利一下断言利器AssertJ

热门文章

  1. Android驱动USB摄像头
  2. 在Word中插入几何画板图形的方法
  3. 阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段
  4. 自定义Counter使用 与
  5. OneNote丢失笔记分区后找回
  6. 弹球游戏关卡的实现(二)
  7. No @Intercepts annotation was found in interceptor com.example.config.MPConfig$$EnhancerBySpringCGLI
  8. [vue3+ts]方法一:使用vuex的mapState和mapGetters
  9. 晨控带您了解RFID发展历史
  10. STM32F103软件模拟SPI接口驱动ILI9486液晶屏