比如我想用单片机普通I/O控制74LS164

来源:百度知道 编辑:UC知道 时间:2024/07/05 05:54:17
随便2个普通I/O口控制74HC164的clock、data(A、B),再通过164的输出端口输出数据(如:00000001,00000010...)请问该怎么样写?用C语言.如果发来调试通过+加最少50分.

#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
sbit data_164 = P1^0;
sbit clk_164 = P1^1;
sbit mr_164 = P1^2;
uchar code display[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/**********************************************************
延时t毫秒
11.0592MHz时钟,延时约1ms
**********************************************************/
void delayms(uint t)
{
uchar k;
while(t--)
{
for(k=0; k<125; k++)
{;}
}
}
/**********************************************************
写数据子函数
**********************************************************/
void wr_bits(uchar num)
{
uchar i;
for(i=0;i<8;i++)
{
if(num&0x80) //从数据的高位开始送
data_164 =1;
else
data_164 =0;
num<<=1; //向左移动一位
clk_164 =0; //下降沿将数据写入164
_nop_();