久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2356|回復: 5
打印 上一主題 下一主題
收起左側

求大佬給看看怎么修改,程序仿真的話,主程序總是只運行到while(1)

[復制鏈接]
跳轉到指定樓層
樓主
200黑幣
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Enable();EA=1;
#define Disable();EA=0;
#define ZhengZhuan();PIN_Motor_A=0;PIN_Motor_B=1;
#define Stop();PIN_Motor_A=1;PIN_Motor_B=1;
#define FanZhuan();PIN_Motor_A=1;PIN_Motor_B=0;
sbit E=P2^7;                //1602使能引腳
sbit RW=P2^6;                //1602讀寫引腳        
sbit RS=P2^5;//1602數據/命令選擇引腳
sbit RELAY=P3^0;
int n;
n=100;

char *p1;
uchar flag;
uchar code tab1[]="Zhuangtai *p1";  //要顯示什么就在這兒改
uchar code tab2[]="n=100cm";  //[size=15.5555562973022px]要顯示什么就在這兒改
void delay(uint del)   //延時1ms
{
     uint i,j;
   for(i=0;i<del;i++)
   for(j=0;j<=168;j++);
}
void writecmd(uchar com)  //寫指令
{
   E=0;
   RS=0;
   RW=0;
   P0=com;
   delay(2);
   E=1;  
   delay(2);
   E=0;
}
void writedata(uchar dat)//寫數據
{  
  E=0;
  RS=1;
  RW=0;
  P0=dat;
  delay(2);
  E=1;  
  delay(2);
  E=0;
}
void init(void)               //初始化
{
delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
void Display()
{  
  
  uchar j;
  init();
  writecmd(0x80);    //告訴液晶在哪個地方顯示 (設置地址指針)//80H+00
  for(j=0;j<16;j++)  //有16個字符,要循環16次
  {
   writedata(tab1[j]);
        delay(2);
  }
  writecmd(0x80+0x40); //再設置第二行的起始位置80H+40H
  for(j=0;j<16;j++)   //有16個字符,要循環16次
  { writedata(tab2[j]);
         delay(2);
  }
         while(1);  
}   
sbit s1 = P1^0;
sbit s2 = P1^1;
sbit s3 = P1^2;//按鍵定義,s1啟動,s2加1,s3減1
sbit a = P2^0;sbit b = P2^1;sbit c = P2^2;sbit d = P2^3;//脈沖信號輸入端定義
#define Coil_a {a=1;b=0;c=0;d=0;}//A相通電,其他相斷電
#define Coil_b {a=0;b=1;c=0;d=0;}//B相通電,其他相斷電
#define Coil_c {a=0;b=0;c=1;d=0;}//C相通電,其他相斷電
#define Coil_d {a=0;b=0;c=0;d=1;}//D相通電,其他相斷電
//================================定時器0/1初始化函數================================
void T0_T1_init()
{
TMOD = 0x11;//定時器0/1均工作于方式1,16位計時方式
TR1 = 0;
ET1= 1;//開定時器中斷
EA = 1;//開總中斷
}
//================================ms級延時函數=======================================
void delay1m(uint x)
{
    uint i,j;
    for(i=0;i<x;i++)      //連數x次,約 x ms
      for(j=0;j<120;j++);   //數120 次,約1 ms
}
//=================按鍵函數=================================
void keyscan()
{
     if(s1==0)
  {
      delay(5);
   if(s1==0)
   {
       while(!s1);
    flag=!flag;
   
   }
   else
   {
       while(!s1);
    flag=0;
   }
  }
     if(flag==0)
  {
         if(s2==0)
   {
     delay(5);
     if(s2==0)
     {
           while(!s2);
     n++;
     if(n>199)n=199;
               
     }
   }
    if(s3==0)
   {
     delay(5);
     if(s3==0)
     {
           while(!s3);
     n--;
     if(n<=0)
     n=0;
            
     }
   }
  }
}
//================================主函數=============================================
void main()
{
   
uchar j;
Display();
while(1)
{
   
  if(s1==0)
  {
   delay1m(3);
   if(flag==1&&n>0)
   {
    for(j=0;j<n;j++)
    {
      
       a=1;
      
                  
    }
       a=0;
       delay(3);
                   RELAY=0;
                delay(500);
                RELAY=1;
   }
   
  }
}

  
}


最佳答案

查看完整內容

樓主的顯示程序里多了個死循環while(1),程序怎么運行下去?main程序的主循環沒有調用按鍵程序和顯示程序,你怎么操作和顯示?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2019-6-21 18:07 | 只看該作者
樓主的顯示程序里多了個死循環while(1),程序怎么運行下去?main程序的主循環沒有調用按鍵程序和顯示程序,你怎么操作和顯示?
回復

使用道具 舉報

板凳
ID:568698 發表于 2019-6-22 08:21 來自手機 | 只看該作者
去搜索看一下while的用法,要知道程序是不可能無線次數運行下去的
回復

使用道具 舉報

地板
ID:207421 發表于 2019-6-22 11:35 | 只看該作者
先把 void Display() 函數里面的 while(1); 刪除,然后修改  main() 里面的代碼:
void main()
{
        uchar j;
        //Display();  
        while(1)
        {
                if(s1==0)
                {
                        delay1m(3);
                        if(flag==1&&n>0)
                        {
                                for(j=0;j<n;j++)
                                {
                                        a=1;
                                }
                                a=0;
                                delay(3);
                                RELAY=0;
                                delay(500);
                                RELAY=1;
                        }
                }
                Display();  //顯示函數放在這里
        }
}
回復

使用道具 舉報

5#
ID:567356 發表于 2019-6-23 14:22 | 只看該作者
wulin 發表于 2019-6-21 18:07
樓主的顯示程序里多了個死循環while(1),程序怎么運行下去?main程序的主循環沒有調用按鍵程序和顯示程序 ...

大佬,關于步進電機運轉和LCD1602能夠根據按鍵改變某些顯示,需要用到哪些指令啊??
回復

使用道具 舉報

6#
ID:213173 發表于 2019-6-24 11:12 | 只看該作者
仿真小白 發表于 2019-6-23 14:22
大佬,關于步進電機運轉和LCD1602能夠根據按鍵改變某些顯示,需要用到哪些指令啊??



示例程序+仿真.zip (60.12 KB, 下載次數: 5)

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线播放视频 | 亚洲欧美日韩电影 | 亚洲国产欧美在线 | 久久一二区 | 九色 在线| 久久这里只有精品首页 | 91丨九色丨国产在线 | 久久久久九九九女人毛片 | 国产精品久久久久久久免费大片 | 一级片在线视频 | 91福利电影在线观看 | 欧美综合精品 | 亚洲一区网站 | 黄色国产 | 91久久精品一区二区二区 | 欧美午夜精品 | 精品在线一区 | 久久综合久久自在自线精品自 | 视频一区二区中文字幕 | 国产成人jvid在线播放 | 日韩欧美在 | 久久国产高清视频 | 日日日日操 | 日本欧美国产在线观看 | 欧美视频成人 | 91国自产| 97视频成人| 欧美群妇大交群中文字幕 | 日韩二三区 | 欧美日韩不卡合集视频 | 精品综合久久久 | 欧美一区在线视频 | 国产欧美日韩二区 | 久久久精品一区二区三区 | 欧美激情久久久 | 久久精品 | 国产精品区一区二区三区 | 狠狠操电影 | 日本a视频 | www.亚洲区| 麻豆视频在线免费看 |