91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

基本要求:利用定時計數(shù)器,設(shè)計一個電子時鐘,可以先編寫顯示子程序。從左到右依次顯示時分秒。有兩種方法實現(xiàn),一種是在中斷程序中計數(shù),產(chǎn)生時分秒計數(shù),送顯示緩沖區(qū)。另一種是中斷程序每一秒清除一個位變量,而主程序通過監(jiān)視位變量的變化來知道每秒的時間。
進(jìn)而要求:
1. 加入時間調(diào)整程序,使用兩個或三個按鈕,調(diào)節(jié)當(dāng)前的時間。類似平常使用的 電子表。可以讓正在調(diào)整的位閃爍顯示。
2. 可以加入一個鬧鐘鐘設(shè)置,當(dāng)所定的時間到時,產(chǎn)生斷續(xù)的蜂鳴聲。
可以加入日歷的功能。
鄭旅軍原創(chuàng),謝絕抄襲,可以借鑒

資源截圖

代碼片段和文件信息

#include?“reg51.h“
#include?“absacc.h“

//以下是鍵碼定義
//?鍵碼表?????????????????????????//????對應(yīng)鍵位:
//?0x700x710x720x730x740x75?//?7?8?9?A?MODE?RESET
//?0xb00xb10xb20xb30xb40xb5?//?4?5?6?B?MOVE?MON
//?0xd00xd10xd20xd30xd40xd5?//?1?2?3?C?HERE?LAST
//?0xe00xe10xe20xe30xe40xe5;?//?0?F?E?D?EXEC?NEXT

unsigned?char?led[10]={0x3F0x060x5B0x4F0x660x6D0x7D0x070x7F0x6F};//從0~9的LED編碼
unsigned?char?ledchar[3]={0x5c0x540x71};//o?n?f??鬧鐘狀態(tài)指示


//以下是系統(tǒng)地址
#define?base_ADDRESS?0x8000?//選通基地址

#define?LINE_ADDRESS?base_ADDRESS+1?//鍵盤行線地址
#define?COLU_ADDRESS?base_ADDRESS+2?//鍵盤列線地址

#define?LED_SEG?base_ADDRESS+4?//數(shù)碼管段選地址
#define?LED_BIT?base_ADDRESS+2?//數(shù)碼管位選地址


//以下是3種功能定義
#define?CLOCK?clockstr?//時鐘
#define?ALART?alartstr?//鬧鐘
#define?DATE?datestr?//日期


//以下是所有子函數(shù)的聲明
void?init(void);?//系統(tǒng)的初始化函數(shù)
void?display(void);?//刷新一次數(shù)碼管函數(shù)
void?clockplus(void);?//時間加1S的子函數(shù)

void?update_clockstr(void);?//更新時間顯示編碼
void?update_alartstr(void);?//更新鬧鐘時間的顯示編碼
void?update_datestr(void);?//更新日期顯示編碼

void?deley(int);?//延時子程序
void?update_dispbuf(unsigned?char?*);?//更新顯示緩沖區(qū)

unsigned?char?getkeycode(void);?//獲取鍵值子程序
void?keyprocess(unsigned?char);?//鍵值處理子程序

unsigned?char?getmonthdays(unsigned?intunsigned?char);//計算某月的天數(shù)子程序

//功能鍵功能子函數(shù)
void?MODE(void);?//切換3種工作模式
void?MOVE(void);?//設(shè)置位選擇
void?NEXT(void);?//當(dāng)前設(shè)置位+1
void?LAST(void);?//當(dāng)前設(shè)置位-1


struct{?//時間結(jié)構(gòu)體變量
unsigned?char?s;
unsigned?char?m;
unsigned?char?h;
}clock={000};

struct{?//鬧鈴時間結(jié)構(gòu)體變量
unsigned?char?m;
unsigned?char?h;
}alart={00};


struct{?//日期結(jié)構(gòu)體變量
unsigned?int?year;
unsigned?char?month;
unsigned?char?day;
}date={9611};

unsigned?char?dispbuf[6];?//顯示緩沖區(qū)數(shù)組
unsigned?char?clockstr[6];?//時間顯示的數(shù)碼管編碼數(shù)組
unsigned?char?alartstr[6];?//鬧鐘顯示的數(shù)碼管編碼數(shù)組
unsigned?char?datestr[6];?//日期顯示的數(shù)碼管編碼數(shù)組

unsigned?int?itime=0;?//定時器0中斷計數(shù)

sbit?alarm=P1^0;?//外接蜂鳴器的管腳


bdata?bit?Alart_EN=0;?//鬧鈴功能允許位?0:禁止鬧鈴?1:允許鬧鈴

bdata?bit?IsBeep=0;?//響鈴標(biāo)志位?0:未響鈴?1:正在響鈴

bdata?bit?IsSet=0;?//設(shè)置模式標(biāo)志位?0:正常走時?1:設(shè)置模式

#define?SECOND?0?//對應(yīng)數(shù)碼管右邊兩位
#define?MINUTE?1?//對應(yīng)數(shù)碼管中間兩位
#define?HOUR?2?//對應(yīng)數(shù)碼管左邊兩位
unsigned?char?SetSelect=0;?//在設(shè)置模式IsSet=1時,正在被設(shè)置的位對應(yīng)上面3個宏定義


unsigned?char?*Fun;?//標(biāo)志當(dāng)前正設(shè)置的功能




//*************************函數(shù)部分************************
void?main(void)
{
init();
while(1)
{
XBYTE[COLU_ADDRESS0x00];?//給鍵盤列線賦全零掃描碼,判斷是否有鍵按下
while((XBYTE[LINE_ADDRESS]&0x0f)==0x0f)?//檢測是否有鍵按下,無則一直進(jìn)行LED的刷新顯示
{
if(Alart_EN&&(clock.h==alart.h)&&(clock.m==alart.m))?
{
IsBeep=1;
}

else
{?
IsBeep=0;
alarm=0;
}

display();
}
keyprocess(getkeycode());?//有鍵按下時得到鍵值,并送入鍵值處理程序

}
}



void?init(void)
{
TMOD=0x02;?//定時器0設(shè)置為工作方式2基準(zhǔn)定時250×2=500us=0.5ms
TH0=0x06;?//定時器0中斷服務(wù)用來產(chǎn)生1秒時鐘定時及鬧鐘蜂鳴器蜂鳴脈沖
TL0=0x06;
ET0=1;
EA=1;
TR0=1;
update_clockstr();?//初始化時鐘顯示編碼數(shù)組
update_alartstr();?//初始化鬧鐘顯示編碼數(shù)組
update_datestr();?//初始化日期顯示編碼數(shù)組


Fun=CLOCK;?//默認(rèn)的顯示摸式為時鐘
update_dispbuf(Fun);//初始化顯示緩沖數(shù)組
alarm=0;?//蜂鳴器接線引腳復(fù)位
}

void?time

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????343040??2009-06-17?12:57??鄭旅軍?實驗六?秒表程序報告.doc

?????文件??????10361??2009-06-10?21:26??e_clock.c

-----------?---------??----------?-----??----

???????????????353401????????????????????2


評論

共有 條評論