百度了很久, 扩展IO的贴子说的都不是很详细
现在把我测试出来的程序详细标注
方便新人理解
电路原理图如下:
单片机源程序如下:
- /*************************************************
- * 单片机: STC89C52
- 芯 片: 74HC595
- 功 能: 扩展单片机IO口
- 实 现: 可自由控制74HC595(QA~QH高低电平)
- *************************************************/
- #include <reg51.h>
- #include <intrins.h>
- #define NOP() _nop_() /* 定义空指令 */
- //SPI IO
- sbit MOSIO =P3^4;
- sbit R_CLK =P3^5;
- sbit S_CLK =P3^6;
- //0xff 全灭
- //0xfe 1111 1110 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QA)
- //0xfd 1111 1101 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QB)
- //0xfb 1111 1011 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QC)
- //0xf7 1111 0111 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QD)
- //0xef 1110 1111 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QE)
- //0xdf 1101 1111 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QF)
- //0xbf 1011 1111 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QG)
- //0x7f 0111 1111 (二进制八位,从左到右代表QH-QA, 0代表高电平,1代表低电平,所以这一组只亮QH)
- unsigned char LED_HL[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned int i1;
- void delay(unsigned int i); //函数声名
- void HC595SendData(unsigned char SendVal);
- main()
- {
- HC595SendData(0xff); //初始化595使他为高电平 让LED处于熄灭状态
- while(1)
- {
- //循环9次,先全灭,在从QA亮到QH
- for(i1=0;i1<9;i1++) {
- HC595SendData(LED_HL[i1]); //调用595驱动程序 把LED的数据送到595
- delay(200);
- }
- //只亮QC
- HC595SendData(LED_HL[3]); //调用595驱动程序 把LED的数据送到595
- delay(500);
- //只亮QD和QH 0x77=01110111
- HC595SendData(0x77); //调用595驱动程序 把LED的数据送到595
- delay(500);
- //循环8次,让QF高低电平
- for(i1=0;i1<8;i1++) {
- HC595SendData(LED_HL[0]); //调用595驱动程序 把LED的数据送到595
- delay(200);
- HC595SendData(LED_HL[6]); //调用595驱动程序 把LED的数据送到595
- delay(200);
- }
- //需要更多玩法可自行用"进制转换工具"手动输入想要的二进制自己转换成十六进制
- }
- }
- //未完, 请下载附件
复制代码
全部资料51hei下载地址:
STC89C52 74HC595扩展IO口.zip
(62.36 KB, 下载次数: 184)
|