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

標題: 單片機+8255課程設計遇到的問題,求助! [打印本頁]

作者: LonelyLiar    時間: 2018-9-27 18:22
標題: 單片機+8255課程設計遇到的問題,求助!
遇到兩個問題    1.擴展口的PA口無法使用,我設定的程序是當P2.0口為低電平時將PA口循環輸出信號經過光耦和驅動電路使得電機轉動,但是無法實現。已經定義了這些不知道缺少了什么;

#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define PA XBYTE[0x0000]#define PB XBYTE[0x0001]
#define PC XBYTE[0x0002]
#define COM XBYTE[0x0003] //PA、PB、PC端口及命令端口地址定義
COM=0x80;//方式0,PA口與PB口均為輸出
2.P2口接了按鈕連了下拉電阻想按下按鈕使得P2口的電平變為低電平,也無法做到。
單片機小白,求助大神!

111.png (71.9 KB, 下載次數: 47)

111.png

2222.png (57 KB, 下載次數: 35)

2222.png

作者: LonelyLiar    時間: 2018-9-27 18:23
本帖最后由 LonelyLiar 于 2018-9-27 18:25 編輯

還有LCD總是顯示busy,無法顯示..
作者: LonelyLiar    時間: 2018-9-27 18:25
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define PA XBYTE[0x0000]
#define PB XBYTE[0x0001]
#define PC XBYTE[0x0002]
#define COM XBYTE[0x0003] //PA、PB、PC端口及命令端口地址定義
#define motor1 PA
#define        motor2 PB
sbit RS = P3^5;        //液晶引腳定義
sbit RW = P3^3;
sbit EN = P3^4;
sbit Xqj=P2^0;   //電機正轉,X軸前進按鈕
sbit Yqj=P2^1;   //電機正轉,Y軸前進按鈕
sbit Xht=P2^2;   //電機反轉,X軸后退按鈕
sbit Yht=P2^3;   //電機反轉,Y軸后退按鈕
sbit jiting=P2^4;//急停按鈕
sbit dula=P2^6;         
sbit wela=P2^7;         
bit flag1=0;     //x軸正反轉標志位
bit flag2=0;     //Y軸正反轉標志位  
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xf8,0x80,0x90};//共陽極數碼管編碼
uchar code a1[]={0xf2,0xfa,0xf8,0xf9,0xf1,0xf5,0xf4,0xf6}; //八拍正轉
uchar code a2[]={0xf6,0xf4,0xf5,0xf1,0xf9,0xf8,0xfa,0xf2}; //八拍反轉
uchar temp1=0000,temp2=0000,temp3=0000,temp4=0000;
void delayms(uchar x)//延時程序
{                                                                                               
  uchar c,j;
  for(c=x;c>0;c--)
   for(j=123;j>0;j--);
}

/***********LED寫入命令函數***********/
void write_com(uchar com)
{
  //while(LCD_Check_Busy()); //忙則等待
  RS=0;
  P1=com;
  _nop_();
  RW=0;
  EN=1;
  _nop_();
  EN=0;
  _nop_();
}
/**********LED寫入數據函數**********/
void write_dat(uchar chr)
{
  //while(LCD_Check_Busy()); //忙則等待
  RS=1;
  P1= chr;
  _nop_();
  RW=0;
  EN=1;
  _nop_();
  EN=0;
  _nop_();
}
void write_shuzi(uchar dat)
{  
  uchar t;
  t=dat+'0';
  //while(LCD_Check_Busy()); //忙則等待
  RS=1;
  RW=0;
  P1=t;
  _nop_();
  EN=1;
  _nop_();
  EN=0;
}

void GotoXY(uchar x,uchar y)   
{   
   if(y==0)                         //第一行
     write_com(0x80|x);               //寫地址
   if(y==1)                         //第二行
     write_com(0x80|(x+0x40));   
}
/*****LED初始化函數******/
void LCD_Init()
{
          RW=0;
        dula=0;         //關閉數碼管顯示
        wela=0;         //關閉數碼管顯示
   write_com(0x38); /*顯示模式設置*/
   delayms(5);
   write_com(0x06);/*顯示光標移動設置*/
   delayms(5);
   write_com(0x0C); /*顯示開及光標設置*/
   write_com(0x01);  /*顯示清屏*/
   }


