数字时钟论文(5)

2019-05-17 17:50

64行显示的管理能力,该指令中L5~L0为显示起始行的地址,取值在0~3FH(1~64行)范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。

4)页面地址设置

1 0 1 1 1 P2 P1 P0 该指令设置了页面地址—X地址寄存器的内容。LCM将显示存储器分成8页,指令代码中P2~P0就是要确定当前所要选择的页面地址,取值范围为0~7H,代表第1~8页。该指令规定了以后的读/写操作将在哪一个页面上进行

5)列地址设置

0 1 C5 C4 C3 C2 C1 C0 该指令设置了Y地址数计数器的内容,LCM通过CS的选择分别具有64列显示的管理能力,C5~C0=0~3FH(1~64)代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。

6)写显示数据

该操作将8位数据写入先前已确定的显示存储器的单元内。操作完成后列地址计数器自动加一。

页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。

③接口电路

21

6.总图 (1)原理图

(2)PCB图

22

三软件方案

1.流程图

2.程序 (1)主程序

#include #include\ // 定义变量和子程序 #include\// 12864显示 #include\ // ds1302时钟

/********************主函数************************/ main() { Init1302(); InitLCD(); Inti_main(); while(1) { adc(); donetime(); ShowTime();

23

key(); Showniao(); show(); } }

/*********************按键处理***********************/ void key() {

/******************时间调整**************************/ if(k1==0&&(num==0||num==3)) {

k1_time++; if(k1_time==10||k1_time?==0) { vlu=(vlu+1)%7; switch (vlu) { case 0:flag_WEE=0;break; case 1:flag_YEA=1;break; case 2:flag_MON=1;flag_YEA=0;break; case 3:flag_DAY=1;flag_MON=0;break; case 4:flag_HOU=1;flag_DAY=0;break; case 5:flag_MIN=1;flag_HOU=0;break; case 6:flag_WEE=1;flag_MIN=0;break; default:break; } } }

else k1_time=0;

/******************时间++**************************/ if(k2==0) {

k2_time++; if(k2_time==8||k2_time==0) { if(vlu!=0) { switch (vlu) { case 1:year++;if(year>=100)year=0;break; case 2:month++;if(month>=13)month=0;break; case

3:day++;if(runnian()==0&&day>=ping_tian[month])day=0;

if(runnian()==1&&day>=run_tian[month])day=0; break; case 4:hour++;if(hour>=24)hour=0;break; case 5:minute++;if(minute>=60)minute=0;break; case 6:week++;if(week>=8)week=1;break; default:break; } SetTime(); } if(num!=0&&num!=3) { switch(num) { case 1:shi++;if(shi>=24)shi=0;break; case 2:fen++;if(fen>=60)fen=0;break; } } } }

else k2_time=0;

/*****************时间显示**************************/ void ShowTime() {

24

ShowSecond(); ShowMinute(); ShowHour(); Showweek(); ShowDay(); ShowMonth(); ShowYear(); }

/*****************闹钟显示***********************/ void Showniao() { if((!flag_SHI||half_s)&&flag_NIAO) { ShowASC(6,64,shi/10+0x30); ShowASC(6,72,shi+0x30); } else { ShowASC(6,64,0x3a); ShowASC(6,72,0x3a); } if((!flag_FEN||half_s)&&flag_NIAO) { ShowASC(6,88,fen/10+0x30); ShowASC(6,96,fen+0x30); } else { ShowASC(6,88,0x3a); ShowASC(6,96,0x3a); } }

/****************判断2000-2099中的闰年*******************/ bit runnian(void) { if(year%4==0) flag_run=1; else flag_run=0; return flag_run; }

/****************温度显示***************************/ void adc(void) { uint adc_data; adc_data=P1; adc_data=adc_data*10/51; ShowASC(0,80,adc_data/10+0x30); ShowASC(0,88,adc_data+0x30); }

/*****************初始化*************************/ void Inti_main(void) { EA=1; TMOD=0x01; TH0=-50000/256; TL0=-50000%6; ET0=1; TR0=1; }

/*****************闹钟铃声*************************/ void show(void) {

if(hour==shi&&minute==fen&&Ms50==9&&niao_hao)

25


数字时钟论文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011高考数学复习资料汇编:第2单元 函数、导数(真题解析+最新

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

马上注册会员

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