|
所有代碼,原理圖在附件,希望大佬不嫌麻煩指點一下
部分代碼如下
//頭文件聲明區域
#include <STC15F2K60S2.H>
#include <Key.h>
#include <Seg.h>
#include <channel.h>
#include <ds1302.h>
//變量聲明區
unsigned int Key_Val,Key_Down,Key_Old,Key_Up;//按鍵掃描專用變量
unsigned int Key_Slow_Down;//按鍵減速專用變量,小 10ms
unsigned int Seg_Slow_Down;//數碼管減速專用變量,大 500ms
unsigned int LED_Slow_Down;
unsigned char Seg_Buf[8] = {10,10,10,10,10,10,10,10};//數碼管顯示數據存放數組
unsigned char Seg_Pos;//數碼管掃描專用變量
unsigned char ucrtc[3] = {0x00,0x00,0x00};
sbit LSA=P2^5;
sbit LSB=P2^6;
sbit LSC=P2^7;
/* 鍵盤處理函數 */
void Key_Proc()
{
if(Key_Slow_Down) return;
Key_Slow_Down = 1;//鍵盤減速程序
Key_Val = Key_read();//實時讀取鍵碼值
Key_Down = Key_Val & (Key_Old ^ Key_Val);//捕捉按鍵下降沿
//Key_Up = ~Key_Val & (Key_Old ^ Key_Val);//捕捉按鍵上降沿
Key_Old = Key_Val;//輔助掃描變量
}
/* 信息處理函數 */
void Seg_Proc()
{
if(Seg_Slow_Down) return;
Seg_Slow_Down = 1;//數碼管減速程序
//信息讀取區域
Read_rtc(ucrtc);
//數據處理區域
Seg_Buf[0]=ucrtc[0]/16;
Seg_Buf[1]=ucrtc[0]%16;
Seg_Buf[2]=10;
Seg_Buf[3]=ucrtc[1]/16;
Seg_Buf[4]=ucrtc[1]%16;
Seg_Buf[5]=10;
Seg_Buf[6]=ucrtc[2]/16;
Seg_Buf[7]=ucrtc[2]%16;
}
/* 其他顯示函數 */
void Led_Proc()
{
}
/* 定時器0中斷初始化函數 */
void Timer0_Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x66; //設置定時初始值
TH0 = 0xFC; //設置定時初始值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
ET0 = 1; //定時器0中斷允許開關
EA = 1 ; //總中斷允許開關
}
/* 定時器0中斷服務函數 */
void Timer0Server() interrupt 1
{
TL0 = 0x66; //設置定時初始值
TH0 = 0xFC; //設置定時初始值
if(++Key_Slow_Down == 10) Key_Slow_Down = 0;//鍵盤減速專用
if(++Seg_Slow_Down == 100) Seg_Slow_Down = 0;//數碼管減速專用
if(++Seg_Pos == 8) Seg_Pos = 0;//數碼管顯示專用
}
//主函數
void main()
{
Timer0_Init();
Set_rtc(ucrtc);
while (1)
{
Key_Proc();
Seg_Proc();
Led_Proc();
}
}
數碼管驅動部分
#include <Seg.h>
unsigned char Dula[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned char Wela[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Seg_disp(unsigned char wela,dula)
{
HC753(7);
P0=0XFF;//消影
HC753(6);
P0=Wela[wela];
HC753(7);
P0=Dula[dula];
}
channle部分
#include <STC15F2K60S2.H>
sbit LSA=P2^5;
sbit LSB=P2^6;
sbit LSC=P2^7;
void HC753(unsigned char channel)//三八譯碼器方式選擇
{
switch(channel)
{
case 0:LSC=0;LSB=0;LSA=0;break;
case 4:LSC=1;LSB=0;LSA=0;break;
case 5:LSC=1;LSB=0;LSA=1;break;
case 6:LSC=1;LSB=1;LSA=0;break;
case 7:LSC=1;LSB=1;LSA=1;break;
}
}
|
|