用51单片机设计一个数码管计时器程序。从00~~59,增加一个用一秒钟。

我写了一个,不过有问题(我的数码管为 共阴极)。不能正常显示,求大神给我指点指点,帮我修改一下。如果有更好的,也可以帮忙写一个。谢谢了,急用。用C语言#include<reg52.h>#include<hjc52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};sbit jsq_s = P2^0; //定义数码管阳级控制脚(十位)sbit jsq_g = P2^1; //定义数码管阳级控制脚(个位)//函数声明:void display(unsigned char da);//定义显示函数,参数为显示内容,只显示两位数void delay(void); void main(void) { uchar i=0; //作为查表的索引号 uchar ldata; //变量用作0~59计数 uint j; //此变量作为计数跳变刷新时间 while(1) { j=5000; while(j--){ display(ldata); //刷新5000次,约1秒,注:在C语言里是没有周期可计算的哦~~~ } if(ldata<59) ldata++; //刷新完成约1秒,变量做加计数 else ldata=0; }}void display(unsigned char da){ jsq_s=0; //选择十位数码管 P0=table[da/10]; //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9 delay(); //延时 P0=0x00; //清除数码管显示,因是共阴型,所以是0 jsq_s=1; //关闭十位数码管 jsq_g=0; //选择个位数码管 P0=table[da%10]; //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9 delay(); //延时 P0=0x00; //清除数码管显示,因是共阴型,所以是0 jsq_g=1; //关闭个位数码管}//延时子函数,短暂延时void delay(void){ unsigned char i=10; while(i--);}
2026年09月21日 22:05
有1个网友回答
网友(1):

试着把P0=00放到jsq_s=1,后面,各位的也一样!!!