日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年01月23日(星期四)

正在發(fā)生

2020年01月23日 | 單片機驅(qū)動帶編碼器直流電機 源程序

發(fā)布者:Xiangsi 來源: 51hei關鍵字:單片機驅(qū)動  編碼器  直流電機 手機看文章 掃描二維碼
隨時隨地手機看文章

#include

//單片機頭文件,儲存一些殊寄存器的地址聲明

#include        

//intrins頭文件儲存51編程中需要使用到空指令_nop_()、字符循環(huán)移位指令_crol_等

#include

//stdio : "standard input & output"(標準輸入輸出),C/C++頭文件,把多個編譯單元(.c或者.cpp文件)公用的內(nèi)容,單獨放在一個文件里減少整體代碼尺寸


#define usint unsigned short int        //符號短整型

#define uchar unsigned char                        //無符號字符型

#define uint unsigned int                          //無符號整型

#define VALID        0                                        //0

#define INVALID        1                                        //1

#define LCD_data P0                            //LCD數(shù)據(jù)端口P0


sbit LCD_RS = P2^7;                        //LCD命令和數(shù)據(jù)控制位,1:寫數(shù)據(jù)位,0:寫命令

sbit LCD_RW = P2^6;                        //LCD讀寫控制位

sbit LCD_EN = P2^5;                        //LCD使能位


sbit IN1 = P2^0;                        //電機

sbit IN2 = P2^1;

sbit ENA = P2^3;


uchar code title2[] = {"電機轉(zhuǎn)速:"};

uchar code ascii[] = 

{0x31,0x32,0x33,0x41,0x34,0x35,0x36,0x42,0x37,0x38,0x39,0x43,0x2A,0x30,0x23,0x44};   //數(shù)字和常用字符的ascii碼

uint n = 0;                                        //T0定時中斷響應次數(shù)

uint n_pwm = 0;                                //用于調(diào)節(jié)pwm占空比

uint c = 0;                                        //外部計數(shù)中斷響應次數(shù)

uint flag_T0 = 0;                        //定時器T0溢出flag

uchar th = 0;                                //脈沖計數(shù)計算時的臨時變量高位

uchar tl = 0;                                //……………………………………………低位

uint num_pulse;                                //脈沖個數(shù)

void delay_1ms(uint z){     //延時函數(shù)1ms  

        uint x,y; 

        for(x = z; x > 0; x--) 

                for(y = 920; y > 0; y--); 

}

void write_cmd(uchar cmd){  //LCD寫命令函數(shù) 

        LCD_RS = 0; 

        LCD_RW = 0; 

        LCD_EN = 0; 

        P0 = cmd; 

        delay_1ms(6); 

        LCD_EN = 1; 

        delay_1ms(6); 

        LCD_EN = 0; 

}

void write_dat(uchar dat){  //LCD寫數(shù)據(jù)函數(shù) 

        LCD_RS = 1; 

        LCD_RW = 0; 

        LCD_EN = 0; 

        P0 = dat; 

        delay_1ms(5); 

        LCD_EN = 1; 

        delay_1ms(5); 

        LCD_EN = 0; 

void lcd_pos(uchar X,uchar Y){  //X表示LCD的行數(shù),Y表示LCD的列數(shù) 

        uchar pos; 

        if(X == 0){

                X = 0x80;

        } 

        else if(X == 1){

                         X = 0x90;

                 } 

                 else if(X == 2){

                                   X = 0x88;

                          } 

                          else if (X == 3){

                                                X = 0x98;

                                   } 

        pos = X+Y ; 

        write_cmd(pos);    //顯示地址 

}

void lcd_init(){          

        uchar i = 0;                                   

        write_cmd(0x30);   //基本指令操作 

        delay_1ms(5); 

        write_cmd(0x0C);   //顯示開,關光標

        delay_1ms(5); 

        write_cmd(0x01);   //清除LCD的顯示內(nèi)容

        delay_1ms(5);

        lcd_pos(0,0);       //將LCD光標定位到第一行第一列            

}

void pulse_dispaly(uint fe)                //顯示脈沖個數(shù)

{

        uchar i = 0;

        uchar f[7];

                for(i = 0; i < 7; i++)

                        f[i] = '0';

                f[0] = ((fe)/100000)                     +0x30;//十萬位的數(shù)字

                f[1] = ((fe)%100000)/10000                +0x30;//萬位的數(shù)字

                f[2] = ((fe)%10000)/1000                +0x30;//千位的數(shù)字

                f[3] = ((fe)%1000 )/100                 +0x30;//百位的數(shù)字

                f[4] = ((fe)%100  )/10                  +0x30;//十位的數(shù)字

                f[5] = ((fe)%10   )                     +0x30;//個位的數(shù)字

                f[6] = '