日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月05日(星期二)

2021年08月05日 | 基于8051實現(xiàn)的可啟停/顯示或隱藏時間/設定當前時間的時鐘

發(fā)布者:平和心態(tài) 來源: eefocus關鍵字:啟停  時鐘 手機看文章 掃描二維碼
隨時隨地手機看文章

程序實現(xiàn)的功能:


1. 實驗箱上電后, 不顯示當前時間.


2. 向8051發(fā)送"Show.E"后, 顯示當前時間.


3. 向8051發(fā)送"Hide.E"后, 隱藏當前時間.


4. 向8051發(fā)送"Start.E"后, 時鐘開始計時.


5. 向8051發(fā)送"Stop.E"后, 時鐘停止計時(若當前處于"Show"狀態(tài), 則顯示停止計時前的時間).


6.向8051發(fā)送"hour:minute:second.E(hour、minute、second均為具體的數(shù)字, 且不足10 十位要添零補位)"后, 時鐘按照給出的時間的整點開始計時.


#include

 

#include

 

unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//對應數(shù)碼管顯示0~9

 

char buf[30];//存放收到的數(shù)據

 

int tcount = 0;//記錄經過的2ms區(qū)間段個數(shù)

 

int t = 0;

 

int hour = 23, minute = 59, second = 55;

 

char en = 0;//電子時鐘顯示表示, 默認為不顯示

 

char en_ = 0;//電子時鐘啟停標志, 默認為停止

 

void clear(int i)//清屏函數(shù)

{

P2 = i << 2;

P0 = 0;

}

 

void T0_INT() interrupt 1 //timer0中斷, 每2ms觸發(fā)一次

{

TR0 = 0;//關閉timer0

TH0 = 0xF8;

TL0 = 0x30;//65536 - 2000 = 63536 = F830H

if(tcount % 6 == 0)

{

//秒數(shù)個位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 0;//右數(shù)第一個數(shù)字亮

P0 = DIG_CODE[second % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 0;

P0 = DIG_CODE[second % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);;

}

tcount ++;

}

}

else if(tcount % 6 == 1)

{

//秒數(shù)十位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 1 << 2;//右數(shù)第二個數(shù)字亮

P0 = DIG_CODE[second / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 1 << 2;

P0 = DIG_CODE[second / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

tcount ++;

}

}

else if(tcount % 6 == 2)

{

//分鐘個位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 2 << 2;//右數(shù)第三個數(shù)字亮

P0 = DIG_CODE[minute % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 2 << 2;

P0 = DIG_CODE[minute % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

tcount ++;

}

}

else if(tcount % 6 == 3)

{

//分鐘十位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 3 << 2;//右數(shù)第四個數(shù)字亮

P0 = DIG_CODE[minute / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 3 << 2;

P0 = DIG_CODE[minute / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

tcount ++;

}

}

else if(tcount % 6 == 4)

{

//小時個位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 4 << 2;//右數(shù)第二個數(shù)字亮

P0 = DIG_CODE[hour % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 4 << 2;

P0 = DIG_CODE[hour % 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

tcount ++;

}

}

else if(tcount % 6 == 5)

{

//小時十位

if(en_ == 1)//時鐘啟動狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 5 << 2;//右數(shù)第二個數(shù)字亮

P0 = DIG_CODE[hour / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

t ++;

tcount ++;

}

else//時鐘暫停狀態(tài)

{

if(en == 1)//時鐘顯示

{

P2 = 5 << 2;

P0 = DIG_CODE[hour / 10];

}

else//時鐘不顯示

{

clear(tcount % 6);

}

tcount ++;

}

}

if(tcount == 500)

{

tcount = 0;

}

if(t == 500)//2ms * 500 = 1000ms = 1s -> 1s時間到

{

t = 0;

second ++;

if(second == 60)

{

second = 0;

minute ++;

if(minute == 60)

{

minute = 0;

hour ++;

if(hour == 24)

{

hour = 0;

}

}

}

}

TR0 = 1;//重新開啟timer0

}

 

int main()

{

int i = 0;

clear(7);

TMOD = 0x21;

SCON = 0x50;//設置串行通信格式

TH0 = 0xF8;

TL0 = 0x30;

TH1 = 0xE6;

TL1 = 0xE6;

IE = 0x82;

TR0 = 1;//開啟timer0

TR1 = 1;//開啟timer1以產生波特率

while(1)

{

if(RI == 1)//收到數(shù)據

{

RI = 0;

buf[i ++] = SBUF;//接收串口發(fā)來的數(shù)據

buf[i] = '