|
IO口模拟SPI 跟595通信
- /*******************************************************************/
- /* */
- /* 74HC595 走马灯演示程序 */
- /* */
- /* 邮箱: gguoqing@willar.com */
- /* 网站: http://www.willar.com */
- /* 作者: gguoqing */
- /* 时间: 2006/02/26 */
- /* */
- /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED */
- /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
- /* */
- /******************************************************************/
-
- #include //51芯片管脚定义头文件
- #include //内部包含延时函数 _nop_();
- #define uchar unsigned char
- #define uint unsigned int
- uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- sbit SDATA_595=P1^0; //串行数据输入
- sbit SCLK_595 =P1^1; //移位时钟脉冲
- sbit RCK_595 =P1^2; //输出锁存器控制脉冲
- uchar temp;
- /********************************************************/
- /* */
- /* 延时子程序 */
- /* */
- /********************************************************/
- void delay(int ms)
- {
- int k;
- while(ms--)
- {
- for(k=0; k<250; k++)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- /********************************************************/
- /* */
- /*将显示数据送入74HC595内部移位寄存器 */
- /* */
- /********************************************************/
- void WR_595(void)
- {
- uchar j;
- for (j=0;j<8;j++)
- {
- temp=temp<<1;
- SDATA_595=CY;
- SCLK_595=1; //上升沿发生移位
- _nop_();
- _nop_();
- SCLK_595=0;
- }
- }
- /********************************************************/
- /* */
- /*将移位寄存器内的数据锁存到输出寄存器并显示 */
- /* */
- /********************************************************/
- void OUT_595(void)
- {
- RCK_595=0;
- _nop_();
- _nop_();
- RCK_595=1; //上升沿将数据送到输出锁存器
- _nop_();
- _nop_();
- _nop_();
- RCK_595=0;
- }
- /********************************************************/
- * */
- * 主程序 */
- * */
- *********************************************************/
- main()
- {
- SCLK_595=0;
- RCK_595=1;
-
- while(1)
- {
- uchar i;
- for (i=0; i<8; i++)
- {
- temp=DAT[i]; //取显示数据
- WR_595();
- OUT_595();
- delay(100);
- }
- }
- }
复制代码 |
|