普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 5558|回复: 1

[已解决] 51单片机

 关闭 [复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2020-1-4 09:42:25 | 显示全部楼层 |阅读模式
1金钱
请帮我看看这个码表,数码段的数字不显示 ,怎么弄都是显示8.
#include "reg51.h"       //此文件中定义了单片机的一些特殊功能寄存器
//#include "intrins.h"

typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;
#define LCDwei P2
#define LCDduan P1

sbit kaishi = P3^1;         //定义开始键
sbit jishi = P3^0;        //定义计时键
sbit huixian = P3^2; //定义回显键
sbit fuwei = P3^3;         //定义复位键

u16 time_ms;           //定义变量秒
u16 time_s;   //定义变量分
u16 time_min;     //定义变量小时

u8 code shumaduan[] = {0x3f,0x06,0x5b,0x4f,
                       0x66,0x6d,0x7d,0x07,
                       0x7f,0x6f,0x77,0x7c,
                                           0x39,0x5e,0x79,0x71,
                                           0x00,};
u8 code shumawei[] = {0x00,0x04,0x08,0x0c,
                      0x10,0x14,0x18,0x1c};

void delay(u8 i)
{
     while(i--);
}

void tim0()
{
     TMOD |= 0x01;
         TH0 = 0Xd8;  //10ms的初值
         TL0 = 0xf0;  //10ms的初值
         ET0 = 1;
         EA = 1;
         //TR0 = 1;
}
void xianshi(u8 ledwei,u8 ledduan)
{
         LCDwei = shumawei[ledwei];
         delay(10);
         LCDduan = shumaduan[ledduan];
         delay(10);
         LCDduan = shumaduan[16];
                  
}

void display(u8 wei,u8 num)
{
     u8 x,y;
         x = num/10;  //分离十位
         y = num%10;  //分离个位
         if(wei==1)
         {
            xianshi(1,x);
                delay(20);
                xianshi(0,y);
                delay(20);
         }
         if(wei==2)
         {
            xianshi(4,x);
                delay(20);
                xianshi(3,y);
                delay(20);
         }
         if(wei==3)
         {
            xianshi(7,x);
                delay(20);
                xianshi(6,y);
                delay(20);
         }
}

void main()
{
   tim0();
   while(1)
   {
           display(1,12);
       
   }

}

void time0() interrupt 1
{
     TH0 = 0Xd8;
         TL0 = 0xf0;
         time_ms++;
         if(time_ms++>=100)
         {
            time_ms = 0;
                 time_s++;
                if(time_s>=60)
                {
                   time_s = 0;
                   time_min++;
                   if(time_min>=60)
                   {
                      time_min = 0;
                   }

                }
         }
}

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

20

主题

216

帖子

1115

积分

金牌会员

Rank: 6Rank: 6

积分
1115
发表于 2020-1-7 16:51:36 | 显示全部楼层
中级例程里有秒表程序 可以参考一下
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-4 18:44 , Processed in 0.105081 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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