找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何添加子函数

[复制链接]
跳转到指定楼层
楼主
ID:190966 发表于 2017-4-19 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2黑币
怎么把下面两个函数合在一起呢?
第一个函数:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit csda=P2^2;
sbit wr=P2^1;
sbit s1=P3^2;
sbit s2=P3^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar timeCnt=0;
uchar k=0,p=0,delay=0;
uchar bxxz=0;pinglv=0;
uchar a=1,b=0,c=0,d=0;

//正弦波数据
uchar code zhengxian[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
};
//方波数据报表
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

//锯齿波数据
uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
};

//三角波数据
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
};
void delay1()

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

使用道具 举报

沙发
ID:190966 发表于 2017-4-19 13:55 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit csda=P2^2;
sbit wr=P2^1;
sbit s1=P3^2;
sbit s2=P3^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar timeCnt=0;
uchar k=0,p=0,delay=0;
uchar bxxz=0;pinglv=0;
uchar a=1,b=0,c=0,d=0;

//正弦波数据
uchar code zhengxian[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
};
//方波数据报表
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

//锯齿波数据
uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
};

//三角波数据
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
};
void delay1()                  //延时
{
        int a,b;
        for(a=1;a>0;a--)
        for(b=122;b>0;b--);
}
void int0() interrupt 0          //中断处理,用于波型切换
{       
        EX0=0;
        delay1();
        if(s1==0)
        {               
                bxxz++;
                if(bxxz==4)
                bxxz=0;
                switch(bxxz)
                {
                        case 0 :
                                {a=1,b=0,c=0,d=0;}                //        正弦波
                                break;
                        case 1 :
                                {a=0,b=1,c=0,d=0;}                //方波
                                break;
                        case 2 :                                       
                                {a=0,b=0,c=1,d=0;}                  // 锯齿波
                                break;       
                        case 3 :
                                {a=0,b=0,c=0,d=1;}                  //        三角波
                                break;
                }
                delay1();
                while(!s1);       
        }
        while(!s1);
        EX0=1;
}

void int1() interrupt 2
{
        EX1=0;       
        delay1();
        if(s2==0){               
        p++;
        if(p==5)
        p=0;
        switch(p)
        {
                case 1 :
                        pinglv=63;                //50Hz
                        break;
                case 2 :
                        pinglv=21;                //100Hz
                        break;       
                case 3 :
                        pinglv=3;          //500Hz
                        break;       
                        case 4 :
                        pinglv=0;          //1000Hz
                        break;                       
                default :
                        pinglv=150;                   //2000Hz
                        break;
                }
                delay1();
                while(!s2);       
        }
        while(!s2);       
        EX1=1;
}
void main()
{
        csda=0;
        wr=0;
        EA=1;
        IT0=1;
        EX0=1;
        IT1=1;
        EX1=1;
        pinglv=15;
        while(1)
        {
            
                while(a)               //产生正弦波
                {
                        delay=pinglv; //获取周期数据
                        P0=zhengxian[k];          //数据数P0口进行波形转换
                        k++;
                        if(k==64)          //一个周期取64点波数据
                        k=0;
                        while(delay)  //延时处理         
                    delay--;
                }
                while(b)                   //产生方波
                {
                        delay=pinglv;
                        P0=juxing[k];
                        k++;
                        if(k==64)
                        k=0;
                        while(delay)           
                    delay--;
                }
                while(c)                   //产生锯齿波
                {
                        delay=pinglv;
                        P0=juchi[k];
                        k++;
                        if(k==64)
                        k=0;
                        while(delay)            
                            delay--;
                }
                while(d)                         //产生三角波     
                {
                        delay=pinglv;
                        P0=sanjiao[k];
                        k++;
                        if(k==64)
                        k=0;
                        while(delay)            
                    delay--;
                }
        }               

}

回复

使用道具 举报

板凳
ID:190966 发表于 2017-4-19 13:56 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
sbit s2=P3^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar timeCnt=0;
void delay( unsigned int t)
{
uchar i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}
void shanshuo1()
{
led1=0;
delay(5000);
led2=2;
delay(5000);
led3=1;
delay(5000);
}
void shanshuo2()
{
led2=0;
delay(5000);
led1=1;
delay(5000);
led3=1;
delay(5000);
}
void shanshuo3()
{
led3=0;
delay(5000);
led1=1;
delay(5000);
led2=1;
delay(5000);
}
void shanshuo4()
{
led1=0;
delay(5000);
led2=0;
delay(5000);
led3=1;
delay(5000);
}
void shanshuo5()
{
led2=0;
delay(5000);
led3=0;
delay(5000);
led1=1;
delay(5000);
}
void main()
{
while(1)
{
if(s2==0)
{
timeCnt++;
if(timeCnt==6) timeCnt=0;
}
if(timeCnt==1) shanshuo1();
if(timeCnt==2) shanshuo2();
if(timeCnt==3) shanshuo3();
if(timeCnt==4) shanshuo4();
if(timeCnt==5) shanshuo5();

}
}
回复

使用道具 举报

地板
ID:190966 发表于 2017-4-19 22:43 | 只看该作者
求大神搭救啊!!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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