- void main ()
- {
- uchar i;
- while(1)
- {
- for(i=0;i<8;i++){
- //给扫描信号;通过调用写595数据的函数来实现
- //给字模信号;
- delay();
- }
- }
- }
- 程序实现—2.向HC595写入数据
- sbit sk=P2^0; //所有595的时钟信号 pin11
- sbit st=P2^1; //595的锁存信号pin12
- sbit ds=P2^7; //595串行数据输入 pin14
- sbit EN=P2^6; //595的输出使能 pin13
- void hc595_write (uchar mydata)
- {
- uchar j;
- for(j=0;j<8;j++) //第2步
- {
- ds= mydata &0x80;
- sk=0; //注意硬件中,如果有其他芯片,则要根据实际情况修改
- sk=1;
- mydata <<=1;
- }
- st=0; //第3步
- st=1;
- EN = 0; //第4步
- }
- 程序实现—2.向HC595写入数据,同时控制行列
- sbit DZ_DINL=P1^4; //控制点阵列的595数据输入
- sbit DZ_DINH=P1^5; //控制点阵行的595数据输入
- sbit DZ_OE =P1^2; //所有595的输出使能
- sbit DZ_LC =P0^4; //所有595的锁存信号
- sbit DZ_SC =P1^7; //所有595的时钟信号
- /******************************************************************
- - 功能描述:向控制行与列的两片595芯片中同时写入2个字节
- - 隶属模块:8X8点阵模块
- - 函数属性:外部,供用户使用
- - 参数说明:datl:控制列的字节
- dath:控制行的字节
- - 返回说明:无
- - 注:无
- ******************************************************************/
- void DZ_SetValue_2595(unsigned char datl,unsigned char dath)
- {
- unsigned char i;
- datl=~datl;
- DZ_OE=1; //向595写入数据前,先将输出使能关闭
- for(i=0;i<8;i++) //向两路(行与列)上的595同时写入数据
- {
- DZ_DINL=(datl&1);
- DZ_DINH=(dath&1);
- DZ_SC=0;
- DZ_SC=1; //时钟上升沿时数据被写入
- datl>>=1;dath>>=1;
- }
- DZ_LC=0;
- DZ_LC=1; //写入595的数据,需要进行锁存才能输出到输出端,上升沿数据被锁存
- DZ_OE=0; //打开所有595的输出使能
- }
复制代码
|