- /*
- Author:
- Date:
- 三个管脚的详细说明
- SRCLK(Shift Register Clock):
- 移位寄存器时钟输入管脚。此管脚用于控制数据逐位移入内部的移位寄存器。每当 SRCLK 出现一个上升沿时,SER 引脚上的数据就会被移入移位寄存器的下一位。
- RCLK(Register Clock):
- 存储寄存器时钟输入管脚。该管脚用于将移位寄存器中的数据转移到存储寄存器中。当 RCLK 出现上升沿时,移位寄存器里当前存储的数据会被传送到存储寄存器,然后由并行输出端输出。
- SER(Serial Data Input):
- 串行数据输入管脚。要移入移位寄存器的数据就是通过这个管脚逐位输入的
-
- */
- #include "reg52.h"
- #include "INTRINS.h"
-
- typedef unsigned int u16;
- typedef unsigned char u8;
-
- sbit SRCLK_74HC595 = P3^6;
- sbit RCLK_74HC595 = P3^5;
- sbit SER_74HC595 = P3^4;
-
- u8 ledwei[8]={0X7F,0XBF,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- u8 dotduan[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
-
- void Delay1ms(void) //@11.0592MHz
- {
- unsigned char data i, j;
-
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
-
- void _nop_();
- void WriteBytetoHC595(unsigned char dat)
- {
- signed char i;
- SRCLK_74HC595 = 0;
- RCLK_74HC595 = 0;
- for (i = 7; i>=0; i--) {
- SER_74HC595=(dat>>i)&0x01;
- SRCLK_74HC595 = 1;
- _nop_();_nop_();
- SRCLK_74HC595 = 0; // SRCLK上升沿可以发送移位脉冲
- }
-
- RCLK_74HC595 = 1;
- _nop_();_nop_();
- RCLK_74HC595 = 0; // RCLK上升沿可以发送
- }
- void matrix_led(unsigned char x,unsigned char y){
- P0 =ledwei[x];
- WriteBytetoHC595(dotduan[y]);
- }
- void main() {
- // WriteBytetoHC595(0x80);
- // P0 = 0X7F;
- while(1){
- P0=0xFF;matrix_led(0,0);Delay1ms();
- P0=0xFF;matrix_led(1,1); Delay1ms();
- P0=0xFF;matrix_led(5,5); Delay1ms();
- }
- }
复制代码
P0=0xFF;matrix_led(0,0);Delay1ms();前面的P0=0xff就是负责消隐的。
但是消隐失败了。以左上角为(0,0),只想显示(0,0),(1,1),(5,5)。其余那三个led为啥亮起来的?而且亮度不高。
|