基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx

上传人:b****6 文档编号:17626709 上传时间:2022-12-07 格式:DOCX 页数:14 大小:64.64KB
下载 相关 举报
基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx_第1页
第1页 / 共14页
基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx_第2页
第2页 / 共14页
基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx_第3页
第3页 / 共14页
基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx_第4页
第4页 / 共14页
基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx

《基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

基于51单片机双机通信的数字时钟测试仿真版Word文件下载.docx

ucharModeFlag;

//模式标志

bitFLICKERFLAG;

//闪烁标志

//---------函数申明-----------

voidHourSet(void);

//小时设置

voidMinSet(void);

//分钟设置

voidDisp(void);

//显示函数

voidTimer0(void);

//定时器0

voiddelay(uchart);

//延时

voidUART_Init(void);

//串口初始化

voidUART_SendReceive(void);

//串口发送接收

//-----------------------

voidmain(void)

{

UART_Init();

TMOD|=0x01;

//定时器0工作方式1定时器1工作方式0

EA=1;

//开总中断

ET0=1;

//开定时器0中断

TH0=(65536-50000)/256;

//设定定时器0初始值

TL0=(65536-50000)%256;

TR0=1;

//开定时器0

ModeFlag=0xff;

FLICKERFLAG=1;

m=0;

n=0;

for(;

;

{

if(KeyMode==0)

{

while(!

KeyMode)//等待按键释放

{

n=0;

Disp();

}

if(ModeFlag==0xff)

ModeFlag=0;

FLICKERFLAG=1;

elseif(ModeFlag==0)

ModeFlag=1;

elseif(ModeFlag==1)

{

ModeFlag=0xff;

m=0;

}

if(ModeFlag==0)HourSet();

//设置小时

elseif(ModeFlag==1)MinSet();

//设置分钟

Disp();

//显示

if(ModeFlag==0xff)UART_SendReceive();

//工作状态串口发送接收

}

}

voidDisp(void)

ucharH1,H2,M1,M2;

H1=Hour/10;

H2=Hour%10;

M1=Min/10;

M2=Min%10;

//----工作状态显示---------------

if(ModeFlag==0xff)

{

P3=0x1f;

P2=table[H1];

delay

(1);

P3=0x2f;

P2=table[H2];

if(!

FLICKERFLAG)//秒钟显示

P2=table[10];

delay

(1);

P3=0x4f;

P2=table[M1];

P3=0x8f;

P2=table[M2];

}

//----设置状态显示----------------

if(ModeFlag==0)//小时

{

FLICKERFLAG)

P3=0x1f;

P2=table[H1];

P3=0x2f;

P2=table[H2];

elseif(ModeFlag==1)//分钟

if(!

P3=0x4f;

P2=table[M1];

delay

(1);

P3=0x8f;

P2=table[M2];

}

voidHourSet(void)

if(Inc==0)//加

while(Inc==0)//等待按键释放

FLICKERFLAG=0;

if(Hour==23)Hour=0;

elseHour++;

if(Dec==0)//减

while(Dec==0)//等待按键释放

if(Hour==0)Hour=23;

elseHour--;

voidMinSet(void)

while(Inc==0)

if(Min==59)Min=0;

elseMin++;

while(Dec==0)

if(Min==0)Min=59;

elseMin--;

//50MS定时器中断一次因软件模拟时钟有误差,根据实际调试发现40MS初始值走时比较准确

voidTimer0(void)interrupt1

TH0=(65536-40000)/256;

//重装初值

TL0=(65536-40000)%256;

m++;

if(m==20)//20*50MS==1S

m=0;

Sec++;

if(Sec==60)

Sec=0;

Min++;

if(Min==60)

{

Min=0;

Hour++;

if(Hour==24)

{

Hour=0;

Min=0;

Sec=0;

}

}

n++;

if(n==10)//10*50MS==500MS

n=0;

FLICKERFLAG=~FLICKERFLAG;

voiddelay(uchart)

ucharn;

ucharT;

for(n=0;

n<

t;

n++)

T=70;

while(T!

=0)T--;

voidUART_Init(void)

TMOD=0x20;

//定时器1工作方式2

TH1=0xfd;

//波特率9600

TL1=0xfd;

SCON=0x50;

//设置串口工作方式1,允许接收

PCON=0x00;

TR1=1;

voidUART_SendReceive(void)

//--甲机发送数据给乙机--------------

do{

SBUF=Hour;

TI);

TI=0;

SBUF=Min;

SBUF=Sec;

RI);

//接收

RI=0;

}while((SBUF^0xff)!

=0);

乙机(液晶显示)程序如下:

/***引脚定义****/

sbitRS=P3^5;

sbitRW=P3^6;

sbitEN=P3^7;

//--------数组初始化------------

ucharcodetable[]="

ILIKEMCU"

ucharcodetable1[]="

"

ucharcodetable2[]={'

0'

'

1'

2'

3'

4'

5'

6'

7'

8'

9'

};

ucharcodetable3[]="

2012-07-28"

ucharidatatimeBuff[3];

voiddelay(uinttime)

{//延时

uinti;

for(i=0;

i<

time;

i++)

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

while(!

TF0);

TF0=0;

TR0=0;

voidwrite_com(uchartemp)

{//写指令

EN=0;

RS=0;

RW=0;

P2=temp;

delay(5);

EN=1;

voidwrite_data(uchartemp)

{//写数据

RS=1;

voidLCD_Init(void)

{//液晶初始化

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

{//串口初始化

TMOD|=0x20;

//定时器工作方式2

TH1=0xfd;

//波特率为9600

TL1=0xfd;

//串口工作方式1

ES=1;

//开串口中断

//开定时器

voidUART_SendReceive()interrupt4

{//串口发送接收

staticuchari=0;

RI=0;

if(i>

2)i=0;

timeBuff[i++]=SBUF;

if(i==2)

{//接收完毕,发送反馈信号

SBUF=0xff;

while(!

TI=0;

//--------------------------------

voidmain()

uchari;

TMOD=0x01;

LCD_Init();

//---------滚屏----------------

write_com(0x80+0x10);

10;

write_data(table[i]);

write_com(0x80+0x50);

13;

write_data(table1[i]);

16;

write_com(0x1c);

delay(100);

//--------------------------

write_com(0x80+0x43);

write_data(table3[i]);

write_com(0x80+0x04);

//设置地址

write_data(table2[timeBuff[0]/10]);

write_data(table2[timeBuff[0]%10]);

write_data('

:

'

);

write_data(table2[timeBuff[1]/10]);

write_data(table2[timeBuff[1]%10]);

write_data(table2[timeBuff[2]/10]);

write_data(table2[timeBuff[2]%10]);

}

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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