文档介绍:. 单片机课程设计姓名:殷新宇学号: 3101109048 班级: J 通信 1002 指导老师:申屠浩. 日历时钟显示一. 设计要求利用 C51 单片机在 LED 显示屏上显示时间, 日历以及闹钟, 并且能够调节时钟, 日历以及闹钟;当时间到达闹钟时间进行闹钟提示。二. 设计任务显示时钟的时,分, 秒位; 显示日历的年,月,日; 能够设置闹铃, 并在达到闹铃时刻有字幕提示三. 设计思想利用延时进行编译时钟秒位走动,根据秒位的走动,进行判断分钟,小时,日期,月份,年份的走动;通过键位输入函数,可以将按键的值输入到 LED 显示屏上,再通过判断语句将输入的值有选择性的输入到时间或者日历或者闹钟上; 通过 LED 显示函数,在 LED 函数中添加一个判断语句,让时钟和闹钟时间相等时在 LED 上显示汉字提醒,并添加在数码管上显示数字函数。四. 程序代码 INIT 文件#include "" #include <> void Delay1us(unsigned char us) { while (us) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); --us; }} void SYSCLK_Init (void) { int i; // delay counter = 0x67; // start external oscillator with // crystal for (i=0; i< 256; i++) ; // Wait for osc. to start up while (!( & 0x80)) ; // Wait for crystal osc. to settle = 0x88; // select external oscillator as SYSCLK // source and enable missing clock // detector // = 0x07; //interal 16MHZ }. #define PRT0CF P0MDOUT #define PRT1CF P1MDOUT #define PRT2CF P2MDOUT void PORT_Init (void) { XBR0 = 0x07; // Enable SMBus, SPI0, and UART0 XBR1 = 0x00; XBR2 = 0x44; // Enable crossbar and weak pull-ups EMI0CF = 0x27; EMI0TC = 0x21; P74OUT = 0xFF; P0MDOUT = 0x15; P1MDOUT |= 0x3C; //- 推挽输出 P1 &= 0xc3; //-=0 } void SPI0_Init (void) { SPI0CFG = 0x07; // data sampled on 1st SCK rising edge // 8-bit data words SPI0CFG|=0xC0; //CKPOL =1; = 0x03; // Master mode; SPI enabled; flags // cleared SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by // EEPROM spec.) } unsigned char Count1ms; short countsec=0; char sec=55; char min=59; char hor=23; char day=31; char mou=7; int year=2013; char s=0; char m=0; char h=0; void Timer0_Init (void) { CKCON|=0x8; . TMOD|=0x1; //16Bit Count1ms=10; TR0 = 0; // STOP Timer0 TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms TL0 = -SYSCLK/1000; TR0 = 1; // START Timer0 IE|= 0x2; } void Timer0_ISR (void) interrupt 1 //1ms { TH0 = (-SYSCLK/1000) >> 8; TL0 = -SYSCLK/1000; if (Count1ms) Count1ms--; countsec++; if (countsec==1000) { countsec=0; sec