導航:首頁 > 操作系統 > 4位數字電子鍾單片機

4位數字電子鍾單片機

發布時間:2024-05-08 06:25:46

⑴ 51單片機數字秒錶設計用4位數碼管分別顯示十秒,秒,百毫秒,十毫秒計時范圍為10ms到99s

/***************************************************************************/

#include <reg51.h>

sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//數碼管位選埠

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼

void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;

/***************************************************************************/

void main(void){Time1();while(1){XS(m,s);}}//主函數

/***************************************************************************/

void int1() interrupt 1 //定時器中斷

{

TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}

}

/***************************************************************************/

void Time1(void)//定時器初始化

{

TH0=(65536-921)/256; TL0=(65536-921)%256;

TMOD=0x01; EA=1; ET0=1; TR0=1;

}

/***************************************************************************/

void XS(int xm,int xs) //數碼管顯示

{

char d1,d2,d3,d4;

d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;

P0=table[d1]; Axs=0; YS(10); Axs=1;//個位顯示

P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位顯示

P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位顯示

P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位顯示

}

/***************************************************************************/

void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延時函數

/***************************************************************************/

數碼管的埠用的可能不一樣,自己改下

⑵ 奼傚崟鐗囨満4浣嶆暟瀛楅挓鐨勭▼搴

#include<AT89X52.H>

#defineucharunsignedchar

#define FLASH_FREQ 100

sbitKEY1=P1^4; //瀹氫箟KEY1 鍒嗗姞1

sbitKEY2=P1^5; //瀹氫箟KEY2 縐掑姞1

#defineCOM1_ON(P2=0xf7) //11111110 //浣庣數騫崇偣浜

#defineCOM2_ON(P2=0xfb) //11111101

#defineCOM3_ON(P2=0xfd) //11111011

#defineCOM4_ON(P2=0xfe) //11110111

#defineCOMS_OFF(P2=0xff) /*鏁扮爜綆″叏鐏瀹忓畾涔*/

#defineSEG_PORT (P0) /*孌電爜鏁版嵁杈撳嚭絝鍙*/

ucharcodeLED_Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//鍏遍槼鏋,COM閲囩敤7404鍙栧弽椹卞姩

#defineDISPLAY_BIT 4 //鏁扮爜綆℃樉紺轟綅鏁

ucharDisBuff[DISPLAY_BIT]; //鏄劇ず緙撳啿鍖

bitDisDecemal=0;//鏄鍚︽樉紺哄皬鏁扮偣

ucharshi=11,fen=59,miao=49;

voiddelay(ucharms)//1ms寤舵椂,12MHz

{

uchari,j;

for(i=ms;i>0;i--)

for(j=122;j>0;j--);

}

voidLED_DisplayTimer(ucharLED1,ucharLED2,ucharLED3,ucharLED4)

{

DisBuff[0]=LED_Tab[LED1];

DisBuff[1]=LED_Tab[LED2];

DisBuff[2]=LED_Tab[LED3];

DisBuff[3]=LED_Tab[LED4];

/**************灝忔暟鐐歸棯鐑佸湪榪欓噷鎺у埗*****/

if(DisDecemal==1)

DisBuff[1]&=0x7f; //鐐逛寒灝忔暟鐐

/**************************************/

}

voidTimer0_Init(void)//@12MHz,STC8952

{

TMOD=0x01;

TH0=(65536-5000)>>8; //閲嶈5ms鐨勫垵鍊

TL0=(65536-5000);

IE=0x82;

TR0=1;

}

voidDisplay_Scan(void)//鍏遍槾鏋佹暟鐮佺 <5ms璋冪敤涓嬈

{

staticucharCOM;

COM++;

if(COM>=DISPLAY_BIT) COM=0; //COM鐨勫煎湪0,1,2,3涔嬮棿鍒囨崲

COMS_OFF; //鍒囨崲鍓嶅皢鍏ㄩ儴鏄劇ず鏆傛椂鍏抽棴,閬垮厤鉶氬獎,鎵璋撹櫄褰卞氨鏄鏁扮爜綆$湅璧鋒潵"鍏ㄤ寒"

switch(COM)

{

case0:SEG_PORT=DisBuff[0]; //鏃鍗佷綅

COM1_ON;

break;

case1:SEG_PORT=DisBuff[1]; //鏃涓浣

COM2_ON;

break;

case2:SEG_PORT=DisBuff[2]; //鍒鍗佷綅

COM3_ON;

break;

case3:SEG_PORT=DisBuff[3]; //鍒涓浣

COM4_ON;

break;

}

}

voidKeyScan(void)//閿鐩樻壂鎻忕▼搴

{

if(KEY1==0)

{

delay(5);

if(KEY1==0)

{

shi++;

if(shi==24)

shi=0;

while(!KEY1)//絳夊緟鎸夐敭閲婃斁, 浠跨湡鎸夐敭闀挎椂闂翠笉閲婃斁,褰卞搷鏄劇ず

{

LED_DisplayTimer(shi/10,shi%10,fen/10,fen%10);

}

}

}

else if(KEY2==0)

{

delay(5);

if(KEY2==0)

{

fen++;

if(fen==60)

fen=0;

while(!KEY2)//絳夊緟鎸夐敭閲婃斁

{

LED_DisplayTimer(shi/10,shi%10,fen/10,fen%10);

}

}

}

}

voidmain()

{

Timer0_Init();

while(1)

{

LED_DisplayTimer(shi/10,shi%10,fen/10,fen%10);

KeyScan(); //閿鐩樻壂鎻

}

}

