找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2180|回复: 6
打印 上一主题 下一主题
收起左侧

新手做的单片机仿真时钟通过编译,但跑不起来,求各位大佬指教

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#define uchar unsigned char;
#define uint unsigend int;
uchar position;
uchar tt;
uchar second;
uchar minute;
uchar hour;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//?????????0-9????
sbit smg_q=P1^0;   //?????????????
sbit smg_b=P1^1;
sbit smg_s=P1^2;
sbit smg_g=P1^3;
  
sbit key1=P3^7; //????4??????
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
void keyscan ();//????????
void display(unsigned char hour,unsigned char minute);
void delay(unsigned int timer);
void init();
void main()
{
init();
while(1)
{
  if(tt==20)
{
  tt=0;
  second++;
  if(second==60)
  {
  second=0;
  minute++;
  if(minute==60)
  {
   minute=0;
   hour++;
   if(hour==24)
   hour=0;
  }
  }
}
keyscan();
display(hour,minute);
delay(1);
}
}
  void keyscan()
  {
    if(key1==0)
{
   TR0=0;
hour++;
if(hour==24)
hour=0;
delay(200);
TR0=1;
  }
if(key2==0)
{
  TR0=0;
hour--;
if(hour<0)
hour=23;
delay(200);
TR0=1;
}
  if(key3==0)
{
  TR0=0;
minute--;
if(minute==60)
minute=0;
delay(200);
TR0=1;
}
if(key4==0)
{
  TR0=0;
minute--;
if(minute<60)
minute=59;
delay(200);
TR0=1;
}
}
  void init()
  {
    tt=0;
  position=0;
  second=0;
  minute=0;
  hour=0;
  smg_q=1;
  smg_b=1;
  smg_s=1;
  smg_g=1;
  key1=1;
  key2=1;
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
  }
  void t0() interrupt 1
  {
    TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  tt++;
  }
  void display(unsigned char hour,unsigned char minute)
  {
  P0=0xff;
  switch(position)
  {
    case 0:
   smg_g=1;
   smg_q=0;
   P0=table[hour/10];
   break;
  case 1:
   smg_q=1;
   smg_b=0;
   P0=table[hour%10];
   
    if(tt>=10);
    P0&=0x7f; //С???????????????
    break;
    case 2:
   smg_b=1;
   smg_s=0;
   P0=table[minute/10];
   break;
     case 3:
   smg_s=1;
   smg_g=0;
   P0=table[minute%10];
   break;
  }
  position++;
  if(position>3)
  position=0;

  }
  void delay(unsigned int time)
  {
   unsigned int x,y;
for(x=time;x>0;x--)
  for(y=110;y>0;y--);
  }

程序通过编译,但在仿真上跑不起来,找了几个小时不知道错在哪,百度找的例子,求解啊大神

002.jpg (119.19 KB, 下载次数: 71)

这是原图

这是原图

001.jpg (185.19 KB, 下载次数: 65)

这个是我花的

这个是我花的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-4-15 11:17 | 只看该作者
编译通过并不表示程序可以实现你想要的功能,仿真不通过并不表示实物不能实现功能。
如果仅求仿真通过,还是找自己的师傅比较合适。
回复

使用道具 举报

板凳
ID:729625 发表于 2020-4-15 12:56 | 只看该作者
可能出现了接线或者实现代码的问题
回复

使用道具 举报

地板
ID:66679 发表于 2020-4-20 20:15 | 只看该作者
改下数码管驱动电路试下

简易电子时钟.png (42.66 KB, 下载次数: 62)

简易电子时钟.png
回复

使用道具 举报

5#
ID:705799 发表于 2020-4-24 21:21 | 只看该作者
程序没问题,我直接烧录运行正常
回复

使用道具 举报

6#
ID:705799 发表于 2020-4-24 21:22 | 只看该作者
我用的89C54,共阳
回复

使用道具 举报

7#
ID:736111 发表于 2020-4-25 00:37 | 只看该作者
你的程序没有问题啊,在我这里运行正常
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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