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

資源簡介

內容描述:當按下INT按鈕時,數碼管開始快速計時,高五位為秒數,低三位為ms數,每1ms刷新一次顯示內容。當再次按下INT按鈕時,停止計數。并要求當開始計時時,每過一秒要有一次蜂鳴,蜂鳴時間為200ms。開發環境為keil

資源截圖

代碼片段和文件信息

//實驗5
#include?“myclock.h“

//分別記錄LED上的數字
unsigned?char?a[8]={0};
//當前顯示的LED中內容在數組a中的偏移
unsigned?char?offset?=?0;
//用于關閉高位0的顯示
unsigned?char?flag?=?3;
//表示計時器是否開始計時,0表示未開始,非0表示開始
unsigned?char?begin?=?0;
//表示蜂鳴器是否工作,0表示不工作,非0表示工作
unsigned?char?sounding?=?0;
//定時器1的計數器
unsigned?char?t1count?=?0;

void?main()
{
//設置定時器工作方式
TMOD?=?0x11;
//設置外部中斷1為跳沿觸發
IT1?=?1;
//允許定時器中斷和外部中斷1
enable_int();
//啟動定時器T0
runT0();
//等待中斷
while(1);
}

//實現1ms刷新顯示
void?refresh()?interrupt?1
{
//重置定時器T0
runT0();
//如果開始工作,則顯示數字加1
if(begin)
{
inc_a();
//每過1秒,蜂鳴器響
if(sounding)
{
SOUND_OUT?=?0;
t1count?=?0;
runT1();
sounding?=?!sounding;
}
}
//顯示數據
display();
++offset;
if(offset?==?8)
offset?=?0;
}

//INT按鈕被按下時的中斷處理函數
void?press()?interrupt?2
{
//切換機器工作狀態
begin?=?!begin;
}

//實現持續200ms的蜂鳴
void?sound()?interrupt?3
{
//T1第4次溢出,關閉蜂鳴器
if(t1count?==?3)
{
//蜂鳴器停止工作
SOUND_OUT?=?1;
//T1停止工作
TR1?=?0;
}
else//否則T1溢出次數加1,重新啟動T1
{
runT1();
++t1count;
}
}

//將數組中的一位顯示在數碼管上
void?display()
{
unsigned?char?num?=?a[offset];
num?=?get_num(num);
//高位多余的0不顯示
if(offset>flag)
num?=?0;
//顯示小數點
else?if(offset?==?3)
num?|=?NUM_DP;
//輸出數據
dat_in(num);
//選擇數碼管
NUMLEDxOPEN(offset);
return;
}

//將十進制數轉換成相對應的數碼管輸入
unsigned?char?get_num(unsigned?char?num)
{
switch(num)
{
case?0:return?NUM_0;
case?1:return?NUM_1;
case?2:return?NUM_2;
case?3:return?NUM_3;
case?4:return?NUM_4;
case?5:return?NUM_5;
case?6:return?NUM_6;
case?7:return?NUM_7;
case?8:return?NUM_8;
case?9:return?NUM_9;
default:return?0;
}
return?0;
}

//輸出數據
void?dat_in(unsigned?char?dat)
{
unsigned?char?i;
for(i=0;i<8;++i)
{
SCK?=?0;
if(?(dat?&?0x80)?!=?0)
SER?=?1;
else
SER?=?0;
dat?<<=?1;
SCK?=?1;
}
RCK?=?1;
RCK?=?0;
}

//計時數組數據加1
void?inc_a()
{
unsigned?char?i;
++a[0];
for(i=1;i<8;++i)
{
if(a[i-1]?==?10)
{
a[i-1]?=?0;
++a[i];
//用于關閉高位多余0的顯示
if(i>flag)
flag?=?i;
//每過1s打開蜂鳴器
if(i?==?3)
sounding?=?!sounding;
}
}
if(flag<3)
flag?=?3;
}

//選擇打開的數碼管
void?NUMLEDxOPEN(unsigned?char?i)
{
switch(i)
{
case?0:NUMLED8OPEN();break;
case?1:NUMLED7OPEN();break;
case?2:NUMLED6OPEN();break;
case?3:NUMLED5OPEN();break;
case?4:NUMLED4OPEN();break;
case?5:NUMLED3OPEN();break;
case?6:NUMLED2OPEN();break;
case?7:NUMLED1OPEN();break;
}
}

//允許定時器中斷和外部中斷1,并設置中斷優先級
void?enable_int()
{
//允許定時器中斷
ET0?=?1;
ET1?=?1;
//允許外部中斷1
EX1?=?1;
//打開中斷允許總開關
EA?=?1;
//設置外部中斷1的優先級高于T0T1中斷
PX1?=?1;
PT0?=?0;
PT1?=?0;
}

//啟動定時器T0定時時間為1ms
void?runT0()
{
TL0?=?0x66;
TH0?=?0xFC;
TR0?=?1;
}

//啟動定時器T1,定時時間為50ms
void?runT1()
{
TL1?=?0xFE;
TH1?=?0x4B;
TR1?=?1;
}


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

?????文件???????2170??2010-04-24?15:40??51單片機秒表定時器\實驗5\clock.hex

?????文件??????11883??2010-04-24?15:40??51單片機秒表定時器\實驗5\clock.M51

?????文件???????1410??2010-04-24?15:52??51單片機秒表定時器\實驗5\clock.Opt

?????文件????????190??2010-09-25?10:52??51單片機秒表定時器\實驗5\clock.plg

?????文件???????2001??2010-04-24?15:52??51單片機秒表定時器\實驗5\clock.Uv2

?????文件???????1412??2010-04-23?18:54??51單片機秒表定時器\實驗5\clock_Opt.Bak

?????文件???????2001??2010-04-17?13:08??51單片機秒表定時器\實驗5\clock_Uv2.Bak

?????文件????????161??2010-04-24?15:46??51單片機秒表定時器\實驗5\myclock.bak

?????文件???????3259??2010-04-24?15:47??51單片機秒表定時器\實驗5\myclock.c

?????文件???????1414??2010-04-17?15:47??51單片機秒表定時器\實驗5\myclock.h

?????文件????????855??2010-04-24?15:46??51單片機秒表定時器\實驗5\myclock.LST

?????目錄??????????0??2011-04-18?23:16??51單片機秒表定時器\實驗5

?????目錄??????????0??2011-04-18?23:16??51單片機秒表定時器

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

????????????????26756????????????????????13


評論

共有 條評論