找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求高手能在不影响程序使用的前期下把两个程序合成一个程序

[复制链接]
跳转到指定楼层
楼主
ID:271839 发表于 2018-1-9 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序一:数码管动态显示
#include <reg52.h>

/*
*                数码管动态显示学号
*                          朱建康
*/
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit led3 = P3^5;
sbit led4 = P3^4;

//数码管0~9缓存
unsigned char code LedChar[]={
        0x82, 0xE7, 0x2A, 0x26, 0x47, 0x16, 0x12, 0xA7,
        0x02, 0x06};
//学号:150401114
unsigned char IDBuff[] = {
        0xFF, 0x7F, 0x7F, 0x7F, 0x43, 0x1a, 0xda, 0xda,
        0x82, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF,
        0xFF};
unsigned char LedBuff[9];
unsigned char flag_200ms = 0;
/*
*  主函数
*/
void main(void)
{
        unsigned char t = 0;
        TMOD = 0X01;
        TH0 = 0XFC;
        TL0 = 0X67;
        TR0 = 1;
        EA = 1;
        ET0 = 1;

        while(1)
        {
                if(flag_200ms == 1)
                {
                        flag_200ms = 0;
                        LedBuff[0] = IDBuff[t];
                        LedBuff[1] = IDBuff[t+1];
                        LedBuff[2] = IDBuff[t+2];
                        LedBuff[3] = IDBuff[t+3];

                        t++;
                        if(t>=18) t = 0;
                }
        }

}

void InterruptTime0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char cnt = 0;
        TH0 = 0xFC;
        TL0 = 0X67;       

        cnt++;

        if(cnt>200)
        {
                cnt = 0;
                   flag_200ms = 1;
        }

        P2 = 0xFF;        //消隐
        switch(i)
        {
                case 0: led1=0; led2=1; led3=1; led4=1; i++; P2=LedBuff[0]; break;
                case 1: led1=1; led2=0; led3=1; led4=1; i++; P2=LedBuff[1]; break;
                case 2: led1=1; led2=1; led3=0; led4=1; i++; P2=LedBuff[2]; break;
                case 3: led1=1; led2=1; led3=1; led4=0; i=0; P2=LedBuff[3]; break;
                default: break;
        }
}


程序二:蜂鸣器放歌
#include <STC15F2K60S2.h>

unsigned char Count;
sbit _Speak =P5^4;
unsigned char code SONG[] ={      //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00
};

void Time1_Init()
{
TMOD = 0x10;
IE   = 0x82;
TH1  = 0xD8;
TL1  = 0xEF;  //12MZ晶振,10ms
}

void Time0_Int() interrupt 3
{
TH1 = 0xD8;
TL1 = 0xEF;
Count++;   //长度加1
}

/*-------------------------------------------------
功能:1MS延时子程序
-------------------------------------------------*/
void Delay_xMs(unsigned int x)
{
    unsigned int i,j;
    for( i =0;i < x;i++ )
    {
        for( j =0;j<3;j++ );
    }
}

void Play_Song(unsigned char i)
{
unsigned char Temp1,Temp2;
unsigned int Addr;
Count = 0;      //中断计数器清0
Addr = i * 217;
while(1)
{
  Temp1 = SONG[Addr++];
     if ( Temp1 == 0xFF )          //休止符
     {
      TR1 = 0;
      Delay_xMs(100);
     }
     else if ( Temp1 == 0x00 )   //歌曲结束符
     {
      return;
     }
     else
     {
      Temp2 = SONG[Addr++];
      TR1 = 1;
     while(1)
     {
       _Speak = ~_Speak;
       Delay_xMs(Temp1);
       if ( Temp2 == Count )
       {
        Count = 0;
        break;
       }
      }
     }
}
}
/*-------------------------------------------------
功能:主程序
-------------------------------------------------*/
void main()
{
Time1_Init();   //定时器0中断初始化
while(1)
{
  Play_Song(0);  //播放
}
}


PS:我使用的是IAPF2K60S2(stc15F2K60S2)

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

使用道具 举报

沙发
ID:271839 发表于 2018-1-9 22:54 | 只看该作者
求各位大佬帮助 拜谢
回复

使用道具 举报

板凳
ID:123289 发表于 2018-1-10 00:42 | 只看该作者
不要说是两个,十个八也不在话下。关键是你如何构思!
你不会构思,就先学画流程框图,一步步来,流程走通了,再依流程写程序。
记住写程序的关键不在写语句上,而是在构思流程上。试作画出框图吧。
看别人的案例,重点是看通他人的流程图,之后对照流程图看程序,这样才能理解,才能学到东西。
回复

