单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1612|回复: 5
收起左侧

【跪求】74LS165接收数据判断高电平数量并显示

[复制链接]
412489601 发表于 2016-10-25 19:04 | 显示全部楼层 |阅读模式
本帖最后由 412489601 于 2016-10-25 19:07 编辑

【跪求】现有程序已经可以接收到两片74LS165的数据;只求能显示出数据中高电平数量只和;显示在数码管上即可【源程序及仿真图纸已上传】

#include<reg51.h>
#include<intrins.h>
/**************************************************
**                         Marcos define
**************************************************/
#define uint  unsigned int
#define uchar unsigned char
#define MotorTabNum 5

//IO设置
sbit QH    = P3^0;         //输出端
sbit CLK74 = P3^1;  //时钟输入端(上升沿有效)
sbit SPL   = P3^2;  //移位控制/置入控制(低电平有效)

//数码管
sbit SMG1 = P2^0;                                        //数码管第一位定义
sbit SMG2 = P2^1;                                        //数码管第二位定义
sbit SMG3 = P2^2;                                        //数码管第三位定义
sbit SMG4 = P2^3;                                        //数码管第四位定义

signed char temp = 0;

int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};           //共阴极数码管段值

void Display(void);
void delayms(xms);
void mDelay(unsigned int DelayTime);                //延时函数
/***************************************************
* Function Name  : read_int165
* Description    : 接收数据
* Input          : None
* Output         : None
* Return         : None
****************************************************/                     
uint read_int165(void)
{
  uchar i  = 0;
  uint read_data = 0;

  SPL           = 0;          //置数,读入并行输入口数据        
  _nop_();
  SPL           = 1;                 //移位,并口输入被封锁,串行转换开始
  _nop_();


  for(i=0;i<16;i++)        //16位数据
  {
     read_data <<= 1;
     if(QH)
         {
                 read_data|=QH;
         }
             CLK74=0;           //下降沿      
             _nop_();
            CLK74=1;           //上升沿      
             _nop_();
  }
  return read_data;
}
/************************************************
* Function Name  : main
* Description    : 主函数
* Input          : None
* Output         : None
* Return         : None
*************************************************/
void main()
{
  unsigned char i;
  //初始化值
  uint  temp  = 0;
  uchar tempH = 0;
  uchar tempL = 0;
  CLK74=0;
  while(1)
  {
    temp  = read_int165();
    tempH = (uchar) (temp>>8);//获取高8位,存放置tempH         
    tempL = (uchar) temp;          //获取低8位,存放置tempL

        for(i=0; i<10; i++)
        Display();
  }
}
/***********************************************

* Description    : 数码管显示
* Input          : None
* Output         : None
* Return         : None
************************************************/
void Display(void)
{
        unsigned char B1,B2,B3,B4; //定义数码管的每一位

        B1=temp/1000;                //取g_MotorNum的千位        
    B2=temp%1000/1000;  //取g_MotorNum的百位        
        B3=temp%100/10;            //取g_MotorNum的十位        
    B4=temp%10;                    //取g_MotorNum的个位
        //显示千位
        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;
        //显示个位
        P0=table[B4];
    SMG4=0;
    delayms(3);                                                
    SMG4=1;
}
/************************************************
* Function Name  : delayms
* Description    : 延时函数
* 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图片20161025185850.png

74LS165测试版本A.zip

74.85 KB, 下载次数: 11

回复

使用道具 举报

zl2168 发表于 2016-10-25 19:25 | 显示全部楼层

回帖奖励 +50

本帖最后由 zl2168 于 2016-10-25 19:32 编辑

实例25  74HC165串行输入8/16位数据信号


Proteus仿真一下,确认有效。
实例25 74HC165串行输入8-16位数据信号.rar (78.82 KB, 下载次数: 11)
回复

使用道具 举报

zl2168 发表于 2016-10-25 19:38 | 显示全部楼层
本帖最后由 zl2168 于 2016-10-25 19:40 编辑

实例58  74LS139选通4位LED数码管动态显示


Proteus仿真一下,确认有效。
实例57 74LS139选通4位共阴LED数码管动态显示.rar (48.12 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 412489601 发表于 2016-10-25 21:38 | 显示全部楼层
zl2168 发表于 2016-10-25 19:38
实例58  74LS139选通4位LED数码管动态显示

设计的程序中temp已经可以接收到74LS165传来的但是数据需要移位判断 自己不会还望大神指点
回复

使用道具 举报

 楼主| 412489601 发表于 2016-10-25 21:38 | 显示全部楼层
zl2168 发表于 2016-10-25 19:25
实例25  74HC165串行输入8/16位数据信号

设计的程序中temp已经可以接收到74LS165传来的但是数据需要移位判断 自己不会还望大神指点
回复

使用道具 举报

zl2168 发表于 2016-10-27 18:40 | 显示全部楼层
412489601 发表于 2016-10-25 21:38
设计的程序中temp已经可以接收到74LS165传来的但是数据需要移位判断 自己不会还望大神指点

程序在书中,电路和程序设计都有详细说明,很好理解,你自己去看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51hei电子论坛2群 联系QQ:125739409;技术交流QQ群219535678

Powered by 单片机教程网

快速回复 返回顶部 返回列表