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

QQ登錄

只需一步,快速開(kāi)始

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

【求助】跪求大神給修改現(xiàn)有程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143400 發(fā)表于 2016-10-24 16:09 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
300黑幣
本帖最后由 412489601 于 2016-10-24 16:45 編輯

求助修改現(xiàn)有程序?qū)崿F(xiàn):【1】啟動(dòng)仿真5S后,數(shù)碼管個(gè)位和十位顯示AT89C51接收到74LS165發(fā)來(lái)的數(shù)據(jù)中高電平數(shù)量;
【2】當(dāng)按鍵啟動(dòng)鍵按下后,步進(jìn)電機(jī)啟動(dòng)(啟動(dòng)后計(jì)時(shí)),直至某一時(shí)間手動(dòng)改變74LS165接收端按鍵值,判斷之前的值和手動(dòng)改變的值前后之間的運(yùn)行時(shí)間,并且顯示在數(shù)碼管的百位和千位;
【3】當(dāng)按鍵反向鍵按下后,步進(jìn)電機(jī)運(yùn)行5S后程序初始化;
【備注】:程序及仿真已上傳跪求大神多多指點(diǎn)
基本程序已上傳
#include<reg51.h>
#include<intrins.h>
/********************************************************************************************************
**                         Marcos define
*********************************************************************************************************/
#define uint  unsigned int
#define uchar unsigned char
#define MotorTabNum 5

//IO設(shè)置
sbit QH    = P3^0;         //輸出端
sbit CLK74 = P3^1;  //時(shí)鐘輸入端(上升沿有效)
sbit SPL   = P3^2;  //移位控制/置入控制(低電平有效)
//步進(jìn)電機(jī)
sbit K1 = P3^5;        // 啟動(dòng)
sbit K2 = P3^7;        // 反向
//數(shù)碼管
/*
sbit SMG1 = P2^0;                                        //數(shù)碼管第一位定義
sbit SMG2 = P2^1;                                        //數(shù)碼管第二位定義
sbit SMG3 = P2^2;                                        //數(shù)碼管第三位定義
sbit SMG4 = P2^3;                                        //數(shù)碼管第四位定義
*/
//74LS165
sbit FX      = P2^4;     // 方向
sbit MotorEn = P2^5;     // 使能
sbit CLK     = P2^6;     // 脈沖

//電機(jī)狀態(tài)
unsigned char T0_NUM;
unsigned char g_MotorSt = 0;     // 啟停
unsigned char g_MotorDir = 0;    // 正反
//電機(jī)轉(zhuǎn)速
unsigned char MotorTab[6] = {12, 10, 8, 6, 4, 2};
//共陰極數(shù)碼管段值
//int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};          

signed char g_MotorNum = 0;

void delayms(xms);
void mDelay(unsigned int DelayTime);                //延時(shí)函數(shù)
void T0_Init();

