導航:首頁 > 操作系統 > 單片機數碼管電子鍾

單片機數碼管電子鍾

發布時間:2023-03-20 12:57:11

㈠ 利用單片機的定時器和數碼管,設計一個電子時鍾

給你個電路和程序,//前幾天幫一個網友寫,單片機定時時鍾在調節功能,可以參考一下我程序

/***************************************************
* 6位數碼管顯示電子鍾
*
* 功能: 按鍵加,按鍵減, 按鍵,啟動和停止。
*
*
***************************************************/
#include "REG52.H"

sbit SHUG_01 = P2^0; //數碼管1
sbit SHUG_02 = P2^1; //數碼管2
sbit SHUG_03 = P2^2; //數碼管3
sbit SHUG_04 = P2^3; //數碼管4
sbit SHUG_05 = P2^4; //數碼管5
sbit SHUG_06 = P2^5; //數碼管6
sbit KEY0_01 = P0^0; //按鍵 啟動或停止sbit KEY0_02 = P0^1; //按鍵 加
sbit KEY0_03 = P0^2; //按鍵減
sbit KEY0_04 = P0^3; //按鍵菜單
#define LED_DATA P1 //P1數據埠
unsigned char value_temp = 0;unsigned char value_Outk = 0;
unsigned char value_shio = 8;
unsigned char value_feno = 40;
unsigned char value_miao = 0;
unsigned char code value_tab0[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共陽極unsigned char code value_tab1[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //共陽極帶點

/*
* 延時1ms延時子函數
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/* * 程序運行【啟動和停止】子函數
**/
void Disp_layledketCmd(void)
{
/***小時***/
SHUG_01 = 1;
LED_DATA = value_tab0[value_shio / 10]; /*******小時的十位數顯示***************/
Delay_1ms(5);
SHUG_01 = 0;
SHUG_02 = 1;
LED_DATA = value_tab1[value_shio % 10]; /*******小時的個位數顯示***************/
Delay_1ms(5);
SHUG_02 = 0;
/***分鍾***/ SHUG_03 = 1;
LED_DATA = value_tab0[value_feno / 10]; /*******分鍾的十位數顯示***************/
Delay_1ms(5);
SHUG_03 = 0;
SHUG_04 = 1;
LED_DATA = value_tab1[value_feno % 10]; /*******分鍾的個位數顯示***************/
Delay_1ms(5);
SHUG_04 = 0;
/***秒鍾***/ SHUG_05 = 1;
LED_DATA = value_tab0[value_miao / 10]; /*******秒鍾的十位數顯示***************/
Delay_1ms(5);
SHUG_05 = 0;
SHUG_06 = 1;
LED_DATA = value_tab0[value_miao % 10]; /*******秒鍾的個位數顯示***************/
Delay_1ms(5);
SHUG_06 = 0;
}
/* * 定時器初始化定時50ms
**/
void Tero_Init(void)
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/* * 按鍵開關【啟動和停止】子函數
**/
void Scan_keyoutCmd(void)
{
if(KEY0_01 == 0)
{
Delay_1ms(10);
if(KEY0_01 == 0)
{
TR0 = ~ TR0;
}
while(KEY0_01 == 0);
}
if(KEY0_02 == 0) {
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_miao--;
if(value_miao == -1)
{
value_feno--;
value_miao = 59;
if(value_feno == -1)
{
value_shio--;
value_feno = 59;
if(value_shio == -1)
{
value_shio = 23;
}
}
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0) {
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_miao++;
if(value_miao == 60)
{
value_miao = 0;
value_feno++;
if(value_feno == 60)
{
value_feno = 0;
value_shio++;
if(value_shio == 24)
{
value_shio = 0;
}
}
}
while(KEY0_03 == 0); //檢測鬆手
}
}
}
/* * 函數主體
**/
int main(void)
{
P1 = P2 = P3 = 0x00;
Tero_Init();

while(1)
{
Scan_keyoutCmd();
Disp_layledketCmd(); //執行應運程序
}
}
/* * 定時器中斷服務程序
**/
void Tmero()interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
value_temp++;
if(value_temp == 20)
{
value_temp = 0;
value_miao++;
if(value_miao == 60)
{
value_feno++;
value_miao = 0;
if(value_feno == 60)
{
value_shio++;
value_feno = 0;
if(value_shio == 24)
{
value_shio = 0;
}
}
} }
}

㈡ 畢業設計單片機電子鍾用數碼管可以嗎

可以的。
基於STC單片機的多功能電子鍾的設計

雲之初
摘要:隨著社會的發展和人類科學技術的進步,人們通過觀察太陽的自轉、沙漏、擺鍾到電子鍾來認識時間。電子鍾的出現使人們在發展過程中更方便地認識時間。與傳統機械鍾相比,它具有走時准確、直觀顯示、無機械傳動裝置等優點,被廣泛應用於人們的日常生活中。在生活中。但目前市場上常見的一些電子鍾功能單一,沒有時間校準、鬧鍾、陰陽歷、陽歷等功能。這些功能在一定條件下不能滿足我們生活和工作的需要。因此,研悔攜制出滿足上述要碧絕伏求、性價比高的多功能時鍾已成為亟待解決的問題。本文針對目前市場上常見的一些電子鍾存在的功能單一、時間校準不足、陰陽歷和節氣顯示功能等缺點。設計開發了一種基於STC單片機的多功能電子鍾。介紹了該系統的硬體電路和軟體設計。它不僅可以實現年、月、日、周、時、分、秒的基本信息,還可以顯示陽歷、節氣、陰歷的信息。具有生日設定、時間校準、鬧鍾設定提醒等功能。物理裝置的測試表明,該時鍾具有精度高、功能多、運行穩定、電路簡單等優點。
關鍵詞:STC單片機;多功能電宏棚子鍾;時間校準

㈢ 51單片機電子鍾程序數碼管顯示

#include<reg51.h>

#define uchar unsigned char

sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
uchar shi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;
unsigned int pp;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
{
la=0;
P0=table[shi2];
la=1;
la=0;

wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);

P0=table[shi1]|0x80;
la=1;
la=0;

P0=0xfd;
wela=1;
wela=0;
delay(5);

P0=table[fen2];
la=1;
la=0;

P0=0xfb;
wela=1;
wela=0;
delay(5);

P0=table[fen1]|0x80;
la=1;
la=0;

P0=0xf7;
wela=1;
wela=0;
delay(5);

P0=table[miao2];
la=1;
la=0;

P0=0xef;
wela=1;
wela=0;
delay(5);

P0=table[miao1];
la=1;
la=0;

P0=0xdf;
wela=1;
wela=0;
delay(5);
}

