怎么在keil51中写给595发送数据的程序啊用C语言 汇编我不大懂

怎么在keil51中写给595发送数据的程序啊用C语言 汇编我不大懂,第1张

#include "defineh"

bit B16ms;

bit B1s;

uchar SomeLines; //行扫描计数器

uchar Timecnt;

ucharay; //停留时间

uchar Speed;

uchar SpeedCnt; //速度计数器

uchar StayCnt; //停留时间计数

uchar Stay;

uchar PingCnt; //屏数计数器

uchar UD_Line; //上滚行计数器

uchar Dots; //左移点计数器

uchar Dismode;

uchar DST;

#include "defineh"

bit B16ms;

bit B1s;

uchar SomeLines; //行扫描计数器

uchar Timecnt;

ucharay; //停留时间

uchar Speed;

uchar SpeedCnt; //速度计数器

uchar StayCnt; //停留时间计数

uchar Stay;

uchar PingCnt; //屏数计数器

uchar UD_Line; //上滚行计数器

uchar Dots; //左移点计数器

uchar Dismode;

uchar DST;

#include "defineh"

CLS()

{

uchar i,temp;

for(i=0;i<Lenth;i++)

{

temp=XBYTE[DISPADR+(uint)PingCntLenthClines+(uint)SomeLinesLenth+i];

SENDCLK

}

EHOFF

STORE

Select_Line

EHON

SomeLines++;

if(SomeLines==16)

{

SomeLines=0;

}

if(B1s)

{

B1s=0;

StayCnt++;

if(Stay==StayCnt)

{

StayCnt=0;

PingCnt++;

if(PingCnt==(Pings-1))

{

PingCnt=0;

Dismode=2;

}

}

}

}

UP()

{

uchar i,temp;

for(i=0;i<Lenth;i++)

{

temp=XBYTE[DISPADR+(SomeLines+UD_Line)(uint)Lenth+i];

SENDCLK

}

EHOFF

STORE

Select_Line

EHON

SomeLines++;

if(SomeLines==16)

{

SomeLines=0;

}

if(B16ms)

{

B16ms=0;

SpeedCnt++;

if(SpeedCnt==Speed)

{

SpeedCnt=0;

UD_Line++;

if(UD_Line==(Clines(Pings-1)))

{

UD_Line=0;

Dismode=1;

}

}

}

}

LEFTSHIFT()

{

uchar i,temp;

while(PingCnt!=(Pings-1))

{

for(i=0;i<(Lenth-Dots/8);i++)

{

temp=XBYTE[DISPADR+(uint)PingCntLenthClines+(uint)SomeLinesLenth+Dots/8+i];

SENDCLK

}

for(i=0;i<(Dots/8);i++)

{

temp=XBYTE[DISPADR+(uint)(PingCnt+1)LenthClines+(uint)SomeLinesLenth+i];

SENDCLK

}

temp=XBYTE[DISPADR+(uint)(PingCnt+1)LenthClines+(uint)SomeLinesLenth+Dots/8];

for(i=0;i<(Dots%8);i++)

{

CLK=0;CLK=1;

}

EHOFF

STORE

Select_Line

EHON

SomeLines++;

if(SomeLines==16)

{

SomeLines=0;

}

if(B16ms)

{

B16ms=0;

SpeedCnt++;

if(SpeedCnt==Speed)

{

SpeedCnt=0;

Dots++;

if(Dots==(Lenth8))

{

Dots=0;

PingCnt++;

}

}

}

}

PingCnt=0;

Dismode=3;

}

Display()

{

switch(Dismode)

{

case 1:CLS();break;

case 2:LEFTSHIFT();break;

case 3:UP();break;

default:break;

}

}

Init()

