单片机通过串口通信调整时间的程序.docx
《单片机通过串口通信调整时间的程序.docx》由会员分享,可在线阅读,更多相关《单片机通过串口通信调整时间的程序.docx(5页珍藏版)》请在冰豆网上搜索。
![单片机通过串口通信调整时间的程序.docx](https://file1.bdocx.com/fileroot1/2023-3/29/956409c4-36a3-4221-8f0a-8a6ec633746b/956409c4-36a3-4221-8f0a-8a6ec633746b1.gif)
单片机通过串口通信调整时间的程序
单片机通过串口通信调整时间的程序
本程序所用的原理图下载:
点这里,单片机芯片使用的stc89c51;找到时钟部分的原理图修改为你自己的电路上的io即可.这是一整个单片机开发板的电路图其他的忽略.
/**************************通过串口通信调整时间******************************/
/**
*功能:
单片机开始上电时点阵显示倒计时3,2,1,0,然后点阵LED关闭显示
*
定时器和串口开始工作,定时器开始一秒计时,并在数码管上显示时,分,秒
*
此计时器可以通过串口发送数据调整时间,可调整时与分,当调整分钟时秒清零
*
附加功能:
当单片机收到数据时有蜂鸣器响一声作为提示
*
彩色流水灯以20毫秒的速度向左流动
*作者:
徐冉
*日期:
2013-06-15-09:
15-12:
10
*备注:
程序已经顺利通过调试
*/
/***********51hei开发板************/
/********AT89C52-RCMCU***********/
#include;
typedefunsignedintuint;
typedefunsignedcharuchar;
sbitwela=P2^7;
sbitdula=P2^6;
sbitFM=P2^3;
sbitdin=P2^0;
sbitcs=P2^1;
sbitclk=P2^2;
/************点阵LED显示取模编码表***********************/
ucharcodedis[][8]={
{0x00,0x3E,0x02,0x02,0x3E,0x02,0x02,0x3E},//'3'
{0x00,0x3E,0x02,0x02,0x3E,0x20,0x20,0x3E},//'2'
{0x00,0x18,0x38,0x08,0x08,0x08,0x08,0x3E},//'1'
{0x00,0x3C,0x24,0x24,0x24,0x24,0x24,0x3C},//'0'
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//关闭显示
};
/*****************数码管显示编码表***************************/
ucharcodetable[]={
0x3F,//"0"
0x06,//"1"
0x5B,//"2"
0x4F,//"3"
0x66,//"4"
0x6D,//"5"
0x7D,//"6"
0x07,//"7"
0x7F,//"8"
0x6F//"9"
};
ucharshi=0,fen=0,miao=0,counter=0,flag=0,j=0;
/*************点阵LED-MAX7219***********/
/***************写字节************************/
voidwrite_byte(uchardate)
{
uchari=0;
cs=0;
for(i=0;i;0;x--)
for(y=110;y>;0;y--);
}
/************串口和定时器T0初始化********************/
voidinit()
{
TMOD=0x21;//T1工作方式2,T0工作方式1
TH0=0xB8;
TL0=0x00;
TH1=0xFA;
TL1=0xFA;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
ET0=1;
}
/*************数码管显示时间************************/'
voiddisplay(ucharshi,ucharfen,ucharmiao)
{
ucharshi_s,shi_g;
ucharfen_s,fen_g;
ucharmiao_s,miao_g;
shi_s=shi/10%10;
shi_g=shi%10;
fen_s=fen/10%10;
fen_g=fen%10;
miao_s=miao/10%10;
miao_g=miao%10;
dula=1;
P0=table[shi_s];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
P0=0x00;
delayms
(1);
dula=1;
P0=table[shi_g];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
P0=0x00;
delayms
(1);
dula=1;
P0=table[fen_s];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
P0=0x00;
delayms
(1);
dula=1;
P0=table[fen_g];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
P0=0x00;
delayms
(1);
dula=1;
P0=table[miao_s];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
P0=0x00;
delayms
(1);
dula=1;
P0=table[miao_g];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
P0=0x00;
delayms
(1);
}
/*****************点阵显示程序****************/
voiddisplay_max7219()
{
ucharm,n;
for(m=0;m;=8)
{
j=0;
}
if(counter==50)
{
counter=0;
miao++;
if(miao>;=60)
{
miao=0;
fen++;
if(fen>;=60)
{
fen=0;
shi++;
if(shi>;=24)
{
shi=0;
}
}
}
}
}
/*************串口中断服务程序***********************/
voiduart_int()interrupt4
{
RI=0;
if(SBUF>;=23&&SBUF;=0&&SBUF<=23)
{
shi=SBUF;
fen=SBUF;
FM=0;
delayms(30);
FM=1;
}
flag=1;
}