wo是菜鸟求助:单片机驱动数码管段码可以随便的使用几个口驱动吗(P0 P1 P2 P3)如何设置

2020-01-27 11:46发布

水平低,只会模仿,高手莫怪。
做的定时器,原来使用的是P1接数码管abcdefg.
现在我想把单片机直接焊接在数码管上,这样的话引脚接口就不能一一对应了,想改程序改变接口的,可是程序里面没段码定义引脚,只有位码的。
这样就难了,不知道如何改啊?
水平低,说的不知道大家能不能看明白?
文化低,不会说,想到啥说啥,前辈莫怪,谢谢了。
我就是想做个定时开关,使用AT89C2051单片机,或者STC15F104E单片机,可以定时开、定时关。
电路越简单越好,因为自己焊工差、再加上视力差,挺难的,但是我就是喜欢折腾这些小玩意啊,就这一点点爱好,不能埋没了啊,呵呵!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
shejian001
1楼-- · 2020-01-29 01:01
另外就是我手上的晶振跟原作者的不一样在哪里设置呢?
keil软件输出选项有个晶振频率填写处,我的默认是24
设置这里可以吗?
shejian001
2楼-- · 2020-01-29 05:50
大家看看这个程序哪里有问题?
按设置键无效

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint b;
uchar c,e;
char h,m;
uchar gewei,shiwei,baiwei,qianwei;//a为模式标
志,
//mswc为模式选择完成标
志,gewei,shiwei,baiwei,qianwei
//为个位寄存器,十位寄存器,百位寄存器,
千位寄存器
sbit qian =P3^7;
sbit bai =P3^5;
sbit shi =P3^4;
sbit ge =P3^1;
sbit out =P3^3;
sbit set =P3^2;//设置键
sbit up =P3^0;//加
sbit md =P1^7;//秒点
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z);
void display();
void delay(uchar z)
        {
          uint x,y;
             for(x=z;x>0;x--)
                for(y=74;y>0;y--);
         }
         void main()//定时模式
        {
                                    out=0;
              EA=1;
              EX0=1;//开set键中断
              ET0=1;//开定时器0做计时基准
              TMOD=0x02;
              TH0=(256-240);
              TL0=(256-240);
              b=0;
              c=0;
              e=1;//在定时模式中第一次按SET键
时个位闪烁
              m=0;
              h=0;
              h=qianwei*10+baiwei;
              m=shiwei*10+gewei;
              TR0=0;
              while(1)
                      {
                              if(up==1)//按下SET键时的
显示程序根据按下的次序显示
                                      {
                                              switch(e)
                                                      {
                                                              case 0://
定时进行中的显示
display();
break;
                                                              case 1://
个位闪烁
02/06/2011 14:22:14 PAGE 2
P1=table[gewei];
ge=1;
shi=0;
bai=0;
qian=0;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
                                                              case 2://
十位闪烁
P1=table[shiwei];
ge=0;
shi=1;
bai=0;
qian=0;
delay(250);
ge=0;
shi=00;
bai=0;
qian=0;
delay(250);
break;
                                                              case 3:
P1=table[baiwei];
ge=0;
shi=0;
bai=1;
qian=0;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
                                                              case 4:
P1=table[qianwei];
ge=0;
shi=0;
bai=0;
qian=1;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
                                                      }
                                      }
                              if(up==0)//当UP键按下时
                              {
                                      delay(10);
                                      if (up==0)
                                              while(!up);
                                              switch(e)
                                                      {
                                                              case 1:
gewei++;
                                                                      if
(gewei>9)
gewei=1;
break;
                                                              case 2:
shiwei++;
                                                                      if
(shiwei>5)
shiwei=1;
break;
                                                              case 3:
baiwei++;
                                                                      if
(baiwei>9)
baiwei=1;
break;
                                                              case 4:
qianwei++;
                                                                      if
(qianwei>9)
qianwei=1;
break;
                                                      }
                                                      h=
(qianwei*10+baiwei);
                                                      m=
(shiwei*10+gewei);
                              }
                      }
      }
          void EX0_set()interrupt 0//set键
      {
                      EX0=0;
                      delay(10);
                      if(set==0)
                              {
                                      while(!set);
                                      TR0=0;
                                      e=e++;
                                      if(e>4)
                                              {
                                                      e=0;
                                                      TR0=1;//第五
次按SET键则开始定时
                                                                  out=1;
                                              }
                              }
                              EX0=1;
      }
       void t0_time() interrupt 1
       {
              b=b++;
              if(b>=1250)
                      {
                              b=0;
                              c=c++;
                      }
                              if(c>=120)
                                      {
                                              c=0;
                                               m=m--;
                                      }
                                      if(m==0)
                                              if(h==0)
                                                      {          //当定
时时间到后关闭定时器1,显示00:00不闪烁
                                                              ET0=0;
                                                              TR0=0;
                                                              P1=table
[0];
                                                              md=0;
                                                              while(1)
                                                              {
out=0;
ge=1;
shi=1;
bai=1;
qian=1;//全亮,继电器动作,整个程序将停
在这里。
                                                              }
                                                      }
                                      if(m<0)
                                              {
                                                      m=59;
                                                      h=h--;
                                              }
      }
      void display()
              {
                              P1=0xff;//消隐
                              ge=1;
                              shi=0;
                              bai=0;
                              qian=0;
                              P1=table[m%10];//gewei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=1;
                              bai=0;
                              qian=0;
                              P1=table[m/10];//shiwei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=0;
                               bai=1;
                              qian=0;
                              P1=table[h%10];//baiwei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=0;
                              bai=0;
                              qian=1;
                              P1=table[h/10];//qianwei
                              delay(2);
                              md=c%2;
                              delay(2);
              }
shejian001
3楼-- · 2020-01-29 08:37
 精彩回答 2  元偷偷看……
shejian001
4楼-- · 2020-01-29 08:39
不知道怎么回事?设置好后时间不走。

一周热门 更多>