使用道具 举报

地板
ID:231046 发表于 2018-1-10 08:55 | 只看该作者
对的,程序就是按要求实现特定的功能 ,要怎么实现完全看写程序人的思想,如去北京可以坐火车,也可以坐飞机,也可以走路,,一样的道理
回复

使用道具 举报

5#
ID:271839 发表于 2018-1-10 10:40 | 只看该作者
yzwzfyz 发表于 2018-1-10 00:42
不要说是两个,十个八也不在话下。关键是你如何构思!
你不会构思,就先学画流程框图,一步步来,流程走通 ...

能不能先帮我合一下 暂时有点急
回复

使用道具 举报

6#
ID:258566 发表于 2018-1-10 10:53 | 只看该作者
楼主,首先程序要正确,才能合并。变量t没有定义,定时器1没有启动。tr1
回复

使用道具 举报

7#
ID:258566 发表于 2018-1-10 10:57 | 只看该作者
本帖最后由 cccc888 于 2018-1-10 11:26 编辑

//#include <reg52.h>
#include <STC15F2K60S2.h>
/*
*                数码管动态显示学号
*                          朱建康
*/
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit led3 = P3^5;
sbit led4 = P3^4;
unsigned char t;
//数码管0~9缓存
unsigned char code LedChar[] = {
        0x82, 0xE7, 0x2A, 0x26, 0x47, 0x16, 0x12, 0xA7,
        0x02, 0x06
};
//学号:150401114
unsigned char code IDBuff[] = {
        0xFF, 0x7F, 0x7F, 0x7F, 0x43, 0x1a, 0xda, 0xda,
        0x82, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF,
        0xFF
};
unsigned char LedBuff[9];
unsigned char flag_200ms = 0;
/*
*  主函数
*/
//void main(void)
//{
//unsigned char t = 0;
//TMOD = 0X01;
//TH0 = 0XFC;
//TL0 = 0X67;
//TR0 = 1;
//EA = 1;
//ET0 = 1;

//while(1)
//{
//if(flag_200ms == 1)
//{
//flag_200ms = 0;
//LedBuff[0] = IDBuff[t];
//LedBuff[1] = IDBuff[t+1];
//LedBuff[2] = IDBuff[t+2];
//LedBuff[3] = IDBuff[t+3];

//t++;
//if(t>=18) t = 0;
//}
//}

//}

void InterruptTime0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char cnt = 0;
        TH0 = 0xFC;
        TL0 = 0X67;

        cnt++;

        if (cnt > 200)
        {
//flag_200ms = 0;
                LedBuff[0] = IDBuff[t];
                LedBuff[1] = IDBuff[t + 1];
                LedBuff[2] = IDBuff[t + 2];
                LedBuff[3] = IDBuff[t + 3];

                t++;
                if (t >= 18)
                        t = 0;
        }

        P2 = 0xFF;        //消隐
        switch (i)
        {
                case 0:
                        led1 = 0;
                        led2 = 1;
                        led3 = 1;
                        led4 = 1;
                        i++;
                        P2 = LedBuff[0];
                        break;
                case 1:
                        led1 = 1;
                        led2 = 0;
                        led3 = 1;
                        led4 = 1;
                        i++;
                        P2 = LedBuff[1];
                        break;
                case 2:
                        led1 = 1;
                        led2 = 1;
                        led3 = 0;
                        led4 = 1;
                        i++;
                        P2 = LedBuff[2];
                        break;
                case 3:
                        led1 = 1;
                        led2 = 1;
                        led3 = 1;
                        led4 = 0;
                        i = 0;
                        P2 = LedBuff[3];
                        break;
                default:
                        break;
        }
}

//程序二:蜂鸣器放歌
//#include <STC15F2K60S2.h>

