本帖最后由 芯圣电子官方QQ 于 2023-7-24 14:58 编辑
使用HC89S001P芯片来驱动74HC595串口转并口输出。
一、电路图
P02 --- 595-RCLK
P03 --- 595-DAT
P04 --- 595-SRCLK
二、程序
2.1、程序代码
- //main.c
- #define ALLOCATE_EXTERN
- #include "config.h"
- //系统初始化
- void SystemInit(void)
- {
- /************************************系统初始化****************************************/
- WDTCCR = 0x00; //关闭看门狗
- while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
- CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
- while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
- CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
- }
- void main(void)
- {
- uint i;
- uchar j=0x01;
- uchar k=0;
- SystemInit(); //系统初始化
- Init_Port(); //端口初始化
- //EintInit(); //外部中断初始化
- //INT2_7_Init(); //外部中断2-7初始化
- //CCO_Init(); //CCO输出
-
- Init_Timer0(); //初始化定时器0
- Init_595();
-
- while(1)
- {
- test_595();
- }
- }
- //74hc595.c
- #include "config.h"
- //595初始化
- void Init_595(void)
- {
- //PORT初始化
- P0M1 = P0M1&0xF0|0x08; //P02设置为推挽输出
- P0M1 = P0M1&0x0F|0x80; //P03设置为推挽输出
- P0M2 = P0M2&0xF0|0x08; //P04设置为推挽输出
- }
- //595发送数据
- void SendDat_595(uchar dat)
- {
- uchar i=0;
- RCLK_595=0;
- SRCLK_595=0;
-
- for(i=0;i<8;i++)
- {
- SRCLK_595=0;
- if((dat&0x01)==0x01)
- {
- DAT_595=1;
- }
- else
- {
- DAT_595=0;
- }
- SRCLK_595=1;
- _nop_();
- _nop_();
- dat=dat>>1;
-
- }
-
- RCLK_595=1;
- }
- void test_595(void)
- {
- uchar j;
- uchar k;
- uint i;
-
- j=0x01;
- for(k=0;k<8;k++)
- {
- SendDat_595(~j);
- for(i=0;i<30000;i++);
- j=j<<1;
- }
- j=0x80;
- for(k=0;k<8;k++)
- {
- SendDat_595(~j);
- for(i=0;i<30000;i++);
- j=j>>1;
- }
- }
2.2、源代码
HC89S001P_TEST _595.rar
(102.74 KB, 下载次数: 18)
三、执行结果
|