| 今天試著添加段代碼吧。運行于mc68hc908gp32上的電子鐘,顯示在zlg7289的八個七段顯示器上。 聲控電子鐘初具有普通鐘的功能外,還具有15秒鐘休眠功能,此時當(dāng)接收到觸發(fā)端觸發(fā)后,點亮顯示屏,顯示當(dāng)前時間并在15秒后關(guān)閉。以節(jié)省電能。亦可晚上睡眠時使用。 #include <hidef.h> /* for EnableInterrupts macro */ #include <MC68HC908GP32.h> /* include peripheral declarations */ unsigned char counter=0; unsigned char second,minute,hour; unsigned char second0,second1; unsigned char minute0,minute1; unsigned char hour0,hour1; unsigned char gleaming,task; unsigned char hs; #define TskSetHour 0 #define TskSetMinute 1 #define TskSetSecond 2 #define TskPrint 3 #define TskSleep 4 void delay(int); void ScreenOpen(void); void IncreaseTime(void); void Translate(void); void send_command(unsigned char); void send_single_command(unsigned char); void send_double_command(unsigned char); void PrintToZLG7289(void); void GleamingHour(void); void GleamingMinute(void); void GleamingSecond(void); void GleamingNone(void); void ChangeStatus(void); void Increase(void); void Decrease(void); void boot(void); void boot(void) {/*PLL初始化*/ PCTL_BCS=0; PCTL=0x00; //禁止PLL PBWC=0x80; //自動控制方式 PMSH=0x02; //反饋分頻器因子高位N=02H PMSL=0x58; //反饋分頻器因子低位N=58H PMRS=0x80; //因子L=80H PCTL=0x22; //P=0,E=2,啟動PLL PCTL_PLLON=1; //啟動壓控振蕩器時鐘 PBWC_LOCK=0; //LOCK位為0,頻率未穩(wěn)定,等待 PCTL_BCS=1; //頻率已鎖定,選PLL作為時鐘源 } void main(void) { CONFIG2=0x01; //stop模式下禁止振蕩器工作;內(nèi)部總線時鐘用作SCI的時鐘 CONFIG1=0x3d; //COP溢出范圍在2^18-2^4個CGMXCLK時鐘周期;禁止COP模塊 DisableInterrupts; boot(); T1SC=0b01000110; T1MODH=0x96; T1MODL=0x00; DDRA=0x00; DDRC=0x0f; DDRB=0xff; DDRD=0xff; DDRE=0xff; INTKBSCR_MODEK = 1; //選擇觸發(fā)方式為下降沿和低電平 INTKBSCR_IMASKK = 1; //禁止鍵盤中斷 INTKBIER = 0xff; //A口都作為鍵盤輸入 INTKBSCR_ACKK = 1; //鍵盤響應(yīng)置1,用于清除IREQ INTKBSCR_IMASKK = 0; //允許鍵盤中斷 hour=16; minute=27; second=55; hs=0; gleaming=0x0a; task=TskPrint; PTC_PTC0=1; GleamingNone(); EnableInterrupts; for(;;); } void delay(int k){ int i; for (i=0;i<=k;i++); } void ScreenOpen(void){ char i; if (task==TskSleep) counter++; if (counter==15) { for(i=0;i<=8;i++){ delay(30000); delay(30000); |