找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3687|回復(fù): 2
收起左側(cè)

獨立式鍵盤調(diào)時的數(shù)碼時鐘實驗

[復(fù)制鏈接]
ID:82732 發(fā)表于 2015-9-25 15:10 | 顯示全部樓層 |閱讀模式
#include<reg51.h> // 包含51單片機寄存器定義的頭文件
unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)字0~9的段碼
unsigned char int_time ; //中斷次數(shù)計數(shù)變量
unsigned char second; //秒計數(shù)變量
unsigned char minute; //分鐘計數(shù)變量
unsigned char hour; //小時計數(shù)變量
sbit S1=P1^4; //將S1位定義為P1.4
sbit S2=P1^5; //將S2位定義為P1.5
sbit S3=P1^6; //將S3位定義為P1.6
sbit S4=P1^7; //將S4位定義為P1.7
/******************************************************************
函數(shù)功能:數(shù)碼管掃描延時
********************************************************************/
void delay(void)
{
unsigned char j;
for(j=0;j<200;j++)
;
}
/******************************************************************
函數(shù)功能:鍵盤掃描延時
********************************************************************/
void delay60ms(void)
{
unsigned char i,j;
for(i=0;i<200;i++)
for(j=0;j<100;j++)
;
}
/******************************************************************
函數(shù)功能:顯示秒
入口參數(shù):s
********************************************************************/
void DisplaySecond(unsigned char s)
{
P2=0xbf; //P2.6引腳輸出低電平, DS6點亮
P0=Tab[s/10]; //顯示十位
delay();
P2=0x7f; //P2.7引腳輸出低電平, DS7點亮
P0=Tab[s%10]; //顯示個位
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管

}

/******************************************************************
函數(shù)功能:顯示分鐘
入口參數(shù):m
********************************************************************/
void DisplayMinute(unsigned char m)
{
P2=0xf7; // P2.3引腳輸出低電平, DS3點亮
P0=Tab[m/10];//顯示個位
delay();
P2=0xef; // P2.4引腳輸出低電平, DS4點亮
P0=Tab[m%10];
delay();
P2=0xdf; //P2.5引腳輸出低電平, DS5點亮
P0=0xbf; //分隔符“-”的段碼
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管
}
/******************************************************************
函數(shù)功能:顯示小時的子程序
入口參數(shù):h
********************************************************************/
void DisplayHour(unsigned char h)
{

P2=0xfe; //P2.0引腳輸出低電平, DS0點亮
P0=Tab[h/10]; //顯示十位
delay();

P2=0xfd; //P2.1引腳輸出低電平, DS1點亮
P0=Tab[h%10]; //顯示個位
delay();
P2=0xfb; //P2.2引腳輸出低電平, DS2點亮
P0=0xbf; //分隔符“-”的段碼
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管

}
/******************************************************************
函數(shù)功能:鍵盤掃描
********************************************************************/
void key_scan(void)
{
P1=0xf0; //將P1口高4位置高電平“1”
if((P1&0xf0)!=0xf0) //有鍵按下
{
delay60ms(); //延時60ms再檢測
if((P1&0xf0)!=0xf0) //確實有鍵按下
{
if(S1==0) //如果是S1鍵按下
second++; //秒加1
if(S2==0) //如果是S2鍵按下
minute++; //分鐘加1
if(S3==0) //如果是S3鍵按下
hour++; //小時加1
if(S4==0) //如果是S4鍵按下
{
second=0; //秒清0
minute=0; //分鐘清0
hour=0; //小時清0
}
}
}
}
/******************************************************************
函數(shù)功能:主函數(shù)
********************************************************************/
void main(void)
{

TMOD=0x01; //使用定時器T0
EA=1; //開中斷總允許
ET0=1; //允許T0中斷
TH0=(65536-46083)/256; //定時器高八位賦初值
TL0=(65536-46083)%256; //定時器低八位賦初值
TR0=1; //啟動定時器T0
int_time=0; //中斷計數(shù)變量初始化
second=0; //秒計數(shù)變量初始化
minute=0; //分鐘計數(shù)變量初始化
hour=0; //小時計數(shù)變量初始化

while(1)
{
DisplaySecond(second); //調(diào)用秒顯示子程序
DisplayMinute(minute); //調(diào)用分鐘顯示子程序
DisplayHour(hour); //調(diào)用小時顯示子程序

}
}
/******************************************************************
函數(shù)功能:定時器T0的中斷服務(wù)子程序
********************************************************************/
void interserve(void ) interrupt 1 using 1 //using Time0
{
TR0=0; //關(guān)閉定時器T0
int_time++; //中斷次數(shù)加1
if(int_time==20) //如果中斷次數(shù)滿20
{
int_time=0; //中斷計數(shù)變量清0
second++; //秒計數(shù)變量加1
}
if(second==60) //如果秒計滿60
{
second=0; //如果秒計滿60,將秒計數(shù)變量清0
minute++; //分鐘計數(shù)變量加1
}
if(minute==60) //如果分鐘計滿60
{
minute=0; //如果分鐘計滿60,將分鐘計數(shù)變量清0
hour++; //小時計數(shù)變量加1
}
if(hour==24) //如果小時計滿24
{
hour=0; //如果小時計滿24,將小時計數(shù)變量清0
}
key_scan(); //執(zhí)行鍵盤掃描
TH0=(65536-46083)/256; //定時器T0高四位賦值
TL0=(65536-46083)%256; //定時器T0低四位賦值
TR0=1; //啟動定時器T0

}




回復(fù)

使用道具 舉報

ID:194701 發(fā)表于 2017-5-1 16:41 | 顯示全部樓層

 樓主做的太棒了 能分享下電路圖和程序嗎?
回復(fù)

使用道具 舉報

ID:145033 發(fā)表于 2021-4-5 10:39 | 顯示全部樓層
程序中入口參數(shù):s是指什么意思、
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表