问题描述
- 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