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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3521|回復: 4
收起左側

寫了一個LCD1602顯示電機轉速的程序,電機是轉一下,停一下,LCD顯示亂碼,請問是...

[復制鏈接]
ID:540923 發表于 2019-7-14 17:56 | 顯示全部樓層 |閱讀模式

//********************************************
問題:電機是轉一下,停一下,LCD顯示亂碼,請問是怎么回事?
寫了一個LCD1602顯示電機轉速的程序,驅動使用TB6560
/********************************************/
/********************************************
//51單片機通過TB6560驅動器控制兩相步進電機正轉、反轉程序
//單片機:STC89C52RC系列
//驅動器:TB6560
//步進電機:兩相J-4218HB1401步進電機
CLK=1時電機運行,CLK=0時停止
CW=0時正轉,CW=1時反轉
EN=0時工作,EN=1停止
**********************************************/
#include<reg52.h>
/********************************************/
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P2^7;     //使能端
sbit lcdrs=P2^6;         //數據命令選擇端
sbit rw=P2^5;
uchar code table[]=" Zhuan Su:";  //輸入的字符
uchar table1[]=0;  //輸入的字符
uchar num=0;

//********************************************
//端口定義
sbit CLK=P1^0;        //脈沖
sbit ENA=P1^1;        //使能
sbit DIR=P1^2;        //轉向
//按鍵定義
sbit CW=P3^0;         //正傳運行按鍵
sbit STOP=P3^1;       //停止運行按鍵
sbit CCW=P3^2;        //反轉運行按鍵
sbit ADJ1=P3^3;       //調速運行按鍵
sbit ADJ2=P3^4;
sbit Led1=P0^0;
sbit Led2=P0^1;
bit Run_Status;
unsigned char Run_Dir;
#define F_DIR 0;        //正轉
#define B_DIR 1;        //反轉
uint CYCLE,speed;
/********************************************/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void write_com(uchar com)//根據寫時序圖寫出指令程序
{
        lcdrs=0;
        rw=0;
        P0=com;
        delay(50);
        lcden=1;
        delay(50);
        lcden=0;
}

void write_data(uchar date)//根據寫時序圖寫出數據程序
{
        lcdrs=1;
        rw=0;
        P0=date;
        delay(50);
        lcden=1;
        delay(50);
        lcden=0;
}
void init()
{
        lcden=0; //使能端為低電平
        write_com(0x38);
        /*顯示模式設置  00111000  設置16*2顯示  5*7點陣  8位數據接口*/
        write_com(0x0f);
        /*顯示開關及光標設置   00001DCB
        D=1,開顯示     D=0, 關顯示
        C=1,顯示光標   C=0,不顯示光標
        B=1,光標閃爍   B=0,光標不閃爍*/
        //write_com(0x06);//地址指針自動+1且光標+1,寫字符屏幕不會移動
        write_com(0X01);
        write_com(0X80);
       
        for(num=0;num<10;num++)    //輸入的字符數量,修改
        {
        write_data(table[num]);
        delay(0);
        }
}
/*********************************************/

//延時函數
void Delay_ms(unsigned char ms)
{
        unsigned char i;
        for(;ms>0;ms--)
        {
            for(i=0;i<125;i++);
        }
}
//定時中斷              
void timer0_ISR(void) interrupt 1 using 1
     {
         TH0=(65536-CYCLE)/256;
         TL0=(65536-CYCLE)%256;
         CLK=~CLK;
      }