void KeyScan(void);
/********************************************************************************************************
* Function Name  : read_int165
* Description    : 接收數(shù)據(jù)
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/                     
uint read_int165(void)
{
  uchar i  = 0;
  uint read_data = 0;

  SPL           = 0;          //置數(shù),讀入并行輸入口數(shù)據(jù)        
  _nop_();
  SPL           = 1;                 //移位,并口輸入被封鎖,串行轉(zhuǎn)換開(kāi)始
  _nop_();


  for(i=0;i<16;i++)        //16位數(shù)據(jù)
  {
     read_data <<= 1;
     if(QH)
         {
                 read_data|=QH;
         }
             CLK74=0;           //下降沿      
             _nop_();
            CLK74=1;           //上升沿      
             _nop_();
  }
  return read_data;
}
/********************************************************************************************************
* Function Name  : main
* Description    : 主函數(shù)
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
void main()
{
  //初始化值
  uint  temp  = 0;
  uchar tempH = 0;
  uchar tempL = 0;
  CLK74=0;

  T0_Init();  // 定時(shí)器0 初始化
  MotorEn = 0;// L297 使能(只有使能,才能正常工作,否則停止)
  FX = 1;          //正反轉(zhuǎn)
  while(1)
  {
    temp  = read_int165();
//    tempH = (uchar) (temp>>8);//獲取高8位,存放置tempH        
//    tempL = (uchar) temp;          //獲取低8位,存放置tempL         
//    P0=tempH;  //接收到的字節(jié)顯示在P0 端口,顯示的值與撥碼開(kāi)關(guān)對(duì)應(yīng)
//    P1=tempL;  //接收到的字節(jié)顯示在P1 端口,顯示的值與撥碼開(kāi)關(guān)對(duì)應(yīng)

        KeyScan();//掃描按鍵
  }
}
/********************************************************************************************************
* Function Name  : T0_Init
* Description    : 定時(shí)器初始化
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
void T0_Init()
{
        TMOD = 0x01;
        TH0  = (65535-100)/256;  // 1ms
        TL0  = (65535-100)%256;
        EA   = 1;
        ET0  = 1;
        TR0  = 1;

}
/********************************************************************************************************
* Function Name  : T0_time
* Description    : 定時(shí)器中斷
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
void T0_time() interrupt 1
{
        TR0 = 0;
        TH0 = (65535-100)/256;   
        TL0 = (65535-100)%256;
        T0_NUM++;
        if(T0_NUM >= MotorTab[g_MotorNum])        // 增加按鍵g_MotorNum++   減小按鍵g_MotorNum--
        {
                T0_NUM = 0;
                CLK=CLK^0x01;               // 輸出脈沖
        }
        TR0 = 1;
}         
/********************************************************************************************************
* Function Name  : KeyScan
* Description    : 按鍵控制
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
void KeyScan(void)
{
        if(K1==0 && K2==1)                // 僅KEY1 按下
        {
                delayms(10);                  // 軟件延時(shí)消抖
                if(K1==0 && K2==1)  
                {
                        MotorEn ^= 1;       
                        TR0 = 1;
                }
        }
        if(K1==1 && K2==0)                // 僅KEY2 按下
        {
                delayms(5);                   // 軟件延時(shí)消抖
                if(K1==1 && K2 == 0)
                {
                        FX ^= 1;                  //改變方向
                        while(!K2);       
                }
        }
}
/********************************************************************************************************
* Function Name  : Display
* Description    : 數(shù)碼管顯示
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
/*void Display(void)
{
        unsigned char B1,B2,B3,B4; //定義數(shù)碼管的每一位
        B1=g_MotorNum/1000;                   //取g_MotorNum的千位       
    B2=g_MotorNum%1000/1000;   //取g_MotorNum的百位       
        B3=g_MotorNum%100/10;           //取g_MotorNum的十位       
    B4=g_MotorNum%10;                   //取g_MotorNum的個(gè)位
        //顯示千位
        P0=table[B1];
        SMG1=0;                                                         
    delayms(3);
    SMG1=1;
        //顯示百位
        P0=table[B2];
        SMG2=0;                                                         
        delayms(3);
        SMG2=1;
        //顯示十位
        P0=table[B3];
        SMG3=0;                                                         
        delayms(3);
        SMG3=1;
        //顯示個(gè)位
        P0=table[B4];
    SMG4=0;
    delayms(3);                                                 
    SMG4=1;
}*/       
/********************************************************************************************************
* Function Name  : delayms
* Description    : 延時(shí)函數(shù)
* Input          : None
* Output         : None
* Return         : None
********************************************************************************************************/
void delayms(xms)
{
         unsigned int x,y;
         for(x=xms;x>0;x--)
                 for(y=110;y>0;y--);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

QQ圖片20161024160856.png (59.86 KB, 下載次數(shù): 123)

仿真圖紙

仿真圖紙

QQ圖片20161024162914.png (87.68 KB, 下載次數(shù): 108)

程序截圖

程序截圖

74LS165測(cè)試版本B.zip

82.2 KB, 下載次數(shù): 7

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

使用道具 舉報(bào)

沙發(fā)
ID:143400 發(fā)表于 2016-10-24 16:27 | 只看該作者
基本程序已經(jīng)上傳,跪求大神幫忙....
回復(fù)

使用道具 舉報(bào)

板凳
ID:111634 發(fā)表于 2016-10-25 20:02 | 只看該作者
本帖最后由 zl2168 于 2016-10-25 20:07 編輯

你上傳的帖子目標(biāo)不明確、要求不明確,沒(méi)法幫忙。
單片機(jī)雖然有點(diǎn)難,但是也有便利之處。反觀你的電路,主要有3部分組成:165串行輸入,步進(jìn)電機(jī)驅(qū)動(dòng),4位數(shù)碼動(dòng)態(tài)顯示。
建議你將3部分電路分別調(diào)試(這是可行的),調(diào)通后再組合,不要胡子眉毛一把抓,搞不清。
回復(fù)

使用道具 舉報(bào)

地板
ID:143400 發(fā)表于 2024-4-28 20:31 | 只看該作者
已經(jīng)解決
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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