voidTimer0(void)interrupt1 using3 //鍓嶅彴紼嬪簭

{

staticucharflashFREQ;//闂鐑侀戠巼鎺у埗

staticucharmms;//緇熻′腑鏂嬈℃暟,鍋氭椂閽熺殑鍩哄噯婧

flashFREQ++;

mms++;

TH0=(65536-5000)>>8; //閲嶈5ms鐨勫垵鍊

TL0=(65536-5000);

if(mms==200)//5*200=1000

{

mms=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

shi=0;

}

}

}

Display_Scan(); //鍔ㄦ佹壂鎻忔暟鐮佺 <5ms璋冪敤涓嬈

if(flashFREQ>=FLASH_FREQ)

flashFREQ=0; //闂鐑佽℃椂

if(flashFREQ>=FLASH_FREQ/2)//闂鐑佸叾瀹炲氨鏄涓鍗婃椂闂存e父鏄劇ず,涓鍗婃椂闂翠笉鏄劇ず鑰屽凡,鎵浠ユ垜浠鐪嬭搗鏉ユ槸闂鐑佹晥鏋

DisDecemal=1;

else

DisDecemal=0;

}

鎸夐敭浣犺嚜宸辨洿鏀,榪欎釜紼嬪簭閲岀殑鏁扮爜綆℃壂鎻忕▼搴忓緢緇忓吀,鎸夐敭紼嬪簭鍐欑殑寰堟悡,涓嶈繃瀵逛粯浣犵殑璇劇▼璁捐℃槸鏍規湰閮芥湪鏈夐棶棰樼殑!!!!!!!!!!!

⑶ 51單片機求這個時鍾的c語言程序

以下是四位數碼管可調時帶秒閃爍的c51單片機電子鍾程序(c語言)。

/**** 本程序中,晶振為12MHz, ****/
/**** 時間控制採用定時中斷控制方式。 ****/
/**** 模式和時間調整採用查詢方式。 ****/

#include<reg52.h>

sbit P20=P2^0; //分個位控制端
sbit P21=P2^1; //分十位控制端
sbit P22=P2^2; //時個位控制端
sbit P23=P2^3; //時十位控制端
sbit led=P2^7; //second display led

sbit key0=P3^0; //模式設置
sbit key1=P3^1; //加
sbit key2=P3^2; //減

unsigned char hour,min,sec,T50ms;
unsigned char modstate; //模式狀態

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段碼

void init(); //初始化子程序聲明
void delay500us(unsigned char X); //延時子程序聲明
void display(); //顯示子程序聲明
void display001(); //顯示子程序聲明
void display002(); //顯示子程序聲明
void keyscan(); //按鍵識別子程序聲明

void main()
{
init();
while(1)
{
keyscan();
}
}

void init() //初始化子程序
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}

void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}

void timer0() interrupt 1 //timer0中斷服務子程序,定時時間為50ms,本程序加了10us的時間修正量
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;

T50ms++;
if(T50ms>=20)
{
T50ms=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)hour=0;
}
}
}
}

void display()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(5);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(5);

if(T50ms<=10)led=0;
if(T50ms>10)led=1;
}

void display001()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(10);
}

void display002()
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
P21=0;
delay500us(10);

P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min%10];
P20=0;
delay500us(10);
}

void keyscan() //按鍵識別鍾程序
{
while(modstate==0)
{
display();
if(key0==0)
{
display();
if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display001(); //等待按鍵釋放。
}
}
//****************************************************************************//
while(modstate==1)
{
display001();
if(key0==0)
{
display001();
if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display002(); //等待按鍵釋放。
}

if(key1==0)
{
display001();
if(key1==0)
{
hour++;
if(hour>=24)hour=0;
while(key1==0)display001();
}
}
if(key2==0)
{
display001();
if(key2==0)
{
hour--;
if(hour>=24)hour=0;
while(key2==0)display001();
}
}
}
//****************************************************************************//
while(modstate==2)
{
display002();
if(key0==0)
{
display002();
if(key0==0)modstate=0; //這兩句加在一起為延時10ms軟體防抖設計。
while(key0==0)display(); //等待按鍵釋放。
}

if(key1==0)
{
display002();
if(key1==0)
{
min++;
if(min>=60)min=0;
while(key1==0)display002();
}
}
if(key2==0)
{
display002();
if(key2==0)
{
min--;
if(min>=60)min=0;
while(key2==0)display002();
}
}
}
}

閱讀全文

與4位數字電子鍾單片機相關的資料

熱點內容
android權威編程源碼 瀏覽:599
搜索引擎指標源碼 瀏覽:61
片場app怎麼樣 瀏覽:913
ctcpip編程 瀏覽:520
java統計字元串次數 瀏覽:254
中興交換機zxr10vlan配置命令 瀏覽:829
java面試spring 瀏覽:145
得物程序員加班厲害嗎 瀏覽:958
h1z1東京伺服器地址 瀏覽:397
海賊王一番賞文件夾什麼樣 瀏覽:847
24bit高頻精品解壓音樂 瀏覽:181
api程序員遇到更新 瀏覽:298
程序員程序運行搞笑圖 瀏覽:772
秦思怎麼下載app 瀏覽:691
發抖音怎麼發自己的APP網站 瀏覽:362
androidinbitmap 瀏覽:774
lzma源碼使用 瀏覽:748
ibm伺服器湖南經銷商雲伺服器 瀏覽:991
正規模板建站配雲伺服器商家 瀏覽:876
安卓清楚緩存命令 瀏覽:380