51单片机利用串口改变时钟问题

问题描述

51单片机利用串口改变时钟问题
下面是我用串口改变时间的代码,但是我只会改变时、分、秒中的一个,求大神帮我改一改能够分别改时、分、秒

 #include<reg51.h>#define uint unsigned int#define uchar unsigned char uchar hourminsectemp;uchar aa;uchar code table[]={0xc00xf90xa40xb00x990x920x820xf80x800x90};                             void  delay(uint z);void  display(uchar auchar buchar cuchar duchar euchar f);void  time_change();void revdata(void) interrupt 4{        ES=0;    if(RI==1){RI=0;aa=SBUF-48;        hour=aa;    ES=1;}}void main(){         hour=0;         min=0;         sec=0;           SCON=0x50;           PCON = 0x00;         TMOD=0x21;         TH0=(65536-50000)/256;         TL0=(65536-50000)%256;           TH1=0xfd;           TL1=0xfd;         EA=1;           ES=1;         ET0=1;           ET1=0;         TR0=1;           TR1=1;           delay(50);    while(1)    {   time_change(); display(table[hour/10]table[hour%10]table[min/10]table[min%10]table[sec/10]table[sec%10]);                        }}void display(uchar auchar buchar cuchar duchar euchar f){    P1=0x01;P0=a;delay(2);    P1=0x02;P0=b;delay(2);    P1=0x08;P0=c;delay(2);    P1=0x10;P0=d;delay(2);    P1=0x40;P0=e;delay(2);    P1=0x80;P0=f;delay(2);    P1=0x04;P0=0xbf;delay(2);    P1=0x20;P0=0xbf;delay(2);}void timer0() interrupt 1{         TH0=(65536-50000)/256;         TL0=(65536-50000)%256;         temp++;}void delay(uint z){     uint jk;     for(j=z;j>0;j--)     for(k=120;k>0;k--);}void time_change(){         if(temp>=20)         {          temp=0;     sec++;          if(sec>=60)            {                 sec=0;                     min++;                     if(min>=60)                     {                             min=0;                        hour++;                             if(hour>=24)                             {                                    hour=0;                             }                      }             }          }}

解决方案

单片机通过串口通信调整时间的程序
http://www.eeworld.com.cn/mcu/2015/0429/article_19714.html

时间: 2024-09-11 03:20:30

51单片机利用串口改变时钟问题的相关文章

操作-以51单片机为核心的时钟,在LED显示器上显示当前的时间:

问题描述 以51单片机为核心的时钟,在LED显示器上显示当前的时间: 显示格式为"时时:分分:秒秒". 用4个功能键操作来设置当前时间.功能键K1-K4功能如下. ?K1-进入设置现在的时间. ?K2-设置小时(按一次,小时增1). ?K3-设置分钟(按一次,分钟增1). ?K4-确认完成设置. 程序执行后工作指示灯闪动,表示程序开始执行,LED显示"00:00:00",然后开始计时. 本题可以考虑用LCD(比如:LCD1602)来实现显示,则显示更加清楚. 解决方

51单片机实现串口收发

在大学里,我们都学过单片机,单片机什么东西最重要呢?无疑就是中断,串口,定时器,而串口,恰恰是现实中用得最多的一类.一般公司有固定的串口协议,然后工程师们根据协议来开发产品.         51单片机的串口比较简单,这里我们就直接实现一个例子,串口发送一个命令,单片机接收到后响应,会点亮LED,驱动蜂鸣器,驱动流水灯,其实这样的功能在现实开发中也经常做的.       代码如下: /* *author : Y.X.YANG *data : 2016-4-7 *version: 20160407

c语言 c++ 单片机-51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序。谢谢了

问题描述 51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序.谢谢了 51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序.谢谢了 .万分感谢... 解决方案 具体的哪个单片机?代码需要整个写好么? 解决方案二: http://zhidao.baidu.com/link?url=qpZQDUaPuGYd69ZgYe3bESTSAS7vjc0XO7puc-KtYMWVkxwtMbh5xTkWI5GbvvHT6Eb3WKFhqIfbl7HtGBGZV

51单片机串口通信-51单片机编程串口通信问题

问题描述 51单片机编程串口通信问题 #include unsigned char a[]="i love"; unsigned int b=0; void love()interrupt 4 {if(TI==1) TI=0; } void delay(unsigned int a) {a--; } void main() {EA=1; ES=1; TMOD=0X20; TH1=0XFD; TL1=0; TR1=1; SM1=0; SM1=1; while(1) {for(b=0;b&

51单片机之间的串口通信问题

问题描述 51单片机之间的串口通信问题 请问各位大虾,我要让两块51之间用串口进行通信,请问要怎么弄呢? 比如说我一块采集温度,将采集到的温度发送到另一块并在另一块显示出来,要怎么弄呢? 希望能详细点...谢谢... 解决方案 arm与51单片机之间串口通信实验arm与51单片机之间串口通信实验51单片机串口通信 解决方案二: 代码难得写,你找一下单片机多机通讯的书看看,硬件电路上两根串口线是交叉连接的.就是一个单片机tx连接另一个的rx 解决方案三: 网上也有详细的代码,方向给你说了,加油哦.

我编了一个单片机的时钟程序,想要实现串口改变时间,可是不知道应该怎么编入串口求解答

问题描述 我编了一个单片机的时钟程序,想要实现串口改变时间,可是不知道应该怎么编入串口求解答 这是我编的,其中串口的引入是错误的求改正 #include#define uint unsigned int#define uchar unsigned char uchar hour,min,sec,temp;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uint z);void d

51单片机串口通信时,接收到数据后为什么在while语句中将EA置1

问题描述 51单片机串口通信时,接收到数据后为什么在while语句中将EA置1 刚进入while语句时为什么要将EA置1??程序如下: #include #define uchar unsigned char uchar numaflagbenum; sbit beep=P2^3; void init(); void main() { init(); while(1) { if(flag==1) { EA=0; flag=0; TR0=1; if(a==1) { benum=4; } if(a=

串口通信-51单片机串口发送字符串给电脑 自己写了程序但出不了结果

问题描述 51单片机串口发送字符串给电脑 自己写了程序但出不了结果 #include unsigned char code L1[] = "123456789"; unsigned char code L2[] = "12345678"; void delay(void) { unsigned char n,m; for(m=0;m<200;m++) for(n=0;n<250;n++); } void send_str() { unsigned i =

51单片机串口通信-51单片机中的串口通信发送10(16进制)以上显示不正确

问题描述 51单片机中的串口通信发送10(16进制)以上显示不正确 串口通信中,向单片机发送数据控制LED灯亮实验中 发01,02.04.08 依次是 第1 2 3 4 个灯亮 而发送 10 就成第5 6 个一起亮了,然后发20 .40 是第7 和 第 8 个: 发 80 就全灭了 , 这是啥情况啊. #include unsigned char a,flag; void init(); void main() { init(); while(1) { if(flag == 1) { ES =