找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教下有沒有用單片機串口方式0,控制4片74HC595的,我寫一個程序運行不了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:190577 發(fā)表于 2020-12-25 13:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼
uchar time=0;
sbit rclk=P3^2;
void delay(unsigned char t)//延時函數(shù)
{
        unsigned char x,y;
        for(x=t;x>0;x--)
                for(y=110;y>0;y--);
}
void init() //定時器初始化
{
        EA   = 1;                   //開總中斷
        TMOD = 0X01;          //定時器0、定時器1工作方式1
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;    //50ms
        ET0  = 1;                  //開定時器0中斷
        TR0  = 1;                  //允許定時器0定時         

}
void main()
{
          init();
          SCON = 0x00;    // 串口模式0,即移位寄存器輸入/輸出方式
      TI = 1;      //開啟TI,串口發(fā)送中斷標(biāo)志置1
          while(1)
         {       
                   EA=0;
                 rclk=0;
                   SBUF= seg7code[0];

                    while(!TI);
                    TI=0;
                 
                 
                 rclk=1;
                 
                 
                        EA=1;
                  delay(100);
                  EA=0;
                 rclk=0;
                   SBUF= seg7code[1];

                    while(!TI);
                    TI=0;
                 
                 
                 rclk=1;
                 
                 
                        EA=1;
                  delay(100);
                  
               
           }               
}
/*************定時器0中斷服務(wù)程序***************/
void time0_int() interrupt 1
{       
        static uchar value;                         //定時50ms中斷一次
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;    //50ms
        value++;          
        if(value >= 20)
        {
                value = 0;       
                time++;
                if(time>=10)time=0;  
       
        }       
}


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

使用道具 舉報

沙發(fā)
ID:68189 發(fā)表于 2020-12-25 15:41 | 只看該作者
利用串口驅(qū)動沒有試過,任意端口的驅(qū)動代碼給你參考一下:
sbit SDA=Px^x;
sbit S_CLK=Px^x;
sbit R_CLK=Px^x;
  1. //*********************************************
  2. void HC595SendData(unsigned char SendVal)
  3. {
  4.     unsigned char bg;
  5.     for(bg=0; bg<8; bg++)
  6.     {
  7.         if((SendVal<<bg)&0x80)
  8.             SDA=1;
  9.         else SDA=0;
  10.         S_CLK=0;
  11.         //delay_us(5);
  12.         _nop_();
  13.         _nop_();
  14.         S_CLK=1;
  15.     }

  16. }
  17. void u595out(void)
  18. {
  19.     R_CLK=0;
  20. //delay_us(5);
  21.     _nop_();
  22.     _nop_();
  23.     R_CLK=1;
  24. }
  25. /********************************************************************/
復(fù)制代碼
回復(fù)

使用道具 舉報

板凳
ID:213173 發(fā)表于 2020-12-25 16:57 | 只看該作者
串口方式0控制74HC595?兩者風(fēng)馬牛不相及。
回復(fù)

使用道具 舉報

地板
ID:275826 發(fā)表于 2020-12-25 18:37 | 只看該作者
串口0完全可以控制多片74HC595
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2020-12-25 20:13 | 只看該作者
tyrl800 發(fā)表于 2020-12-25 18:37
串口0完全可以控制多片74HC595

寫一個示例仿真給大家開開眼如何?
回復(fù)

使用道具 舉報

6#
ID:258566 發(fā)表于 2020-12-26 17:38 | 只看該作者
部分單片機可以,其他單片機txd輸出端接到反相器輸入端,反向器輸出端接到595串行移位時鐘。
回復(fù)

使用道具 舉報

7#
ID:275826 發(fā)表于 2020-12-27 09:54 | 只看該作者
寫一個示例仿真給大家開開眼如何?

#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

//sbit SDA        =     P1^1;
//sbit SHIFT_CP  =  P1^2;
sbit ST_CP     =  P3^2;
#define  NOP    _nop_()

uchar ledcode[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07, 0x7F, 0x6F};
uchar ledbitselect[] = {0x0fe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar i;

void InitSerialPort(void)
{
  SCON=0X00;

}

unsigned char Convert(unsigned char In_Date)
{
    unsigned char i, Out_Date = 0, temp = 0;
    for(i=0; i<8; i++)
    {
        temp = (In_Date >> i) & 0x01;
        Out_Date |= (temp << (7 - i));
    }
       
    return Out_Date;
}

void delay(void)
{
        uchar jj;
        for(jj=0;jj<200;jj++);
        while(jj--);
}

void SerialSendData(uint dat)
{ uchar tmp,tmp1;
   
  uint sdata=dat;
  tmp=sdata>>8;
  tmp1=Convert(tmp);
  SBUF=tmp1;
  while(!TI);
  TI=0;

  tmp=sdata;
  tmp1=Convert(tmp);
  SBUF=tmp1;
  while(!TI);
  TI=0;
  ST_CP = 1;
  NOP;
  ST_CP = 0;
}


void main()
{
  InitSerialPort();
  while(1)
{uint tmp;
  tmp=ledbitselect[i]<<8;
  tmp=tmp|ledcode[i];//LED 共陰
  SerialSendData(tmp);
  
  //P2 =ledbitselect[i];
  delay();
  i=++i%8;
  SerialSendData(0xffff);
  //P2=0xff;
  }

}
回復(fù)

使用道具 舉報

8#
ID:275826 發(fā)表于 2020-12-27 09:56 | 只看該作者
74hc595 和74ls164,4094都是移位寄存器,用法基本相同
回復(fù)

使用道具 舉報

9#
ID:834848 發(fā)表于 2020-12-27 16:35 來自手機 | 只看該作者
串口方式0控制問題
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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