uint zhuan(){
        Run_Status=0;
        CLK=0;
        ENA=0;

        while(1)
        {

                                                                       



                if(!STOP)
                {
                        Delay_ms(1000);
                        if(!STOP)
                        {
                                Run_Status=0;
                                 CLK=0;
                                 ENA=0;
                                 TR0=0;
             Led1=1;
             Led2=1;
                        }
                }
                if(!CW&&!Run_Status)
                {
                        Delay_ms(1000);
                        if(!CW&&!Run_Status)
                        {
                                Run_Status=1;
                                DIR=0;
                                ENA=1;
                                CYCLE=2500;
                                TMOD|=0X01;
                                TH0=(65536-CYCLE)/256;
                                TL0=(65536-CYCLE)%256;
                                IE=0X82;
                                TR0=1;
                                Run_Dir=F_DIR;
            Led1=0;
                        }
                }
                if(!CCW&&!Run_Status)
                {
                        Delay_ms(1000);
                        if(!CCW&&!Run_Status)
                        {
                                Run_Status=1;
                                DIR=0;
                                ENA=1;
                                CYCLE=2500;
                                TMOD|=0X01;
                                TH0=(65536-CYCLE)/256;
                                TL0=(65536-CYCLE)%256;
                                IE=0X82;
                                TR0=1;
                                Run_Dir=B_DIR;
            Led2=0;
                        }
                }
                if(!ADJ1)
                {
                        Delay_ms(1000);        
                        if(!ADJ1)
                        {
                                if(CYCLE<20000)CYCLE+=2000;
                                else CYCLE=1000;
                                Run_Status=1;
                                TR0=1;
                        }
                }
                 return CYCLE;
                }
               
}

void main()
{

                while(1){
                zhuan();
                delay(20);
                speed = zhuan();
                delay(20);

                init();
                 
                delay(10);
                table1[1]   = (uint)((speed/1000+0x38));
                table1[2]        = (uint)((speed/100+0x38));
                table1[3]        = (uint)((speed/10+0x38));
                table1[4]        = (uint)((speed+0x38));
               
                /********************************************/
                delay(10);
                write_com(0X80+0x40);
                for(num=0;num<4;num++)    //輸入的字符數量,修改
                {
                write_data(table1[num]);
                delay(50);
                }
                }                                                                                                                       
}               
                                                                                                                                       
                                                                       
                                                       

HC6800-ES V2.0開發板原理圖.pdf

768.59 KB, 下載次數: 7

Tb6560步進電機驅動板.zip

94.66 KB, 下載次數: 6

回復

使用道具 舉報

ID:584556 發表于 2019-7-15 17:08 | 顯示全部樓層
這種情況一般都是引腳復用沖突
回復

使用道具 舉報

ID:584556 發表于 2019-7-15 17:09 | 顯示全部樓層
電機不要直接接單片機引腳,建議加外圍電路或者驅動模塊
回復

使用道具 舉報

ID:123289 發表于 2019-7-16 10:08 | 顯示全部樓層
是硬件問題。
回復

使用道具 舉報

ID:373270 發表于 2019-7-16 10:38 | 顯示全部樓層
看一下你的LCD使用的是P0口還是P1口,
和以下引腳使用是否沖突了,沖突的話就把定義的引腳改一下
sbit CLK=P1^0;        //脈沖
sbit ENA=P1^1;        //使能
sbit DIR=P1^2;        //轉向
sbit Led1=P0^0;
sbit Led2=P0^1;
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 国产传媒毛片精品视频第一次 | 亚洲在线高清 | 97人人干 | 99精品国产一区二区青青牛奶 | 一区二区三区欧美大片 | 欧美五月婷婷 | 欧美精品一区二区三区在线播放 | 天堂一区二区三区 | 久久久人成影片一区二区三区 | 久久久久精 | 欧美在线 | 亚洲精品久久区二区三区蜜桃臀 | 久久亚洲国产精品 | 久久天天| 欧美一级在线视频 | 天天天天操 | 精品久久久久一区二区国产 | 日韩性在线 | 在线观看国产网站 | 99资源| 丁香一区二区 | 中文字幕一二三区 | 精品久久久久久久久久久 | 波多野结衣av中文字幕 | 成人av免费在线观看 | 欧美视频一区二区三区 | 国产视频1 | 午夜不卡一区二区 | 日韩免费在线 | 夜夜久久 | 欧美一极视频 | www国产成人免费观看视频,深夜成人网 | 国产电影一区二区在线观看 | 久久久国产精品 | 精品一区二区三区视频在线观看 | 99re在线视频精品 | 女同av亚洲女人天堂 | 免费在线看黄视频 | 欧美日韩综合视频 | 成人av一区二区三区 |