找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機直流電機測速+12864中文液晶顯示 Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:769641 發(fā)表于 2020-6-4 18:37 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#include <showfun.h>
#include <stdio.h>
extern char fnLCMInit(); // LCM 初始化
extern void at(unsigned char x,unsigned char y);/*設(shè)定文本x,y值*/
extern void cls();  // 清屏
extern void charout(unsigned char *str); //ASCII(8*8) 顯示函數(shù)
extern void fnSetPos(unsigned char urow, unsigned char  ucol); // 設(shè)置當(dāng)前地址
extern uchar dprintf(uchar x,uchar y,char *fmt);// ASCII(8*16) 及 漢字(16*16) 顯示函數(shù)
extern uchar fnPR12(uchar uCmd); // 寫無參數(shù)的指令
extern uchar fnPR13(uchar uData); // 寫數(shù)據(jù)
extern unsigned int Adc0832(unsigned char channel);
extern void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode);
extern void Pixel(unsigned char PointX,unsigned char PointY, bit Mode);

uchar dsp[10]={0,0,0,0,0,0,0,0,0,0,};
char abc[3]={0,0,0,};
uchar key=0;
uint a=100;
uchar n=5;
uchar count=1;
uint k1=0;
uchar GeyKey();
void delay(uchar i);
void control();

main()
{  
     
  fnLCMInit();
fnSetPos(0,0);
dprintf(0,0,"直流電機加-減速及測速系統(tǒng)");
dprintf(0,12,"鍵盤+:步長加速");
dprintf(0,24,"鍵盤-:步長減速");
dprintf(0,36,"鍵盤=:順時針轉(zhuǎn)");
dprintf(0,48,"鍵盤on/c:逆時針轉(zhuǎn)");
     
     dprintf(0,72,"方向:");
    dprintf(0,84,"轉(zhuǎn)速:");  
   
  P1_1=0;
     TMOD=0x15;
  TH1=0x3c;
  TL1=0xb0;
     TH0=0x00;
  TL0=0x00;
  ET0=1;
  ET1=1;
  TR0=1;
  TR1=1;
   
    while(1)
{  key=GeyKey();
      switch(key)
       {   case '1': {          a=10;
                             //sprintf(abc,"%3.2f",a/255.0);
                          dprintf(0,96,"  5    r/min");   
                                //dprintf(0,96,abc);  
                                dprintf(60,96,"r/min");
                             break;      }
        case '2': {          a=25;dprintf(0,96,"  25    r/min");    break;      }
     case '3': {          a=40; dprintf(0,96," 40    r/min");   break;      }
     case '4': {          a=55; dprintf(0,96," 60    r/min");   break;      }
     case '5': {          a=70; dprintf(0,96," 80    r/min");   break;      }
     case '6': {          a=90; dprintf(0,96,"100    r/min");   break;      }
     case '7': {          a=110; dprintf(0,96,"120    r/min");   break;      }
     case '8': {          a=130; dprintf(0,96,"135    r/min");   break;      }
     case '9': {          a=150; dprintf(0,96,"150    r/min");   break;      }
        case '+': {          dprintf(0,72,"方向: 順時針");
                             control();
        break;
      }
           case '-': {         P1_0=0;
                          dprintf(0,72,"方向: 逆時針");
                           control();
                          break;
     }
           case '=': {P1_0=1;dprintf(0,72,"方向: 順時針");break;}
           case 'c': {P1_0=0;dprintf(0,72,"方向: 逆時針");break;}
           case '/': {dprintf(0,72,"方向: 順時針");
                             control();}
     default:  break;
        }
    }
}

uchar GeyKey()
{
  P1_4=0;
  P1_5=1;
  P1_6=1;
  P1_7=1;
P3_0=1;
P3_1=1;
P3_2=1;
    P3_3=1;
_nop_();_nop_();
if(!P3_0)return '7';
  if(!P3_1)return '8';
  if(!P3_2)return '9';
    if(!P3_3)return '/';
  P1_4=1;
  P1_5=0;
  P1_6=1;
  P1_7=1;
_nop_();_nop_();
if(!P3_0)return '4';
  if(!P3_1)return '5';
  if(!P3_2)return '6';
    if(!P3_3)return '*';
  P1_4=1;
  P1_5=1;
  P1_6=0;
  P1_7=1;
_nop_();_nop_();
if(!P3_0)return '1';
  if(!P3_1)return '2';
  if(!P3_2)return '3';
    if(!P3_3)return '-';

  P1_4=1;
  P1_5=1;
  P1_6=1;
  P1_7=0;
_nop_();_nop_();
if(!P3_0)return 'c';
  if(!P3_1)return '0';
  if(!P3_2)return '=';
    if(!P3_3)return '+';
return 0;
}

void delay(uchar i)
{  uchar j,k;
    for(;i>0;i--)
    for(j=15;j>0;j--)
    for(k=11;k>0;k--);
}



void time()interrupt 3
{   
     TR1=0;
     count++;
     k1+=TL0;
  if(count==51)
  {     
       sprintf(dsp,"%3d",k1);
    dprintf(0,108,dsp);   
          dprintf(60,108,"r/min");   
    count=1;
          k1=0;
      }
   TH1=0x3c;
   TL1=0xb0;
   TH0=0x00;
   TL0=0x00;
   TR1=1;
}
void control()
{                           
       EA=1;
    while(1)
    {    if(a>=150)
               a=150;
   if(a<=10)
       a=10;
    P1_1=0;
    delay(160-a);
    P1_1=1;
    delay(a);
    key=GeyKey();
    if(key=='-') a-=n;
    else
      if(key=='+') a+=n;
    else
      if(key=='=')
      {  P1_0=1;
       dprintf(0,72,"方向: 順時針");
    }
    else
    if(key=='c')
    {  P1_0=0;
      dprintf(0,72,"方向: 逆時針");
    }
    else  
     if(key=='*')
     {   P1_1=0;
         break;
     }
     else
    if(key!=0)
      break;
    }
   EA=0;
}

全部資料51hei下載地址:
直流電機測速+中文液晶顯示.rar (95.73 KB, 下載次數(shù): 43)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表