自己时钟程序,写后发现不能用,所以一步一步来测试,现在是只要求显示分和秒,也不要求设置,p0.7-p0.0通过电阻接的是共阴数码管的a-g,共4个,只要求显示分钟和秒,p2.4-p2.7通过三极管后接它们的公共端,keilC中能正常编译,但是不能正常走时,我分析这算法是没有问题,请大家看看:
#include <reg52.h> typedef unsigned char byte; typedef unsigned int word; static byte buf[5]; byte table[10]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90};//字符表// byte hour=0,minute=0,second=0,ncounter=0; //动态显示函数// void display(void){ byte posi=0x7f; //定义公共端的位置// byte temp,i,j; for(i=0;i<4;i++){ //依次显示4个数码管// temp=buf; temp=table[temp];//查表// for(j=0;j<200;j++){ //延时// P0=temp; P2=posi; } posi>>=1; //显示向右移一位// } } void timedisply(){ //将分秒显示// buf[3]=second/10; buf[2]=second%10; buf[1]=minute/10; buf[0]=minute%10; } //计时函数v void timekeep(void){ if(second>=60){ second=0; minute++; if(minute>=60){ minute=0; hour++; if(hour>=24) hour=0; } timedisply(); } } //中断函数// void time0() interrupt 0 using 0{ TH0 = 0x4C; if(++ncounter==20){ ncounter=0; second++; } timekeep(); } //主函数// void main() { TMOD = 0x01; //采用T0的第1种计数方法// TH0 = 0x4C; //赋初值,计数50ms// ET0 = 1; EA = 1; TF0 = 0; TR0 = 1; while(1){ display();} }
|