这是我的课程设计,6个数码管,显示时分秒,三个按钮、、可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。#include#define uchar unsigned char int i;//**********************************************************************时钟的uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef}; //NPN,阿拉伯数码(共阳数码管专用)//uchar one[10]={0x40,0x4f,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //PNP三极管,低电平使能uchar three[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //扫描int num[6]={2,3,5,9,3,6};uint a,t,d; void time(); //计时void turn(); //调时 void delay(int); //延时 //***********************************************************************彩灯的uchar light[24]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff, 0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e}; int n,m=6,h;void go(); //====================================主函数======================================== void main(){ TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; //允许计数 ET0=1; //允许中断 EA=1; for(;;) //主循环 { time(); for(a=0;a<6;a++) { P3=three[a]; //扫描 P1=one[num[a]]; delay(1); } turn(); go(); } }//=====================================中断函数=================================void work()interrupt 1 using 0 { t++; //时钟时间 h++;}//=====================================计时子函数================================void time() { if(t>=4000) //中断了4000次,一秒 { t=0; num[5]++; if(num[5]>9) //1 { num[5]=0; num[4]++; } if(num[4]>5) //2 { num[4]=0; num[3]++; } if(num[3]>9) //3 { num[3]=0; num[2]++; } if(num[2]>5) //4 { num[2]=0; num[1]++; } if(num[1]>9) //5 { num[1]=0; num[0]++; } if(num[0]>1) //6 if(num[1]>3) { num[0]=0; num[1]=0; } }}//====================================调时子程序===========================================void turn(){ if(P0_0==0) //小时 { delay(5); if(P0_0==0) { num[1]++; if(num[1]>9) { num[1]=0; num[0]++; } if(num[0]>1) if(num[1]>3) { num[0]=0; num[1]=0; } } while(P0_0==0); } if(P0_1==0) //分钟 { delay(5); if(P0_1==0) { num[3]++; if(num[3]>9) { num[3]=0; num[2]++; } if(num[2]>5) { num[2]=0; } } while(P0_1==0); } if(P0_2==0) { delay(5); if(P0_2==0) { num[5]++; if(num[5]>9) { num[5]=0; num[4]++; } if(num[4]>5) num[4]=0; } while(P0_2==0); }}//========================================彩灯===========================================void go(){ if(h>=500*m) //1000=秒 { h=0; P2=light[n]; n++; } if(n==24) { n=0; m--; } if(m==0) m=6;}//=====================================延时子程序==========================================void delay(int c){ for(i=0;i<30*c;i++);}