完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
如果是16个74ls595那是不是直接输入16个字节就行?大概写了个程序如下 (测试点亮 一个点)
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器 #include "intrins.h" #define uchar unsigned char typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; //--定义使用的IO口--// ***it shineng=P1^0; ***it Adate=P1^1; ***it Bdate=P1^2; ***it SRCLK=P1^3; //输入数据移位时钟 ***it RCLK=P1^4; //储存寄存器的时钟 ***it SER=P1^5; uchar display_mode=0; uchar temp; uchar code DAT[8]={0x55}; //***it SRCLK=P3^6; //***it RCLK=P3^5; //***it SER=P3^4; //定义LED点阵的位选,也就是类似于数码管的位选,因为要对其动态扫描操作 //数组前16位和后16位数据正好是相反的,也就是说先让第3个595输出低电平,然后再让第4个595输出低电平 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4) * 函数功能 : 通过595发送四个字节的数据 * 输 入 : dat1:第4个595输出数值 * * dat2: 第3个595输出数值 * * dat3:第2个595输出数值 * * dat4:第1个595输出数值 * 输 出 : 无 *******************************************************************************/ void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4,u8 dat5,u8 dat6,u8 dat7,u8 dat8, u8 dat9,u8 dat10,u8 dat11,u8 dat12,u8 dat13,u8 dat14,u8 dat15,u8 dat16) { u8 a; SRCLK = 1; RCLK = 1; for(a=0;a<8;a++) //发送8位数 { SER = dat1 >> 7; //从最高位开始发送 dat1 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat2 >> 7; //从最高位开始发送 dat2 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat3 >> 7; //从最高位开始发送 dat3 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat4 >> 7; //从最高位开始发送 dat4 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat5 >> 7; //从最高位开始发送 dat5 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat6 >> 7; //从最高位开始发送 dat6 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat7 >> 7; //从最高位开始发送 dat7 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat8 >> 7; //从最高位开始发送 dat8 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat9 >> 7; //从最高位开始发送 dat9 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat10 >> 7; //从最高位开始发送 dat10 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat11 >> 7; //从最高位开始发送 dat11 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat12 >> 7; //从最高位开始发送 dat12 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat13 >> 7; //从最高位开始发送 dat13 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat14 >> 7; //从最高位开始发送 dat14 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat15 >> 7; //从最高位开始发送 dat15 <<= 1; //发送时序 SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } for(a=0;a<8;a++) //发送8位数 { SER = dat16 >> 7; //从最高位开始发送 dat16 <<= 1; SRCLK = 0; //发送时序 _nop_(); _nop_(); SRCLK = 1; } RCLK = 0; _nop_(); _nop_(); RCLK = 1; } void hangxian(u8 mode) { switch(mode) { case 0: Adate=1; Bdate=1; break; case 1: Adate=0; Bdate=1; break; case 2: Adate=1; Bdate=0; break; case 3: Adate=0; Bdate=0; break; default: break; } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { u8 i; shineng=1; Adate=1; Bdate=1; while(1) { for(i=0;i<4;i++) { Hc595SendByte(0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe); hangxian(i); delay(1); } } }
|
|
相关推荐
1个回答
|
|
shenme 1 0 0 2 9 2 5 0 9 4
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:22 , Processed in 0.588174 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号