******************************************************************************** * *通过本例程了解 74HC595(串入并出)基本原理和使用 * *3个I/O扩展8个输出,通过片选可以串接更多74HC595芯片,得到更多的输出数 * * 请学员认真消化本例程,懂74C595在C语言中的操作 * *此汇编程序留给大家做为课后作业自己完成。关于HC595汇编驱动参考“静态显示(74HC595驱动)”。 *************************************************************************************/ #include #include #define NOP() _nop_() /* 定义空指令 */ //SPI IO ***it MOSIO =P3^4; ***it R_CLK =P3^5; ***it 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< else MOSIO=0; // 如果为真 MOSIO = 1 S_CLK=0; NOP(); //产生方形波 NOP(); S_CLK=1; } R_CLK=0; //set dataline low NOP(); //产生方形波 NOP(); R_CLK=1; //片选 } |
更多回帖