void keyscan0()
{
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xbb:
ok=0;
break;

case 0x7b:
ok=1;
break;
}
}
}
}

void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
wei++;
break;

case 0xde:
key=1;
wei++;
break;

case 0xbe:
key=2;
wei++;
break;

case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;

case 0xdd:
key=5;
wei++;
break;

case 0xbd:
key=6;
wei++;
break;

case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;

case 0xdb:
key=9;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
}

void main()
{
TMOD=0x01;

TH0=(65536-46080)/256;// 由於晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
ET0=1;
EA=1;

while(1)
{ keyscan0();

if(ok==1)
{ TR0=1;
wei=0;

if(pp==20)
{ pp=0;
m++;
if(m==60)
{
m=0;
f++;
if(f==60)
{
f=0;
s++;
if(s==24) //為24h一個循環,若要12h,只需在此改為12即可。
{
s=0;
}
}
}
}

a0=s%10;
a1=s/10;
b0=f%10;
b1=f/10;
c0=m%10;
c1=m/10;
display(a1,a0,b1,b0,c1,c0);
}
else
{ TR0=0;
keyscan();
if(key!=10)
{

switch(wei)
{
case 1: if(key<3) //小時最高位為2
a1=key;
else
wei--;
break;
case 2: if(a1==1|a1==0)
a0=key;
else
if(key<5)
a0=key; //當小時最高位為2時,低位最高為4
break;
case 3: if(key<7) //分鍾最高位為6
b1=key;
else
wei--;
break;
case 4: b0=key; break;
case 5: if(key<7) //秒最高位為6
c1=key;
else
wei--;
break;
case 6: c0=key; break;
}
key=10;
}
m=c1*10+c0;
f=b1*10+b0;
s=a1*10+a0;
display(a1,a0,b1,b0,c1,c0);
}
}
}

void time0() interrupt 1
{ TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}

