初级会员
- 积分
- 56
- 金钱
- 56
- 注册时间
- 2018-7-22
- 在线时间
- 6 小时
|
2金钱
求助!
想用51的定时器做一个可以产生时分秒的时钟,用共阴数码管仿真成功了,准备焊的时候发现没共阴数码管,就想把程序改成共阳的,段码,位码都改了,可数码管不显示,或者乱码,求大神指教(电路图、代码均已附上)
代码如下
#include "reg52.h"
#define codport P0 //段码输出口
#define sitport P2 //位码输出口
unsigned char code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳1-9码
unsigned char data hou,min,sec,num,disbuf[]={0,0,10,0,0,10};
/*显示函数*/
void display()
{
unsigned int j;
unsigned char i,scan; //scan 为输出控制的显示位的位码,也叫扫描码
codport=0;
scan=0x01;
for(i=0;i<6;i++)
{
codport=0; //清屏,显示新内容前不清屏会出现乱码
codport=ledcode[disbuf]; //将要显示的数送至段码口
sitport=scan; //位码口高电平对应位有效
scan=(scan<<1); //指向下一位
for(j=0;j<5;j++); //延时
}
}
/*主函数*/
void main()
{
TMOD=0x01;
TL0=55536%256;
TH0=55536/256;
ET0=1;
EA=1;
TR0=1;
while(1)
display();
}
/*中断函数*/
void time0() interrupt 1
{
TL0=55536%256;
TH0=55536/256;
num=num+1;
if(num==100)
{
num=0;
sec=sec+1;
if(sec==60)
{
sec=0;
min=min+1;
if(min==60)
{
min=0;
hou=hou+1;
if(hou==24)
hou=0;
}
}
disbuf[0]=hou/10; //将时间转换为要显示的数字
disbuf[1]=hou%10;
disbuf[2]=min/10;
disbuf[3]=min%10;
disbuf[4]=sec/10;
disbuf[5]=sec%10;
}
}
|
-
最佳答案
查看完整内容[请看2#楼]
已解决,问题出在第11行清屏代码,段码与位码我改了,但忘了一个重要的地方,清屏,共阴数码管是高电平点亮,所以要低电平清屏;而共阳数码管是低电平点亮,所以要高电平清屏,将代码改为codport=0xff即可
|