#include <reg52.h> // 包含头文件
#include<intrins.h>
sbit HC165_DATA= P2^0; // 定义串行数据端口
sbit HC165_SH = P2^1; // 定义数据锁存端口
sbit HC165_CLK = P2^2; // 定义串行时钟端口
//sbit rck=P1^2;
//sbit ds=P1^1;
//sbit clk=P1^0;
unsigned char a[2];
void read_char165(void) //并入串出
{
unsigned char i;
HC165_SH =0; //置入控制有效,锁存端口值
HC165_SH =1;
for(i=0;i<8;i++)
{
a[0]<<=1; //先取高位
if(HC165_DATA)
{
a[0]|=0X01;
}
HC165_CLK=0; //
HC165_CLK=1; //上升沿
}
// for(i=0;i<8;i++)
// {
// a[1]<<=1;
// if(HC165_DATA)
// {
// a[1]|=0X01;
// }
// HC165_CLK=0; //
// HC165_CLK=1; //上升沿
// }
}
//void write_595(unsigned char dat)//串入并出
//{
// unsigned char i=0;
// for(i=0;i<8;i++)
// {
// clk=0;
// if((dat&0x80)==0x80) //先读高位
// ds=1;
// else ds=0;
// clk=1;
// dat<<=1; //一直往高位移
// }
//}
//void send_595(unsigned char dat0,unsigned char dat1)//显示
//{
// write_595(dat0);
// write_595(dat1);
// rck=0;
// rck=1;
//}
void main(void)
{
P0=0xFF;
P1=0xFF;
while(1)
{
// read_char165();
// send_595(a[0],a[1]);
read_char165();
P0=~a[0];
//P1=~a[1];
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
只有一位,是不是延时的问题啊
另外这里
if(HC165_DATA)
{
a[0]|=0X01;
}
我通常会这样:
if(HC165_DATA)
{
a[0]|=0X01;
}else{
a[0] &= 0xfe;
}
我就是觉得万一<<=1的时候 移进来的本来就是1怎么办?你以前用汇编的?
多謝,經典程序,我以後要加上.
多謝,已經OK了,程序沒問題。
一周热门 更多>