OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5039|回复: 6

【求助】利用51定时器做时分秒时钟

[复制链接]

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
发表于 2018-7-23 19:38:07 | 显示全部楼层 |阅读模式
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;
}
}



电路图、.png

最佳答案

查看完整内容[请看2#楼]

已解决,问题出在第11行清屏代码,段码与位码我改了,但忘了一个重要的地方,清屏,共阴数码管是高电平点亮,所以要低电平清屏;而共阳数码管是低电平点亮,所以要高电平清屏,将代码改为codport=0xff即可
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
 楼主| 发表于 2018-7-23 19:38:08 | 显示全部楼层
已解决,问题出在第11行清屏代码,段码与位码我改了,但忘了一个重要的地方,清屏,共阴数码管是高电平点亮,所以要低电平清屏;而共阳数码管是低电平点亮,所以要高电平清屏,将代码改为codport=0xff即可
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-24 01:36:15 | 显示全部楼层
慢慢研究下,比较喜欢实际仿真,对protues不感冒
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2017-8-6
在线时间
42 小时
发表于 2018-7-24 09:44:23 | 显示全部楼层
单片机IO口不能直接驱动数码管    要用三极管或者 锁存器驱动  
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
 楼主| 发表于 2018-7-24 15:44:08 | 显示全部楼层
zwh的旅程 发表于 2018-7-24 09:44
单片机IO口不能直接驱动数码管    要用三极管或者 锁存器驱动

已解决,仿真不用锁存器也可以的
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
 楼主| 发表于 2018-7-24 15:44:25 | 显示全部楼层
正点原子 发表于 2018-7-24 01:36
慢慢研究下,比较喜欢实际仿真,对protues不感冒

已解决,朋友
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-7-22
在线时间
6 小时
 楼主| 发表于 2018-7-24 15:57:15 | 显示全部楼层
编程真是个细心活儿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 18:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表