打印

刚调试完74HC165与74HC595的测试程序

[复制链接]
8338|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuanquan12345|  楼主 | 2011-1-26 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在595用数码管显示。
/*  项目:74HC574(锁存器)、74HC165(输入扩展)-74HC595(输出扩展)测试程序
完成时间:2011.1.26日
  程序员:yuan
  MCU:STC89C516RD
时钟频率:12MHz  
说明:能用165输入在595显示输出 */
#include<reg52.h>   
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
   
sbit DIN =P1^0;//74HC595数据线
sbit Rclk=P1^1;//74HC595锁存口,上升沿有效
sbit SCLK=P1^2; //74HC595时钟线,上升沿有效
sbit cp=P2^7;  //74HC574片选
sbit LD=P1^3;   //移位
sbit CLK=P1^4;   //时钟输入
sbit Q7=P1^5;   //串行输出
uint sum;
//uint w165(uint);
uchar tcount;//定时器计数值和汉字移动的次数
void delay(uint del)
{
while(--del);
}
void init_tx()//定时移动字
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
}
void wri_dat(uchar dat)  //写1byte数据
{
uchar i;     //74HC595写函数
DIN=1;
for(i=0;i<8;i++)
  {   
  if(dat&0x01)
   DIN=1;//低位在前
  else DIN=0;
  SCLK=0;
  SCLK=1;
  dat>>=1;      
  }   
}
/*void display1()    //测试74HC574显示函数
{
P0=0x00;
  P0=0x3f;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x06;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x5b;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x4f;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x66;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x6d;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x7d;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x07;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x7f;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x6f;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x77;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x7c;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x39;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x5e;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x79;
  cp=0;
  cp=1;
  delay1(400);
  P0=0x71;
  cp=0;
  cp=1;
  delay1(400);
}
void display()
{
if(tcount==10)
{
  tcount=0;
  i++;
  if(i==17)
   i=0;
  }
wri_dat(tabl[i]);
}
void display()
{
//char j;
j=w165(x);
//if(tcount==20)
// {
  // tcount=0;
  // wri_dat();
//  }
if(j==0xff)
P0=0x3f;
cp=0;
  cp=1;
// wri_dat(0xfc);
  delay(10000);
if(j==0xfe)
P0=0x06;
cp=0;
  cp=1;
// wri_dat(0x60);
delay(10000);
if(j==0xfd)
P0=0x5b;
cp=0;
  cp=1;
// wri_dat(0xda);
  delay(10000);
if(j==0xfb)
P0=0x4f;
cp=0;
  cp=1;
//  wri_dat(0xf2);
  delay(10000);
if(j==0xf7)
P0=0x66;
cp=0;
  cp=1;
//  wri_dat(0x66);
delay(10000);
if(j==0xef)
P0=0x6d;
cp=0;
  cp=1;
//  wri_dat(0xb6);
  delay(10000);
if(j==0xdf)
P0=0x7d;
cp=0;
  cp=1;
// wri_dat(0xbe);
  delay(10000);
if(j==0xbf)
P0=0x07;
  cp=0;
  cp=1;
// wri_dat(0xe0);
  delay(10000);
  if(j==0x7f)
  P0=0x7f;
  cp=0;
  cp=1;
// wri_dat(0xfe);
  delay(10000);
//wri_dat(tabl[i]);  
} */
void w165()    //74HC165写函数
{
uchar j,i;
CLK=1;
LD=0;
LD=1;
for(i=0;i<8;i++)
{
  sum<<=1;
  if(Q7)sum|=1;  
  CLK=0;
  CLK=1;  
}
j=sum;
delay(10000);
if(j==0xfe)     //以下是检测165的输入在595上显示函数
{
  wri_dat(0x60);   //也就是单片机的扩展
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
  delay(10000);
}
if(j==0xfd)
{
  wri_dat(0xda);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
if(j==0xfb)
{
  wri_dat(0xf2);
     Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
if(j==0xf7)
{
  wri_dat(0x66);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
  delay(10000);
  }
if(j==0xef)
{
   wri_dat(0xb6);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
if(j==0xdf)
{
  wri_dat(0xbe);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
if(j==0xbf)
{
  wri_dat(0xe0);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
if(j==0x7f)
{
  wri_dat(0xfe);
  Rclk=0;  
  delay(1);
  Rclk=1;   //写完一行显示一次
   delay(10000);
}
   
}
void main()
{   
init_tx();
while(1)
{
  w165();
}
}
void timer0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tcount++;
//if(tcount>12){tcount=0;move++;if(move>9)move=0;}
        //数组有多少个行数,move的值相应改变
}

相关帖子

沙发
Batistuta_| | 2011-1-26 11:58 | 只看该作者
晕.  ........晕,,,,,还是晕

使用特权

评论回复
板凳
yuanquan12345|  楼主 | 2011-1-26 13:17 | 只看该作者
请指点。

使用特权

评论回复
地板
yuanquan12345|  楼主 | 2011-1-26 13:34 | 只看该作者
请多指教。
谢谢。

使用特权

评论回复
5
yuanquan12345|  楼主 | 2011-1-26 13:45 | 只看该作者
#include<reg52.h>                 
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

                               
sbit DIN =P1^0;//74HC595数据线
sbit Rclk=P1^1;//74HC595锁存口,上升沿有效
sbit SCLK=P1^2;        //74HC595时钟线,上升沿有效
sbit cp=P2^7;         //74HC574片选
sbit LD=P1^3;   //移位
sbit CLK=P1^4;   //时钟输入
sbit Q7=P1^5;   //串行输出
uint sum;

uchar tcount;//定时器计数值和汉字移动的次数

void delay(uint del)
{
        while(--del);
}

void wri_dat(uchar dat)         //写1byte数据
{
        uchar i;                          //74HC595写函数
        DIN=1;
        for(i=0;i<8;i++)
                {                       
                if(dat&0x01)
                        DIN=1;//低位在前
                else DIN=0;       
                SCLK=0;
                SCLK=1;
                dat>>=1;                                                       
                }                       
}


void w165()                                //74HC165写函数
{
        uchar j,i;
        CLK=1;
        LD=0;
        LD=1;
        for(i=0;i<8;i++)
        {
                sum<<=1;
                if(Q7)sum|=1;               
                CLK=0;
                CLK=1;               
        }
        j=sum;
        delay(10000);
        if(j==0xfe)                          //以下是检测165的输入在595上显示函数
        {
                wri_dat(0x60);          //也就是单片机的扩展
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                delay(10000);
        }
        if(j==0xfd)
        {
                wri_dat(0xda);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
        if(j==0xfb)
        {
                wri_dat(0xf2);
            Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
        if(j==0xf7)
        {
                wri_dat(0x66);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                delay(10000);
         }
        if(j==0xef)
        {
                 wri_dat(0xb6);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
        if(j==0xdf)
        {
                wri_dat(0xbe);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
        if(j==0xbf)
        {
                wri_dat(0xe0);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
        if(j==0x7f)
        {
                wri_dat(0xfe);
                Rclk=0;         
                delay(1);
                Rclk=1;                        //写完一行显示一次
                 delay(10000);
        }
                               
}
void main()
{          
       
        while(1)
        {
         w165();

        }

使用特权

评论回复
6
yuanquan12345|  楼主 | 2011-1-26 13:46 | 只看该作者
把没用的删掉,请指教。

使用特权

评论回复
7
gaoyiyiyi| | 2011-1-26 16:42 | 只看该作者
哈哈,LZ,同道中人啊,不过我们用MBI5026比较多

使用特权

评论回复
8
cooljoker| | 2011-1-26 18:26 | 只看该作者
好长啊

使用特权

评论回复
9
cooljoker| | 2011-1-26 20:05 | 只看该作者
可以连电路图一起发上来么

使用特权

评论回复
10
战地记者| | 2011-1-26 20:33 | 只看该作者
luan

使用特权

评论回复
11
yuanquan12345|  楼主 | 2011-1-26 21:03 | 只看该作者
谢谢大家的回复,比程序应该怎样该。才能规范。请指教。谢谢

使用特权

评论回复
12
yazhi68| | 2011-1-26 23:49 | 只看该作者
那么多delay,挺奢侈的。定时刷新吧,把单片机解放出来干别的事儿。

使用特权

评论回复
13
yuanquan12345|  楼主 | 2011-1-27 08:04 | 只看该作者
能说一下,定时刷新怎样实现吗?
是用定时器吗?
谢谢。

使用特权

评论回复
14
ayb_ice| | 2011-1-27 09:37 | 只看该作者
一看这delay(10000);
编程还没有入门
严重浪费CPU宝贵的时间

使用特权

评论回复
15
yuanquan12345|  楼主 | 2011-1-27 10:35 | 只看该作者
谢谢,我准备改掉delay.

使用特权

评论回复
16
gaoyiyiyi| | 2011-2-21 15:42 | 只看该作者
一看这delay(10000);
编程还没有入门
严重浪费CPU宝贵的时间
========================
请联系实际情况,LZ就是用下恒流驱动芯片而且,你把CPU解放出来干嘛?

使用特权

评论回复
17
yuanquan12345|  楼主 | 2011-2-21 16:00 | 只看该作者
是没入门,请大家多指教。
谢谢。

使用特权

评论回复
18
luoye199011| | 2013-5-10 17:02 | 只看该作者
gaoyiyiyi 发表于 2011-1-26 16:42
哈哈,LZ,同道中人啊,不过我们用MBI5026比较多

paodeng.zip (36.11 KB) 你好,看到您用过MBI5026,学生我刚刚用这个芯片,现在用三个进行级联,可是写了个测试程序,怎么都不行。你可以给看看吗!先谢谢了!!

使用特权

评论回复
19
ipad2014| | 2014-4-16 16:13 | 只看该作者
我们深圳英特翎电子  就是做74全系列的逻辑IC,数字模拟IC

使用特权

评论回复
20
ipad2014| | 2014-4-16 16:14 | 只看该作者
QQ 2817783723

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