液晶显示时钟文档格式.docx

上传人:b****4 文档编号:16377409 上传时间:2022-11-23 格式:DOCX 页数:12 大小:18.13KB
下载 相关 举报
液晶显示时钟文档格式.docx_第1页
第1页 / 共12页
液晶显示时钟文档格式.docx_第2页
第2页 / 共12页
液晶显示时钟文档格式.docx_第3页
第3页 / 共12页
液晶显示时钟文档格式.docx_第4页
第4页 / 共12页
液晶显示时钟文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

液晶显示时钟文档格式.docx

《液晶显示时钟文档格式.docx》由会员分享,可在线阅读,更多相关《液晶显示时钟文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

液晶显示时钟文档格式.docx

sbiten=P3^4;

//使能信号控制端

sbitrs=P3^5;

//数据/命令选择端(H/L)

sbitrw=P3^6;

//读/写控制端(H/L)

//定义开发板上的四个独立按键所接的IO口

sbits2=P3^0;

//每按一次分加1

sbits3=P3^1;

//每按一次分减1

sbits4=P3^2;

//每按一次时加1

sbits5=P3^3;

//每按一次时减1

sbitp3_7=P3^7;

//让其置0时,s9、s13、s17、s21相当于独立按键

 

ucharcount;

//定义无符号字符型数据“count”,用于计数20次达到20*50ms=1s

uintshi,fen,miao,shis,shig,fens,feng,miaos,miaog;

//定义时、分、秒以及时、分、秒的十位和个位

/******************************I2C总线子程序*********************************/

voiddelay3()

{;

;

}

voidstart()//起始信号,SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号

{

sda=1;

delay3();

scl=1;

sda=0;

}

voidstop()//终止信号,SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。

