找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新人求助,为什么我的程序把lcd的部分加上后就没反应了?

[复制链接]
跳转到指定楼层
楼主
这里是程序和仿真,为什么把lcd的部分加上后就没反应了(╥_╥)
  1. #include <reg52.h>
  2. #include <intrins.h>


  3. //定义电机
  4. sbit IN1 =P3^4;
  5. sbit IN2 =P3^5;
  6. sbit IN3 =P3^6;
  7. sbit IN4 =P3^7;
  8. //定义1602
  9. sbit RS = P2^0;
  10. sbit RW = P2^1;
  11. sbit EN = P2^2;

  12. //按键引脚
  13. sbit K1        =P1^6;
  14. //低液位检测引脚
  15. sbit K2        =P1^7;
  16. //蜂鸣器引脚
  17. sbit BUZZ =P1^2;
  18. //定义中间变量
  19. unsigned char Time_num=0;
  20. unsigned char mode=0;
  21. unsigned char mode_step=0;
  22. int tempcout=0;
  23. static unsigned char flag=0;
  24. unsigned int count=0;


  25. void delayms(unsigned char x)
  26. {
  27.   unsigned char i ;
  28.   while(x--)
  29.     for(i = 0 ; i < 120 ; i++) ;
  30. }



  31. void LCD_Init();
  32. void LCD_writecmd(unsigned char cmd);
  33. void LCD_writedata(unsigned char dat);
  34. void LCD_showstring(unsigned char x,unsigned char y, unsigned char *str);
  35. void LCD_clear();

  36. void lcd_display()
  37. {
  38.         unsigned char num = 0;
  39.         LCD_Init();
  40.         while(1)
  41.         {
  42.                 count++;
  43.                 if(K1==0)
  44.                 {
  45.                         if(count<=40)
  46.                         {
  47.                                 LCD_showstring(1,1,"STIRRING");
  48.                                 delayms(500);
  49.                                 LCD_Init();
  50.                         }
  51.                         if(40<count&&count<=100)
  52.                         {
  53.                                 LCD_showstring(1,1,"BLOWING");
  54.                                 delayms(500);
  55.                                 LCD_Init();
  56.                         }
  57.                 }
  58.         }

  59. }

  60. void keyscan(void)
  61. {

  62.   if((K1==0)&&(flag==0))    //方向按键按下
  63.   {
  64.     flag=1;

  65.     delayms(10);
  66.     if(K1==0)
  67.     {
  68.       if(Time_num==0)//时间相差30s
  69.       {
  70.         mode=1;   //启动按钮
  71.                
  72.                 delayms(50);
  73.       }
  74.       else//30s以内
  75.       {
  76.         mode=2;   //启动按钮
  77.       }
  78.       tempcout=0;
  79.       mode_step=0;
  80.       Time_num=30;
  81.     }
  82.   }
  83.   else if(K1==1)
  84.   {
  85.     flag=0;
  86.   }
  87. }




  88. //定时器0初始化
  89. void Timer_init()
  90. {
  91.   TMOD=0x01;//定时器0
  92.   TH0=(65536-50000)/256;
  93.   TL0=(65536-50000)%256;
  94.   ET0=1;
  95.   TR0=1;
  96.   EA=1;         //打开中断
  97. }



  98. void main(void)                  
  99. {
  100.   Timer_init();
  101.   while(1)
  102.   {
  103.     keyscan();
  104.         lcd_display();
  105.     BUZZ=K2;    //有信号就报
  106.     if(K2==0)//
  107.     {
  108.       IN1=0;
  109.       IN2=0;
  110.       IN3=0;
  111.       IN4=0;
  112.       Time_num=0;
  113.       tempcout=0;
  114.       mode_step=0;
  115.       mode=0;
  116.     }
  117.     delayms(5);

  118.   }
  119. }




  120. void timer0(void) interrupt 1
  121. {
  122.   TH0=(65536-50000)/256;
  123.   TL0=(65536-50000)%256;
  124.   if(mode==1)//模式1
  125.   {
  126.     switch(mode_step)
  127.     {
  128.     case 0://搅拌两秒钟
  129.       IN1=0;
  130.       IN2=1;
  131.       IN3=0;
  132.       IN4=0;
  133.         

  134.         
  135.       if(++tempcout!=20)return;//1s
  136.       tempcout=0;
  137.       if(--Time_num!=28)return;//搅拌2s之后进行吹泡
  138.       IN1=0;
  139.       IN2=0;
  140.       IN3=0;
  141.       IN4=1;
  142.       mode_step++;
  143.       break;
  144.     case 1://吹泡泡3s
  145.       if(++tempcout!=20)return;//1s
  146.       tempcout=0;
  147.       if(--Time_num!=25)return;//吹泡泡3s
  148.       IN1=0;
  149.       IN2=0;
  150.       IN3=0;
  151.       IN4=0;
  152.       mode_step++;
  153.       break;
  154.     case 2://等待
  155.       if(++tempcout!=20)return;//1s
  156.       tempcout=0;
  157.       if(--Time_num!=0)return;//等待结束
  158.       mode_step=0;
  159.       mode=0;
  160.       break;

  161.     }
  162.   }
  163.   else if(mode==2)//模式2
  164.   {
  165.     switch(mode_step)
  166.     {
  167.     case 0:////吹泡泡3s
  168.       IN1=0;
  169.       IN2=0;
  170.       IN3=0;
  171.       IN4=1;

  172.       if(++tempcout!=20)return;//1s
  173.       tempcout=0;
  174.       if(--Time_num!=27)return;//吹泡泡3s
  175.       IN1=0;
  176.       IN2=0;
  177.       IN3=0;
  178.       IN4=0;
  179.       mode_step++;
  180.       break;
  181.     case 1://等待
  182.       if(++tempcout!=20)return;//1s
  183.       tempcout=0;
  184.       if(--Time_num!=0)return;//等待结束
  185.       mode_step=0;
  186.       mode=0;
  187.       break;
  188.     }
  189.   }
  190.   else
  191.   {
  192.     tempcout=0;//清0
  193.   }

  194. }

  195. //初始化1602
  196. void LCD_Init()
  197. {
  198.         LCD_writecmd(0x38);
  199.         LCD_writecmd(0x0c);
  200.         LCD_writecmd(0x06);
  201.         LCD_writecmd(0x01);
  202. }
  203. //发送指令到1602
  204. void LCD_writecmd(unsigned char cmd)
  205. {
  206.         RS=0;
  207.         RW=0;
  208.         P0=cmd;
  209.         EN=1;
  210.         _nop_();
  211.         _nop_();
  212.         EN=0;
  213. }
  214. //发送数据到1602
  215. void LCD_writedata(unsigned char dat)
  216. {
  217.         RS=1;
  218.         RW=0;
  219.         P0=dat;
  220.         EN=1;
  221.         _nop_();
  222.         _nop_();
  223.         EN=0;
  224. }

  225. //1602显示
  226. void LCD_showstring(unsigned char x,unsigned char y, unsigned char *str)
  227. {
  228.         unsigned char i=0;
  229.         if (y==0)
  230.         {
  231.                 LCD_writecmd(0x80+x);
  232.         }
  233.         else
  234.         {
  235.                 LCD_writecmd(0x80+0x40+x);
  236.         }
  237.         while (str[i] !='\0')
  238.         {
  239.                 LCD_writedata(str[i]);
  240.                 i++;
  241.         }
  242. }
  243. //清空屏幕
  244. void LCD_clear()
  245. {
  246.         LCD_writecmd(0x01);
  247. }
复制代码




屏幕截图 2024-02-09 155056.png (119.05 KB, 下载次数: 54)

屏幕截图 2024-02-09 155056.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1096929 发表于 2024-2-10 16:59 | 只看该作者
280行,串口,并口。
回复

使用道具 举报

板凳
ID:161164 发表于 2024-2-10 21:30 | 只看该作者
写命令/数据后要等40us
清屏后要等2ms

回复

使用道具 举报

地板
ID:1110660 发表于 2024-2-14 15:38 | 只看该作者
把lcd的循环删了,其他程序都能动了,但是lcd还是显示不了(╥_╥)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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