{

uint i;

P1=0xFF; P3=0xFF;

TMOD=0X01;

SET_HTIME0_PARA(Fosc,10)

TR0=1; ET0=1; PT0=0;

TORAM

for(i=0;i<(uint)LenthClinesPings;i++)

{

XBYTE[DISPADR+i]=~TAB[i];

}

Dismode=1;

Speed=1;

Stay=2;

EA=1;

}

main()

{

Init();

while (1)

{

Display();

}

}

这样接是可以实现的!

没有级联的74HC595,不知道是出于什么样的考虑,不过是可以实现的。

你仔细看一下手册会发现:只有STCP脚上有上升沿时,595的移位寄存器中的数据才会输出到595的IO口上。因此,照现在的情况你要分别编两个595的驱动!

1、先向第一个595内发8位串行数据,然后给第一片595的STCP脚一个上升沿,另一片595STCP脚电平保持不变,此时虽然第二片595移位寄存器内的数据也跟着变化,但是由于STCP脚没有上升沿,所以第二片595的IO口的状态不发生变化;

2、再向第二个595内发8位串行数据,然后给第二片595的STCP脚一个上升沿,另一片595STCP脚电平保持不变,此时虽然第一片595移位寄存器内的数据也跟着变化,但是由于STCP脚没有上升沿,所以第一片595的IO口的状态不发生变化;

如此循环1、2、步骤,当可实现分别控制两片595的目的。

不过这个做板子的大哥还真有才。你这不会是一道面试题吧!!

又不明白的QQ:28361319

我有一个74hc595串入并出控制led程序,你自己改一改就行了。

前提是你还需要一个电机驱动芯片(如l293d,uln2003等)。

/

标题: 试验74HC595驱动8位LED灯(C语言

连接方法:JP12用条线冒短接 JP1(LED灯接口)和JP2(595接口) 用8PIN排线连接

通过本例程了解 74HC595(串入并出)基本原理和使用

3个I/O扩展8个输出,通过片选可以串接更多74HC595芯片,得到更多的输出数

请学员认真消化本例程,懂74C595在C语言中的 *** 作

此汇编程序留给大家做为课后作业自己完成。关于HC595汇编驱动参考“静态显示(74HC595驱动)”。

/

#include <reg51h>

#include <intrinsh>

#define NOP() _nop_() / 定义空指令 /

//SPI IO

sbit MOSIO =P3^4;

sbit R_CLK =P3^5;

sbit S_CLK =P3^6;

void delay(unsigned int i); //函数声名

void HC595SendData(unsigned char SendVal);

main()

{ unsigned char Led=0xfe; //1111 1110

HC595SendData(0xff); //初始化595使他为高电平 让LED处于熄灭状态

while(1)

{

HC595SendData(Led); //调用595驱动程序 把LED的数据送到595

Led<<=1;

Led = Led| 0x01; //移位后,后面的位为高电平;

if (Led == 0xff ) Led=0xfe; //1111 1110

delay(200);

}

}

/

延时子程序

/

void delay(unsigned int i)

{

unsigned int j;

for(i; i > 0; i--)

for(j = 300; j > 0; j--);

}

/

函数名称: HC595SendData

功能描述: 向SPI总线发送数据

/

void HC595SendData(unsigned char SendVal)

{

unsigned char i;

for(i=0;i<8;i++)

{

if((SendVal<<i)&0x80) MOSIO=1; //set dataline high 0X80 最高位与SendVal左移的最高位 进行逻辑运算

else MOSIO=0; // 如果为真 MOSIO = 1

S_CLK=0;

NOP(); //产生方形波

NOP();

S_CLK=1;

}

R_CLK=0; //set dataline low

NOP(); //产生方形波

NOP();

R_CLK=1; //片选

}

以上就是关于怎么在keil51中写给595发送数据的程序啊用C语言 汇编我不大懂全部的内容,包括:怎么在keil51中写给595发送数据的程序啊用C语言 汇编我不大懂、单片机高手来看看595怎么用、基于51单片机通过74HC595控制四相步进电机的C程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10217103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存