我的设计中双向可控硅不能导通~不知道是程序的问题还是硬

2020-02-04 09:17发布

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int

sbit rs=P1^0;//H数据,L命令
sbit lcden=P1^1;//高脉冲使能,使能脉宽最小150ns
sbit kong=P1^2;
sbit ok=P1^3;
sbit jia=P1^4;

uchar code table1[]="error!";
uchar code table2[]="0123456789";
uchar code table3[]="SetSpeed:";
uchar code table4[]="  OK!  ";
uchar code table5[]="Return.";
uchar pp=0;
uchar biaozhi=0;
uchar jishu=0;
uchar oksign=0;
uchar anjiang=0;
uchar dingshi=0;
void zhongduan_init(void)
{
        IT0=1;
        EX0=1;
        TMOD=0x02;
        ET0=1;
        TH0=TL0=(256-200);
        //EA=1;
}
void delay(uchar x)//1MS定时
{        uint y;
                        for(;x>0;x--)
         {
                for(y=123;y>0;y--)
                                {};
         }
}
void lcdwrdata(uchar dat)
{        rs=1;//写数据时RS拉高
        lcden=1;
        P2=dat;
        delay(6);
        lcden=0;
        delay(6);
}
void lcdwrcom(uchar cdat)//写指令数据到LCD  
{        rs=0;//写指令时RS拉低
        lcden=1;
    P2=cdat;//
        delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
        lcden=0;
        delay(6);
}
void lcd_init()
{
        lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
        lcdwrcom(0x0c);//打开显示光标闪烁
        lcdwrcom(0x06);//
        lcdwrcom(0x01);//
}
void key(void)
{
        jia=1;
        ok=1;
        if(anjiang==0)
        {
                if(jia==0)
                {
                   jia=1;
                        if(jia==0)
                                {
                                        delay(70);
                                        if(jia==0)
                                                jishu++;
                                }       
                }
        }
        if(ok==0)
                {
                   ok=1;
                        if(ok==0)
                                {
                                        delay(70);
                                        if(ok==0)
                                                oksign=1;
                                }       
                }
}

void lcd_dong(uchar aj,uchar ao)
{
                uchar n=0;
                static uchar xiaobiao=0;
                if(jishu>5)
                {
                        lcdwrcom(0x01);
                        lcdwrcom(0x00|0x80);
                        for(n=0;n<6;n++)
                        {
                                lcdwrdata(table1[n]);
                                //delay(30);
                        }
                                lcdwrcom(0x45|0x80);
                                for(n=0;n<7;n++)
                                {
                                        lcdwrdata(table4[n]);
                                //        delay(30);
                                }

                        jishu=0;
                        xiaobiao=1;
                }
        else
        {       
                if(xiaobiao==0)       
                {       
                        lcdwrcom(0x09|0x80);
                        lcdwrdata(table2[aj]);
                        //delay(100);
                        if(anjiang==0)
                        {
                                if(ao==1)
                                {
                               
                                oksign=0;
                                anjiang=1;
                                lcdwrcom(0x45|0x80);
                                for(n=0;n<7;n++)
                                        {
                                                lcdwrdata(table5[n]);
                                        //        delay(30);
                                        }
                                EA=1;
                               
                                }
                        }
                                else if(anjiang==1)
                                {
                                       
                                        if(ao==1)
                                        {
                               
                                        oksign=0;
                                        anjiang=0;
                                        lcdwrcom(0x45|0x80);
                                        for(n=0;n<7;n++)
                                        {
                                                lcdwrdata(table4[n]);
                                        //        delay(30);
                                        }
                                       
                                       
                                        kong=1;
                                        EA=0;
                                        }       
                                }
                }
                        else
                        {
                                jishu=0;
                                        if(ao==1)
                                {
                                        lcdwrcom(0x00|0x80);
                                        for(n=0;n<9;n++)
                                        {
                                                lcdwrdata(table3[n]);
                                        //        delay(30);
                                        }
                                        xiaobiao=0;
                                        oksign=0;
                                }
                               
                        }       
        }               
}
void main()
{        uchar n;
        kong=1;
        jishu=0;
        zhongduan_init();
        delay(200);
        lcden=0;
        lcd_init();
        lcdwrcom(0x00|0x80);
        for(n=0;n<9;n++)
        {
                lcdwrdata(table3[n]);
                delay(100);
        }

        lcdwrcom(0x45|0x80);
        for(n=0;n<7;n++)
        {
                lcdwrdata(table4[n]);
                delay(100);
        }
        while(1)
        {
        /*        if(biaozhi==1)
                {
                        delay(3);
                        if(pp>=1)
                                kong=0;
                }
                delay(3);
                kong=1;
                        biaozhi=0;*/
                lcd_dong(jishu,oksign);
        //        if(anjiang==0)
            key();
               
       
        }
}
        void guoling(void) interrupt 0
        {
                TR0=1;
                kong=1;
                  
                               
                                //delay(10);
                                //kong=0;
                                //delay(9);
                        //kong=1;
                                //delay(1);
                                /*switch (jishu)
                                {
                                case 0: {kong=1;break;}
                                case 1: {delay(4);kong=0;delay(6);kong=1;break;}
                                case 2: {delay(3);kong=0;delay(7);kong=1;break;}
                                case 3: {delay(2);kong=0;delay(8);kong=1;break;}
                                case 4: {delay(1);kong=0;delay(9);kong=1;break;}
                                case 5: {kong=0;delay(10);kong=1;break;}
                                }*/       
        }
                void us(void) interrupt 1  //200us
                {
                        dingshi++;
                        /*        if(dingshi==10)
                                {
                                        kong=1;
                                }*/
                                       
                                        if(dingshi==25)
                                        {

                                                kong=0;
                                        }
                                                if(dingshi==45)
                                                        {
                                                                TR0=0;
                                                                   dingshi=1;
                                                                kong=1;
                                                        }               
                }
未命名.jpg (705.63 KB, 下载次数: 0) 下载附件 电路图 2012-4-6 14:15 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
ihyni2004
1楼-- · 2020-02-04 13:09
这样试试
fengtianzhifeng
2楼-- · 2020-02-04 17:02
ihyni2004 发表于 2012-4-6 14:27
这样试试

改了一下貌似还是不行~
ihyni2004
3楼-- · 2020-02-04 19:25
 精彩回答 2  元偷偷看……
fengtianzhifeng
4楼-- · 2020-02-04 22:29
本帖最后由 fengtianzhifeng 于 2012-4-6 16:41 编辑
ihyni2004 发表于 2012-4-6 15:33

未命名3.jpg (217.38 KB, 下载次数: 0)

下载附件

2012-4-6 15:50 上传


额~这个是可以的~如果我给的是低电平的话~是可以转动的~就是现在我调节触发角的时候他不转啊~

图中黄 {MOD}为检测到的过零脉冲~
蓝 {MOD}为我单片机给的过零脉冲
NFotxb
5楼-- · 2020-02-05 03:50
这个MOC3031应该是过零触发的光藕可控硅,当然不能调节触发角触发,改用MOC3021的吧~
fengtianzhifeng
6楼-- · 2020-02-05 05:57
NFotxb 发表于 2012-4-6 16:54

未命名为.jpg (83.27 KB, 下载次数: 0)

下载附件

2012-4-6 17:04 上传

一周热门 更多>