{

voidrespons()//应答信号,每一个字节必须保证是8位长度。

数据传送时,先传送最高位(MSB),

//每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

uchari;

while((sda==1)&

&

(i<

250))i++;

scl=0;

voidinit1()

voidwrite_byte(uchardate)

uchari,temp;

temp=date;

for(i=0;

i<

8;

i++)

{

temp=temp<

<

1;

scl=0;

//只有在时钟线上的信号为低电平期间,数据才允许变化。

sda=CY;

delay3();

scl=1;

//时钟信号为高电平期间,数据线上的数据必须保持稳定

ucharread_byte()

uchari,k;

k=(k<

1)|sda;

returnk;

voiddelay4(ucharx)

uchara,b;

for(a=x;

a>

0;

a--)

for(b=100;

b>

b--);

//单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),

//发送完后释放SDA线并在SCL线上产生第9个时钟信号

//被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,

//单片机收到应答后就可以传送数据了

voidwrite_add(ucharaddress,uchardate)

start();

write_byte(0xa0);

//AT24C系列E2PROM芯片地址的固定部分为1010,开发板上的A2、A1、A0引脚接低

//电平所以形成的7位编码即为该器件的地址码a0。

respons();

write_byte(address);

write_byte(date);

stop();

//单片机先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放

//SDA线并在SCL线上产生第9个时钟信号。

被选中的存储器器件在确认是自己

//的地址后,在SDA线上产生一个应答信号作为回应。

然后,再发一个字节的

//要读出器件的存储区的首地址,收到应答后,单片机要重复一次起始信号并

//发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节

ucharread_add(ucharaddress)

uchardate;

write_byte(0xa1);

date=read_byte();

returndate;

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

//延时子程序1用于读写操作时序图上的的短暂延时

voiddelay1(uintz)

uintx,y;

for(x=z;

x>

x--)

for(y=10;

y>

y--);

//延时子程序2用于控制整屏移动速度的快慢

voiddelay2(uintz)

//写指令子程序

voidwrite_com(ucharcom)

P0=com;

//将命令传至P0口

rs=0;

//写的是命令故将其置零

en=0;

//根据写操作时序图,传命令前en=0

delay1(10);

//根据写操作时序图,延时一小会

en=1;

//en=1时开始传输命令

//延时一会待命令传完

//命令传完再将其置0

//写数据子程序

voidwrite_date(uchardate)

P0=date;

//将数据传至P0口

rs=1;

//写的是数据故将其置1

//根据写操作时序图,传数据前en=0

//en=1时开始传输数据

//延时一会待数据传完

//数据传完再将其置0

//液晶初始化子程序

voidinit()

p3_7=0;

//让其置0时,s9、s13、s17、s21相当于独立按键

P0=0;

//P0初始化为0

dula=0;

//防止将数据传到数码管

wela=0;

rw=0;

//程序牵涉写操作没有读操作,直接置0

write_com(0x38);

//设置16*2显示模式

delay1(20);

//传完命令适当延时一会

write_com(0x0c);

//设置开显示、不显示光标

delay1(20);

write_com(0x06);

//当读或写一个字符后地址指针加1,且光标加1

//write_com(0x01);

//显示清屏去掉这条指令后屏幕就不会出现闪烁现象

//显示子程序

voiddisplay()

uchara,b,c;

init();

write_com(0x80+5);

//选择数据地址指针

for(a=0;

a<

a++)//一共要显示8位,所以写八次

write_date(table1[table2[a]]);

//在第一行显示时钟

voidprocess()//时、分、秒处理子程序

table2[7]=miao%10;

table2[6]=miao/10;

table2[4]=fen%10;

table2[3]=fen/10;

table2[1]=shi%10;

table2[0]=shi/10;

//定时器中断函数,定时50ms,每隔1秒,miao++;

voidtimer0()interrupt1using1

count++;

//每50ms,count就+1

if(count==20)//当count=20时即计数到1s的时候执行if大括号内的语句

{

count=0;

miao++;

if(miao==60)

{

miao=0;

//当到60秒的时候,分+1,同时秒从0重新开始计时

fen++;

if(fen==60)

fen=0;

//当到60分的时候,时+1,同时分从0重新开始计时

shi++;

if(shi==12)

shi=0;

//当到12小时的时候,时从0重新开始计

}

}

}

TH0=0x3c;

//到了50ms后重新装入初值

TL0=0xb0;

voidkey()//按键判断子程序

if(s2==0)//判断s2是否按下键盘

delay2(100);

//延时,软件消抖

if(s2==0)//确认按键按下

fen++;

//分加1

if(fen==60)//加到60时返回0继续加

}

while(s2==0);

//等待按键放开.即每按一次只加1

if(s3==0)//判断s3是否按下键盘

{

delay2(100);

if(s3==0)//确认按键按下

{

fen--;

//分减1

if(fen==-1)//减到0时返回60继续减

fen=60;

}

while(s3==0);

if(s4==0)//判断s4是否按下键盘

if(s4==0)//确认按键按下

shi++;

//时加1

if(shi==12)//加到12时返回0继续加

shi=0;

while(s4==0);

}

if(s5==0)//判断s2是否按下键盘

if(s5==0)//确认按键按下

shi--;

//时减1

if(shi==-1)//减到0时返回12继续减

shi=12;

while(s5==0);

}

//主函数

voidmain()

init1();

miao=read_add(23);

//读秒

delay4(100);

fen=read_add(24);

//读分

shi=read_add(25);

//读时

//将矩阵键盘的这个接口一直呈低电平后s9、s13、s17、s21相当于独立按键

TMOD=0x01;

//选择T0定时器工作方式1

ET0=1;

//开中断

EA=1;

//开总中断

//设置初值,定时50ms

TR0=1;

//开启计数

while

(1)

process();

//调用时、分、秒处理子程序

key();

//调用键盘扫描子程序

display();

//调用液晶显示子程序

write_add(23,miao);

//保存秒

delay4(100);

write_add(24,fen);

//保存分

write_add(25,shi);

//保存时

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1