我的单片机控制双向可控硅不能正常导通请大家看下~

2019-03-24 19:06发布

  1. //程序功能1602液晶第一行显示"0123456789ABCDEF";第二行显示"!@#$%^&*()<>{}?+";
  2. #include "reg52.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int

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

  10. uchar code table1[]="error!";
  11. uchar code table2[]="0123456789";
  12. uchar code table3[]="SetSpeed:";
  13. uchar code table4[]="  OK!  ";
  14. uchar code table5[]="Return.";
  15. uchar pp=0;
  16. uchar biaozhi=0;
  17. uchar jishu=0;
  18. uchar oksign=0;
  19. uchar anjiang=0;
  20. uchar dingshi=0;
  21. uchar chufa=0;
  22. void zhongduan_init(void)
  23. {
  24.         IT0=1;
  25.         EX0=1;
  26.         TMOD=0x02;
  27.         ET0=1;
  28.         TH0=TL0=(256-200);
  29.         //EA=1;
  30. }
  31. void delay(uchar x)//1MS定时
  32. {        uint y;
  33.                         for(;x>0;x--)
  34.          {
  35.                 for(y=123;y>0;y--)
  36.                                 {};
  37.          }
  38. }
  39. void lcdwrdata(uchar dat)
  40. {        rs=1;//写数据时RS拉高
  41.         lcden=1;
  42.         P2=dat;
  43.         delay(6);
  44.         lcden=0;
  45.         delay(6);
  46. }
  47. void lcdwrcom(uchar cdat)//写指令数据到LCD  
  48. {        rs=0;//写指令时RS拉低
  49.         lcden=1;
  50.     P2=cdat;//
  51.         delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
  52.         lcden=0;
  53.         delay(6);
  54. }
  55. void lcd_init()
  56. {
  57.         lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
  58.         lcdwrcom(0x0c);//打开显示光标闪烁
  59.         lcdwrcom(0x06);//
  60.         lcdwrcom(0x01);//
  61. }
  62. void key(void)
  63. {
  64.         jia=1;
  65.         ok=1;
  66.         if(anjiang==0)
  67.         {
  68.                 if(jia==0)
  69.                 {
  70.                    jia=1;
  71.                         if(jia==0)
  72.                                 {
  73.                                         delay(70);
  74.                                         if(jia==0)
  75.                                                 jishu++;
  76.                                 }       
  77.                 }
  78.         }
  79.         if(ok==0)
  80.                 {
  81.                    ok=1;
  82.                         if(ok==0)
  83.                                 {
  84.                                         delay(70);
  85.                                         if(ok==0)
  86.                                                 oksign=1;
  87.                                 }       
  88.                 }
  89. }

  90. void lcd_dong(uchar aj,uchar ao)
  91. {
  92.                 uchar n=0;
  93.                 static uchar xiaobiao=0;
  94.                 if(jishu>5)
  95.                 {
  96.                         lcdwrcom(0x01);
  97.                         lcdwrcom(0x00|0x80);
  98.                         for(n=0;n<6;n++)
  99.                         {
  100.                                 lcdwrdata(table1[n]);
  101.                                 //delay(30);
  102.                         }
  103.                                 lcdwrcom(0x45|0x80);
  104.                                 for(n=0;n<7;n++)
  105.                                 {
  106.                                         lcdwrdata(table4[n]);
  107.                                 //        delay(30);
  108.                                 }

  109.                         jishu=0;
  110.                         xiaobiao=1;
  111.                 }
  112.         else
  113.         {       
  114.                 if(xiaobiao==0)       
  115.                 {       
  116.                         lcdwrcom(0x09|0x80);
  117.                         lcdwrdata(table2[aj]);
  118.                         //delay(100);
  119.                         if(anjiang==0)
  120.                         {
  121.                                 if(ao==1)
  122.                                 {
  123.                                
  124.                                 oksign=0;
  125.                                 anjiang=1;
  126.                                 lcdwrcom(0x45|0x80);
  127.                                 for(n=0;n<7;n++)
  128.                                         {
  129.                                                 lcdwrdata(table5[n]);
  130.                                         //        delay(30);
  131.                                         }
  132.                                 EA=1;
  133.                                
  134.                                 }
  135.                         }
  136.                                 else if(anjiang==1)
  137.                                 {
  138.                                        
  139.                                         if(ao==1)
  140.                                         {
  141.                                
  142.                                         oksign=0;
  143.                                         anjiang=0;
  144.                                         lcdwrcom(0x45|0x80);
  145.                                         for(n=0;n<7;n++)
  146.                                         {
  147.                                                 lcdwrdata(table4[n]);
  148.                                         //        delay(30);
  149.                                         }
  150.                                        
  151.                                        
  152.                                         kong=1;
  153.                                         EA=0;
  154.                                         }       
  155.                                 }
  156.                 }
  157.                         else
  158.                         {
  159.                                 jishu=0;
  160.                                         if(ao==1)
  161.                                 {
  162.                                         lcdwrcom(0x00|0x80);
  163.                                         for(n=0;n<9;n++)
  164.                                         {
  165.                                                 lcdwrdata(table3[n]);
  166.                                         //        delay(30);
  167.                                         }
  168.                                         xiaobiao=0;
  169.                                         oksign=0;
  170.                                 }
  171.                                
  172.                         }       
  173.         }               
  174. }
  175. void main()
  176. {        uchar n;
  177.         kong=1;
  178.         jishu=0;
  179.         zhongduan_init();
  180.         delay(200);
  181.         lcden=0;
  182.         lcd_init();
  183.         lcdwrcom(0x00|0x80);
  184.         for(n=0;n<9;n++)
  185.         {
  186.                 lcdwrdata(table3[n]);
  187.                 delay(100);
  188.         }

  189.         lcdwrcom(0x45|0x80);
  190.         for(n=0;n<7;n++)
  191.         {
  192.                 lcdwrdata(table4[n]);
  193.                 delay(100);
  194.         }
  195.         while(1)
  196.         {
  197.         /*        if(biaozhi==1)
  198.                 {
  199.                         delay(3);
  200.                         if(pp>=1)
  201.                                 kong=0;
  202.                 }
  203.                 delay(3);
  204.                 kong=1;
  205.                         biaozhi=0;*/
  206.                 lcd_dong(jishu,oksign);
  207.         //        if(anjiang==0)
  208.             key();
  209.                
  210.        
  211.         }
  212. }
  213.         void guoling(void) interrupt 0
  214.         {
  215.                 TR0=1;
  216.        
  217.                   
  218.                                
  219.                                 //delay(10);
  220.                                 //kong=0;
  221.                                 //delay(9);
  222.                         //kong=1;
  223.                                 //delay(1);
  224.                                 /*switch (jishu)
  225.                                 {
  226.                                 case 0: {kong=1;break;}
  227.                                 case 1: {delay(4);kong=0;delay(6);kong=1;break;}
  228.                                 case 2: {delay(3);kong=0;delay(7);kong=1;break;}
  229.                                 case 3: {delay(2);kong=0;delay(8);kong=1;break;}
  230.                                 case 4: {delay(1);kong=0;delay(9);kong=1;break;}
  231.                                 case 5: {kong=0;delay(10);kong=1;break;}
  232.                                 }*/       
  233.         }
  234.                 void us(void) interrupt 1  //200us
  235.                 {
  236.                         dingshi++;
  237.                                        
  238.                                         if(dingshi==10)
  239.                                         {

  240.                                                 kong=0;
  241.                                         }
  242.                                                 //kong=0;
  243.                                         if(dingshi==45)
  244.                                                         {
  245.                                                                 TR0=0;
  246.                                                                    dingshi=0;
  247.                                                                 kong=1;
  248.                                                         }
  249.                                                                                
  250.                 }
复制代码 未命名.jpg 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
fengtianzhifeng
1楼-- · 2019-03-24 22:32
大家给个回复啊~都困扰好长时间了~
chunyang
2楼-- · 2019-03-25 03:10
怎么个不能正常导通?简单的贴代码没有意义,详细描述你的设计目的和问题现象。
xjj850205
3楼-- · 2019-03-25 07:10
加:745025221,我们聊来哦

一周热门 更多>