㈣ 誰能告訴我51單片機簡單的led數碼管時鍾程序 24小時制的(c語言版的)

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位碼
P0=(tab[shi/10]); //段碼
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位碼
P0=0x40; //段碼
delay(2);
P2=3; //位碼
P0=(tab[fen/10]); //段碼
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位碼
P0=0x40; //段碼
delay(2);
P2=6; //位碼
P0=(tab[miao/10]); //段碼
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*還有什麼不明白繼續追加*/

㈤ 利用AT89C51單片機設計簡易電子鍾(六位),通過8位LED數碼管實現時間顯示;系統可以通過三個按鍵實現時間


程序設計思路:1.利用單片機內部定時器作為計時器,調用timer函數;2、設計一套按鍵子程序;(3)設計一套數碼顯示管子程序。下列提供一套程序供參考。


#include<iom16v.h>

#include <macros.h>

#define uchar unsigned char

#define uint unsigned int


const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9對應字元

const uchar key_value[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

uchar data[4]={0}; //顯示初始值為0

uint count=0; //初始計數值為0

uchar keynum;



void port_init() //埠初始化函數

{DDRA=0XFF; //埠A為推挽1輸出

PORTA=0XFF;

PORTB=0XFF; //埠B為推挽1輸出

DDRB=0XFF;

DDRC=0XFF; //埠C為不帶上拉電阻的輸入

PORTC=0XFF;

DDRD=0XFF; //埠D低4位為輸出

PORTD=0X0F;

}



void delay(uint j) //延時函數

{uint k;

while(j--)

{for(k=1000;k>0;k--) ;}

}



void display(uchar *p) //顯示函數

{uchar i,sel=0x01;

for(i=0;i<4;i++)

{PORTA=sel; //選通最右邊的數碼管

PORTB=table[p[i]]; //送字型碼

delay(1);

sel=sel<<1; //左移一位

}

}



uchar get_key(void)

{if((PIND&0X0F)!=0X0F) delay(3);

{

PORTD=0XEF;

switch(PIND&0X0F)

{case 0x0e: keynum=key_value[0];break;

case 0x0d: keynum=key_value[4];break;

case 0x0b: keynum=key_value[8];break;

case 0x07: keynum=key_value[12];break;

default:break;

}

PORTD=0xdf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[1];break;

case 0x0d:keynum=key_value[5];break;

case 0x0b:keynum=key_value[9];break;

case 0x07:keynum=key_value[13];break;

default:break;

}


PORTD=0xbf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[2];break;

case 0x0d:keynum=key_value[6];break;

case 0x0b:keynum=key_value[10];break;

case 0x07:keynum=key_value[14];break;

default:break;

}

PORTD=0x7f;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[3];break;

case 0x0d:keynum=key_value[7];break;

case 0x0b:keynum=key_value[11];break;

case 0x07:keynum=key_value[15];break;

default:break;

}

while((PIND&0x0f)!=0x0f);

}


return keynum;

}


void process(uint i,uchar *q) //拆分BCD碼函數,顯示千、百、十、個位

{ q[0]=i/1000;

i=i%1000;

q[1]=i/100;

i=i%100;

q[2]=i/10;

i=i%10;

q[3]=i;

}


void main(void)

{port_init();

PORTB=0xff;

PORTA=0X00;

delay(50);

PORTA=0xff;

while(1)

{get_key();

count=keynum;

process(count,data);

display(data);

}

}

閱讀全文

與單片機數碼管電子鍾相關的資料

熱點內容
php修改資料庫欄位 瀏覽:430
老司機看片入口 瀏覽:890
梁山正信樓電影院買票入口 瀏覽:59
消失的眼角膜未刪減版 瀏覽:196
目前安卓平板什麼處理器最好 瀏覽:528
中考幫pdf 瀏覽:678
愛搞影視網站 瀏覽:566
我要片子的網站 瀏覽:501
androidx軸y軸 瀏覽:556
簡愛演員表英國1970 瀏覽:698
我在電影院給他了會不會被拍到 瀏覽:480
校園兩個女生同性戀電影 瀏覽:17
三菱應用基礎與編程入門 瀏覽:68
java路徑創建文件夾 瀏覽:656
captureone預設文件夾 瀏覽:684
exe類型的解壓到哪裡去了 瀏覽:188
拆下來的硬碟怎麼加密 瀏覽:167
好看的小說百度雲網盤 瀏覽:704
法國電影love 瀏覽:40
泰國電影女拳 瀏覽:386