unsigned char Count;
sbit _Speak = P5 ^ 4;
unsigned char code SONG[] = {        //祝你平安
        0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x10, 0x20, 0x10, 0x20, 0x80, 0x26, 0x20, 0x30, 0x20,
        0x30, 0x20, 0x39, 0x10, 0x30, 0x10, 0x30, 0x80, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1c, 0x20,
        0x20, 0x80, 0x2b, 0x20, 0x26, 0x20, 0x20, 0x20, 0x2b, 0x10, 0x26, 0x10, 0x2b, 0x80, 0x26, 0x20,
        0x30, 0x20, 0x30, 0x20, 0x39, 0x10, 0x26, 0x10, 0x26, 0x60, 0x40, 0x10, 0x39, 0x10, 0x26, 0x20,
        0x30, 0x20, 0x30, 0x20, 0x39, 0x10, 0x26, 0x10, 0x26, 0x80, 0x26, 0x20, 0x2b, 0x10, 0x2b, 0x10,
        0x2b, 0x20, 0x30, 0x10, 0x39, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x20, 0x2b, 0x40, 0x40, 0x20,
        0x20, 0x10, 0x20, 0x10, 0x2b, 0x10, 0x26, 0x30, 0x30, 0x80, 0x18, 0x20, 0x18, 0x20, 0x26, 0x20,
        0x20, 0x20, 0x20, 0x40, 0x26, 0x20, 0x2b, 0x20, 0x30, 0x20, 0x30, 0x20, 0x1c, 0x20, 0x20, 0x20,
        0x20, 0x80, 0x1c, 0x20, 0x1c, 0x20, 0x1c, 0x20, 0x30, 0x20, 0x30, 0x60, 0x39, 0x10, 0x30, 0x10,
        0x20, 0x20, 0x2b, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x26, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x80,
        0x18, 0x20, 0x18, 0x20, 0x26, 0x20, 0x20, 0x20, 0x20, 0x60, 0x26, 0x10, 0x2b, 0x20, 0x30, 0x20,
        0x30, 0x20, 0x1c, 0x20, 0x20, 0x20, 0x20, 0x80, 0x26, 0x20, 0x30, 0x10, 0x30, 0x10, 0x30, 0x20,
        0x39, 0x20, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x20, 0x2b, 0x40, 0x40, 0x10, 0x40, 0x10, 0x20, 0x10,
        0x20, 0x10, 0x2b, 0x10, 0x26, 0x30, 0x30, 0x80, 0x00
};

//void Time1_Init()
//{
        //TMOD = 0x10;
        //IE = 0x82;
        //TH1 = 0xD8;
        //TL1 = 0xEF;        //12MZ晶振,10ms
//}

void Time0_Int() interrupt 3
{
        TH1 = 0xD8;
        TL1 = 0xEF;
        Count++;        //长度加1
}

/*-------------------------------------------------
   功能:1MS延时子程序
   ------------------------------------------------- */
void Delay_xMs(unsigned int x)
{
        unsigned int i, j;
        for (i = 0; i < x; i++)
        {
                for (j = 0; j < 3; j++) ;
        }
}

void Play_Song(unsigned char i)
{
        unsigned char Temp1, Temp2;
        unsigned int Addr;
        Count = 0;        //中断计数器清0
        Addr = i * 217;
        while (1)
        {
                Temp1 = SONG[Addr++];
                if (Temp1 == 0xFF)        //休止符
                {
                        TR1 = 0;
                        Delay_xMs(100);
                }
                else if (Temp1 == 0x00)        //歌曲结束符
                {
                        return;
                }
                else
                {
                        Temp2 = SONG[Addr++];
                        TR1 = 1;
                        while (1)
                        {
                                _Speak = ~_Speak;
                                Delay_xMs(Temp1);
                                if (Temp2 == Count)
                                {
                                        Count = 0;
                                        break;
                                }
                        }
                }
        }
}
/*-------------------------------------------------
   功能:主程序
   ------------------------------------------------- */
void main()
{
        //unsigned char t = 0;
        TMOD = 0X11;
        TH0 = 0XFC;
        TL0 = 0X67;
        TR0 = 1;
        EA = 1;
        ET0 = 1;        ET1 = 1;
        //IE = 0x82;//8a
        TH1 = 0xD8;
        TL1 = 0xEF;        //12MZ晶振,10ms
        TR1 = 1;
//Time1_Init();   //定时器0中断初始化
        while (1)
        {
                Play_Song(0);        //播放
        }
}

//PS:我使用的是IAPF2K60S2(stc15F2K60S2)



回复

使用道具 举报

8#
ID:271839 发表于 2018-1-10 11:26 | 只看该作者
yzwzfyz 发表于 2018-1-10 00:42
不要说是两个,十个八也不在话下。关键是你如何构思!
你不会构思,就先学画流程框图,一步步来,流程走通 ...

能不能帮我操作一下 我现在急着用
回复

使用道具 举报

9#
ID:271839 发表于 2018-1-10 11:52 | 只看该作者
cccc888 发表于 2018-1-10 10:53
楼主,首先程序要正确,才能合并。变量t没有定义,定时器1没有启动。tr1

我刚开始学这个 是小白  能不能帮我弄一下 谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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