⑴ 怎樣利用51單片機實現時鍾功能程序
#define uchar unsigned char // (先定義一下方便使用)
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一個52標准內核的頭文件
uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code ziwei[]={0x10,0x20,0x40,0x80};
uchar *h,*m;
uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec;
sbit dp=P0^7;
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit sound=P2^3;
sfr ZIXING=0x80; //p0口輸出字形
sfr ZIWEI=0xa0; //P2口輸出字位
typedef enum //枚舉類型:4種狀態//
{
CLOCK,
SET_RING1,
SET_RING2,
MIAOBIAO_RUN,
}STATE;
STATE status;
typedef struct //定時時間的數據結構//
{
uchar hour;
uchar min;
}DINGSHI_TIME;
DINGSHI_TIME dingshi_time[2];
#define NO_KEY -1 //定義一下方便使用
#define KEY_1 1
#define KEY_2 2
#define KEY_3 3
bit show_on_flag;
//#######定時器T0中斷服務程序########//
Timer0() interrupt 1
{
TH0=0x3c;TL0=0xb4; //50ms
ms_50++;
if(ms_50==20) {sec++;ms_50=0;}
if(sec==60) {sec=0;min++;}
if(min==60) {min=0;hour++;}
if(hour==24) {hour=0;}
}
//#######定時器T1中斷服務程序########//
Timer1() interrupt 3
{
TH1=0xd8;TL1=0xf4; //10ms
ms_10++;
if(ms_10==100)
{
miaobiao_sec++;
ms_10=0;
}
if(miaobiao_sec==60)
miaobiao_sec=0;
}
//##############數碼管顯示#####################//
show(uchar time_high,uchar time_low)
{
uchar m;
uint n,k;
k=time_high*1000/10+time_low;
for(m=0;m<4;m++)
{
ZIXING=zixing[k%10];
if(ms_50<10)
dp=0;
ZIWEI=~ziwei[m];
for(n=0;n<500;n++);
ZIXING=0xff;
for(n=0;n<100;n++);
k=k/10;
}
}
//顯示 on 定時編號//
show_on(uchar id) //id:定時編號//
{
uchar m;
uint n;
for(m=0;m<2;m++)
{
ZIXING=zixing[id%10];
dp=0;
ZIWEI=~ziwei[m];
for(n=0;n<500;n++);
ZIXING=0xff;
for(n=0;n<80;n++);
id=id/10;
}
ZIXING=0xc8; //字母n//
ZIWEI=~ziwei[2];
for(n=0;n<500;n++);
ZIXING=0xff;
for(n=0;n<200;n++);
ZIXING=0xc0; //字母0//
ZIWEI=~ziwei[3];
for(n=0;n<500;n++);
ZIXING=0xff;
for(n=0;n<200;n++);
}
/*************啟動秒錶***************/
void run_miaobiao()
{
ms_10=0;
miaobiao_sec=0;
TH1=0xd8; //標準是0xd8e4
TL1=0xf4;
// TR1=1; //啟動定時器1
}
⑵ 單片機中時鍾、晶振分別是起什麼作用的
晶振用來提供時鍾頻率,時鍾頻率決定了單片機執行的快慢。沒有晶振,就沒有時鍾周期,沒有時鍾周期,就無法執行程序代碼,單片機就無法工作。
單片機工作時,是一條一條地從RoM中取指令,然後一步一步地執行。單片機訪問一次存儲器的時間,稱之為一個機器周期,這是一個時間基準。一個機器周期包括12個時鍾周期。如果一個單片機選擇了12MHz晶振,它的時鍾周期是1/12us, 它的一個機器周期是12X (1/12)us,也就是1us。
(2)帶時鍾的單片機擴展閱讀
每個單片機系統里都有晶振,全程是叫晶體震盪器,在單片機系統里晶振的作用非常大,他結合單片機內部的電路,產生單片機所必須的時鍾頻率,單片機的一切指令的執行都是建立在這個基礎上的,晶振的提供的時鍾頻率越高,那單片機的運行速度也就越快。
晶振通常與鎖相環電路配合使用,以提供系統所需的時鍾頻率。如果不同子系統需要不同頻率的時鍾信號,可以用與同一個晶振相連的不同鎖相環來提供。
⑶ 關於單片機內部時鍾和外部時鍾的問題
答:當單片機有內部時鍾的時候。其工作的時候是可以用內部時鍾和自己接外部時鍾。
這個是沒有硬性要求的,但是一般都用外部時鍾,因為外部時鍾比較穩定可靠。但是如果你想電路簡單也可用內部時鍾,不接外部時鍾。這個也是可以的。使用起來沒有什麼差別。