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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1290|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

為什么在單片機(jī)LCD1602上會(huì)出現(xiàn)70 程序哪里錯(cuò)出錯(cuò)了?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
為什么在LCD1602上會(huì)出現(xiàn)70,為什么 按鍵k3、k4調(diào)速,將速度等級(jí)在LCD1602顯示?我這程序哪里錯(cuò)出錯(cuò)了?
#include <reg52.h>      //包含52頭文件
#define uint unsigned int //宏定義uint代替unsigned int
#define uchar unsigned char //宏定義uchar代替unsigned char
#define out P2
sbit lcdrs=P0^5;//液晶的RS端接P2.4口
sbit lcdrw=P0^6;//液晶的RW端接P2.5
sbit lcden=P0^7;// 液晶的EN使能端接P2.6口
sbit KEY1=P3^1;     //按鍵聲明 //正轉(zhuǎn)
sbit KEY2=P3^4;     //按鍵聲明 //反轉(zhuǎn)
sbit LED=P0^4;
unsigned long beats=0;//轉(zhuǎn)動(dòng)總拍數(shù)
unsigned long angle=0; //需要轉(zhuǎn)動(dòng)的角度
uchar code forturn[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正轉(zhuǎn)拍
uchar code revtutn[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反轉(zhuǎn)拍
uchar flag=0;//按鍵標(biāo)志位
uchar flagmotor=0;//正反轉(zhuǎn)標(biāo)記
uchar temp;//臨時(shí)變量
uchar index;//拍數(shù)索引
uchar motorturn=0;//電機(jī)轉(zhuǎn)動(dòng)圈數(shù)
void T0_init();//定時(shí)器
void T1_init();
void EX_init();//外部中斷來(lái)控制加速減速
void forone();//正轉(zhuǎn)
void reone();//反轉(zhuǎn)
void stop(); //停止
void grade();//占空比等級(jí)
void delayms (uint xms);
void keyscan();
void write_str(uchar *str);
void write_data(uchar dat);
void check_busy(void);
void lcd_init();
void write_cmd(char cmd);
void xianshi();
void uart_init();
void lap();
uchar keyflag;  
uchar count=0,Hi=0,x,dat;
uchar num[6];

void  main()                            //主函數(shù)
{         motorturn=1;
        angle=motorturn*360;
        beats=(angle*4096)/360;        
        T0_init();
        EX_init();
        T1_init();
        lcd_init();
        uart_init();
        write_cmd(0x80);
        write_str("speed:");
    while(1)
    {  keyscan();
    switch(keyflag)
          {   case 1:{TR0=1;flagmotor=1;LED=0;}break;
             case 2:{TR0=1;flagmotor=2;LED=1;}break;
             default:stop();break;
          }
          lap();
               
    }
}
/*************定時(shí)器T1初始化函數(shù)**************/
void T1_init()
{
    TMOD=TMOD|0x20;    //設(shè)置T1為方式2
    TH1=256-200;          //置T1高8位,備用初值
    TL1=256-200;          //置T1低8位,初值        
    TR1=1;                              //啟動(dòng)T1
    ET1=1;                //開T1中斷
    EA=1;                      //開總中斷
}
/**********T0中斷服務(wù)程序*********/
void T1_int() interrupt 3  //10ms進(jìn)入中斷
{
    TH1=(65536-100)/256;//置T0高8位初值
    TL1=(65536-100)%256;//置T0低8位初值
    count++;        //累計(jì)進(jìn)入中斷次數(shù),進(jìn)入1次為10ms
  if(count>=200)   //count累計(jì)200次為1s
{  

     count=0;     //1s后count清0,重新累計(jì)下一次1s  
}
if(count<Hi)flagmotor=1;
else flagmotor=0;        
}
/********外部中斷0和外部中斷1的中斷服務(wù)函數(shù)*********/
void EX_init()
{
        IT0=1;            //外中斷0下降沿觸發(fā)
        EX0=1;            //允許外中斷0中斷
        PX0=1;            //優(yōu)先級(jí)設(shè)置,可選
        IT1=1;            //外中斷1下降沿觸發(fā)
        EX1=1;            //允許外中斷1中斷
        PX1=1;            //優(yōu)先級(jí)設(shè)置,可選
        EA=1;            //總中斷允許
}

/********外部中斷0中斷服務(wù)函數(shù)*********/
void EX_INT0()  interrupt 0
{     uchar x=0;
    TR0=1;
    x++;
   if(x==5)x=4;
   xianshi();
   grade();
           
}
/********外部中斷1中斷服務(wù)函數(shù)*********/
void EX_INT1()  interrupt 2
{    uchar x=4;
    TR0=1;
          x--;
        if(x<=0)x=0;
        grade();
         xianshi();        
}
void stop()
{  P1=P1&0xf0;
}
void keyscan()        //按鍵檢測(cè)函數(shù)  基礎(chǔ)代碼
{
    KEY1=1;           // 輸入先寫"1"
    if (KEY1==0)
    {
        delayms(10);    //延時(shí)去抖
        if(KEY1==0)   //按鍵按下
        {
           keyflag=1; //設(shè)標(biāo)志位
        }
        while(!KEY1); //松手檢測(cè)
    }

          KEY1=2;           // 輸入先寫"1"
    if (KEY2==0)
    {
        delayms(10);    //延時(shí)去抖
        if(KEY2==0)   //按鍵按下
        {
          keyflag=2; //設(shè)標(biāo)志位
       }
        while(!KEY2); //松手檢測(cè)
    }

         
}

void forone()
{ beats--;
  temp=P1;
  temp=temp&0xf0;
  temp=temp|forturn[index];
  P1=temp;
  index++;
  if(index==0x08)index=0;
  if(beats==0)
  {          P1=P1&0XF0;
          TR0=0;
         flag=0;
         index=0;
         flagmotor=0;
         angle=motorturn*360;
         beats=(angle*4096)/360;
  }
}

void delayms (uint xms)     //毫秒函數(shù)定義
{
    uint i,j;
    for(i=0;i<xms;i++)
       for(j=0;j<120;j++);  
}
void T0_init()
{
    TMOD=TMOD|0x01;                      //設(shè)置T0為方式1
    TH0=(65536-5000)/256;//置T0高8位初值
    TL0=(65536-5000)%256;//置T0低8位初值        
    TR0=0;                              //啟動(dòng)T0
    ET0=1;                //開T0中斷
    EA=1;                      //開總中斷
}
void T0_int() interrupt 1  //10ms進(jìn)入中斷
{
    TH0=(65536-5000)/256;//置T0高8位初值
    TL0=(65536-5000)%256;//置T0低8位初值        
   if(flagmotor==1)
      forone();
  if(flagmotor==2)
      stop();
}
void grade()
{ switch(x)
{case 1:Hi=20;break;
  case 2:Hi=60;break;
  case 3:Hi=100;break;
  case 4:Hi=140;break;
}
}

/**********************檢查忙標(biāo)志函數(shù)************************/
void check_busy(void)
{
    uchar dt;
        out=0xff;
        do
        {
           lcden=0;
           lcdrs=0;
           lcdrw=1;
           lcden=1;
           dt=out;
        }while(dt&0x80);
        lcden=0;
}
/**************************1602顯示****************************/
void write_cmd(char cmd)  //寫指令函數(shù)
{
        check_busy();
        lcden=0;//再把EN拉低
        lcdrs=0;
        lcdrw=0;//先將RW拉低
        out=cmd;
        lcden=1;
        lcden=0;
}
void write_data(uchar dat) //寫數(shù)據(jù)函數(shù)
{
        check_busy();
        lcden=0;//再把EN拉低
        lcdrs=1;
        lcdrw=0;//先將RW拉低
        out=dat;
        lcden=1;
        lcden=0;        
}
void write_str(uchar *str)//寫字符串函數(shù)
{
        while(*str!='\0')
        {
                write_data(*str++);
                delayms(5);
        }
}
/***************************初始化******************************/
void lcd_init()//初始化1602
{
        write_cmd(0x38);//顯示模式設(shè)置
        write_cmd(0x0c);//顯示開關(guān),光標(biāo)沒有閃爍
        write_cmd(0x06);//顯示光標(biāo)移動(dòng)設(shè)置
        write_cmd(0x01);//清除屏幕
        delayms(1);
}
void xianshi()
{   write_cmd(0x80+0x06);
    num[5]=Hi/10;
    num[5]=Hi%10;
    write_data(0x37+num[5]);
    write_data(num[5]+0x30);      
}
/****************串口方式1初始化*************/
void uart_init()
{
           SCON=0x50;                       //串口方式1,TI和RI清零,允許接收;
        PCON=0x80;                             //波特率加倍 SMOD=1
        TMOD=TMOD|0x20;                //T1定時(shí)方式2
           TH1=0xf3;
        TL1=0xf3;                         //4800b/s 晶振12MHz
           TR1=1;                           //啟動(dòng)T1
        ES=1;
        EA=1;
}

/*************中斷接收一個(gè)字節(jié)數(shù)據(jù)函數(shù)*********/
void uart_receive() interrupt 4
{         
         if(RI==1)
{
RI = 0;                 //清TI標(biāo)志位
dat=SBUF;         //接收數(shù)據(jù)存入變量dat
      }
}
void lap()
{   switch(dat)
{   case 0x01:{TR0=1;flagmotor=1;LED=0;}break;
    case 0x02:{TR0=1;flagmotor=2;LED=1;}break;
    case 0x03:{ TR0=1;x++;if(x==5)x=4;grade();xianshi();}break;
    case 0x04:{ TR0=1;x--;if(x==0)x=0;grade();xianshi();}break;

}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2023-12-20 22:53 | 只看該作者
錯(cuò)在這里



回復(fù)

使用道具 舉報(bào)

板凳
ID:1096616 發(fā)表于 2023-12-21 09:58 | 只看該作者

我不理解這里怎么錯(cuò)了,真是抱歉啊,我這菜鳥啥也不懂
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2023-12-21 10:18 | 只看該作者
深層次 發(fā)表于 2023-12-21 09:58
我不理解這里怎么錯(cuò)了,真是抱歉啊,我這菜鳥啥也不懂

num[5]=HI/10;
這句是取數(shù)值十位,沒問題

num[5]=HI%10;
這句是取數(shù)值個(gè)位,為什么要把取得的值放到存放十位的數(shù)組里?

write_data(0x37+num[5]);
為啥要加0x37?

write_data(num[5]+0x30);
這里加0x30是對(duì)的,為了把數(shù)值轉(zhuǎn)換為ASCII,并在LCD1602上顯示
但好想用錯(cuò)了數(shù)組
回復(fù)

使用道具 舉報(bào)

5#
ID:69038 發(fā)表于 2023-12-21 10:44 | 只看該作者
深層次 發(fā)表于 2023-12-21 09:58
我不理解這里怎么錯(cuò)了,真是抱歉啊,我這菜鳥啥也不懂

void xianshi()
{   write_cmd(0x80+0x06);
    num[5]=Hi/10;  // 這2行賦值到同一個(gè)變量了?
    num[5]=Hi%10;//

    write_data(0x37+num[5]); //1602接收顯示數(shù)據(jù)的是ASCii碼,“0”的是0x30,“7”是0x37,當(dāng)num[5]=0時(shí),顯示出來(lái)就是7了,改成0x30試試
    write_data(num[5]+0x30);      
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频在线观看一区二区三区 | 国产一区二区在线播放 | 久久久久国产一区二区三区 | 亚洲国产成人av好男人在线观看 | 亚洲精品电影网在线观看 | 一区二区三区四区免费观看 | 欧美福利专区 | 国产欧美在线视频 | 欧美日韩电影一区二区 | 欧美日韩一区不卡 | 一区二区三区精品在线 | 成人黄色电影在线播放 | 一区二区三区四区毛片 | 欧美一级大片 | 365夜爽爽欧美性午夜免费视频 | 中文字幕在线观看 | 日韩国产欧美在线观看 | 久久国产精品视频 | 日本亚洲精品 | 国外激情av| 亚洲免费在线播放 | 91精品国产92| 黄网免费 | 久久国产香蕉 | 欧美v免费 | 欧美男人天堂 | 欧美精品一区在线 | 激情五月婷婷 | 国产精品片aa在线观看 | 日韩另类视频 | 亚洲精品欧美一区二区三区 | 91在线视频一区 | 狠狠操电影 | 日韩在线免费视频 | 欧美在线观看一区 | 久久国内精品 | 欧洲精品码一区二区三区免费看 | 草久视频 | 国产欧美日韩在线 | 免费看片在线播放 | 精品免费视频 |