void dispose()
{
  uchar a,b,bai1,shi1,ge1,bai2,shi2,ge2;
  a=(temp1-temp3)/8*75/36*5;
  b=(temp2-temp4)/8*75/36*5;
  bai1=a%1000/100;
  shi1=a%100/10;
  ge1=a%10;
  bai2=b%1000/100;
  shi2=b%100/10;
  ge2=b%10;
  write_shuzi(bai1);
  GotoXY(7,1);
  write_shuzi(shi1);
  GotoXY(8,1);
  write_shuzi(ge1);
  GotoXY(9,1);
  write_shuzi(bai2);
  GotoXY(7,2);
  write_shuzi(shi2);
  GotoXY(8,2);
  write_shuzi(ge2);
  GotoXY(9,2);
  write_dat('X');
  GotoXY(4,1);
  write_dat(':');
  GotoXY(5,1);
  write_dat('Y');
  GotoXY(4,2);
  write_dat(':');
  GotoXY(5,2);
  if(a<0)
  {
    write_dat('-');
    GotoXY(6,1);
  }
  if(b<0)
  {
    write_dat('-');
    GotoXY(6,2);
  }
}
void key()
{
  if(Xqj==0)
  {
   delayms(5);
   if(Xqj==0)
   {
     flag1=1;
     while(Xqj==0);
   }
  }
  if(Xht==0)
  {
    delayms(5);
    if(Xht==0)
    {
      flag1=~flag1;
      while(Xht==0);
    }
  }
  if(Yqj==0)
  {
    delayms(5);
    if(Yqj==0)
    {
      flag2=1;
      while(Yqj==0);
    }
  }
  if(Yht==0)
  {
    delayms(5);
    if(Yht==0)
    {
      flag2=~flag2;
      while(Yht==0);
    }
  }
}
void qudong()
{
if(flag1==1)
{
  uchar i;
  for(i=0;i<8;i++)          
  {
    if(jiting==0)
    {break;}
    PA=a1[i];
    temp1++;
  }
  i=0;                                 
}
if(flag2==1)
{
   uchar j;
  for(j=0;j<8;j++)          
  {
    if(jiting==0)
    {break;}
    PB=a1[j];
    temp2++;
  }
  j=0;                                 //八拍正轉子程序
}
if(flag1==0)
{
  uchar k;
  for(k=0;k<8;k++)          
  {
    if(jiting==0)
    {break;}
    if(Xht==0)
    {PA=a2[k];}
    temp3++;
  }
  k=0;               
}
if(flag2==0)               
{          
  uchar u;
  for(u=0;u<8;u++)
  {
    if(jiting==1)
    {break;}
    if(Yht==1)
    {PB=a2[u];}
    temp4++;
  }                                           //八拍反轉轉子程序
  u=0;
}
}
void main()
{
COM=0x80;//方式0,PA口與PB口均為輸出
  Xqj=1;  
  Yqj=1;   
  Xht=1;   
  Yht=1;   
  jiting=1;
while(1)
{
  key();
  dispose();
  qudong();
}
}
這是程序
作者: sxhwdz    時間: 2018-9-28 07:22
地址鎖存器74S373的輸入端順序接反了,CPU的 P0.0~P0.7 依次連接了 373的 D7~D0,所以8255的地址全錯了。把連線換過來,或者把地址定義改一下:
#define PA XBYTE[0x0000]
#define PB XBYTE[0x0080]
#define PC XBYTE[0x0040]
#define COM XBYTE[0x000C]
這樣也是可以的
作者: LonelyLiar    時間: 2018-9-28 15:46
sxhwdz 發表于 2018-9-28 07:22
地址鎖存器74S373的輸入端順序接反了,CPU的 P0.0~P0.7 依次連接了 373的 D7~D0,所以8255的地址全錯了。把 ...

謝謝       這個問題解決了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品久 | 免费毛片在线 | 自拍偷拍一区二区三区 | 草草影院ccyy | 国产一二区在线 | 欧美亚洲另类丝袜综合网动图 | 亚洲一区二区三区国产 | 成人午夜精品一区二区三区 | 中文字幕在线视频免费观看 | 粉嫩高清一区二区三区 | 特黄色一级毛片 | 欧美精品一区二区三区一线天视频 | 日韩欧美在线不卡 | 免费视频一区二区三区在线观看 | 亚洲第一中文字幕 | 盗摄精品av一区二区三区 | av天天看 | 亚洲福利一区二区 | 日本久久综合网 | 色资源在线视频 | 国产日韩欧美激情 | 久久国产婷婷国产香蕉 | 国产97人人超碰caoprom | 日韩精品影院 | 亚洲品质自拍视频 | 国产露脸对白88av | 欧美jizzhd精品欧美巨大免费 | 先锋资源在线 | 国产不卡一区在线观看 | 亚洲3p| www.色.com| 亚洲欧美日韩高清 | 天天操夜夜操 | 久久精品欧美电影 | 特级黄一级播放 | 欧美激情一区二区三区 | 夜夜操天天艹 | 国产精品一区二区三区久久久 | 91社区在线观看播放 | 一区二区三区精品 | 欧美精品一区二区三区四区五区 |