⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time-sync-2051.c

📁 工厂时间同步的单片机的源程序,驱动6个数码管
💻 C
字号:
#include "stdio.h"
#include "reg51.h"
#define MAXLEN 8 // 串行口缓冲区 8ytes 大小
// 0 - 9 的编码
unsigned char code table[] ={ 0xee,0x48,0xd6,0xdc,0x78,0xbc,0xbe,0xc8,0xfe,0xfc,0xff };
 //{ 0x11,0xb7,0x29,0x23,0x87,0x43,0x41,0x37,0x01,0x03,0x00 };
//第1 6 位的片选线
unsigned char code dig[] = { 0xc1,0x43,0x61,0x49,0x51,0x45};
unsigned char buffer[8],cbuf[8];
unsigned char count1,scan,i,ch,hour,min,sec,ptr,HOUR1,MIN1,SEC1,x,y;
bit fSec;
unsigned int count2;
void init(void);
void display(void);
main()
{
init();
while(1) {

if(fSec) { // 秒标志被置位
fSec = 0; // 清除秒标志
sec++; // 计算当前时间
if(sec==60) {
sec = 0; min++;
if(min==60) {
min = 0; hour++;
if(hour==24) hour = 0;
}
}
display(); // 显示当前时间
}
}
}
void init(void) {
scan = 0; fSec = 0; ptr = 0;
for(i=0;i<6;i++) buffer[i] = 0;
TCON &= 0x3F; //串行口初始化9600 8 N 1
TMOD &= 0x0F;
TMOD |= 0x20;
SCON = 0x50;
TH1 = TL1 = 0xfd;
TR1 = 1;
ES = 1;
TCON &= 0xCF; // 初始化Timer0
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = TL0 = 0;
ET0 = 1;

TR0 = 1;
EA = 1;
}
void timerint () interrupt 1 {
TR0 = 0;
TL0 = 0x16;
TH0 = 0xf7; // 0xf712 for 2.5ms  //cal f697=63127  //247*256=63232--
TR0 = 1;
P1 = 0xff; P3 = dig[scan];
ch = buffer[scan]; // 依次显示6 位
P1 = table[ch];
scan++; if(scan==6) scan = 0;
count2++;
if(count2==399) {
count2 = 0; fSec = 1; // 秒脉冲标志置位
}
}
void SerInt() interrupt 4 {
if(RI) {
RI = 0;
ch = SBUF;

if(ch!='\r') {if(ptr<MAXLEN) { ch -= '0'; cbuf[ptr] = ch; ptr++; } }// 不是回车则放入缓冲区
             else{if(ptr==7) { // 转换为当前时间
                          HOUR1 = cbuf[1] * 10 + cbuf[2];
                          if(HOUR1<99){SEC1= cbuf[5] * 10 + cbuf[6]; MIN1 = cbuf[3] * 10 + cbuf[4];
                             if (min>MIN1){x=MIN1+60-min;}   else   x=MIN1-min ; 
                             if ((hour=0) &(min=0) & (sec<30 )){x=0;}
                             sec=SEC1;
                             min=MIN1;
                             hour=HOUR1;}
                        else{if(HOUR1=99){y = cbuf[3] * 10 + cbuf[4];  x = cbuf[5] * 10 + cbuf[6]; }}
                           }ptr=0;
  } }     }


void display(void) {
buffer[0] = hour/10; buffer[1] = hour%10; // 显示hh mm ss
buffer[2] = min/10; buffer[3] = min%10;
buffer[4] = sec/10; buffer[5] = sec%10;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -