#include "msp430x14x.h"
#define CLK165_UP P3OUT|=BIT0
#define CLK165_DOWN P3OUT&=~BIT0
//#define CLK P3DIR = BIT0
#define SL165_UP P3OUT|=BIT1
#define SL165_DOWN P3OUT&=~BIT1
//#define SL P3DIR = BIT1
#define OUT165 P3OUT |= BIT2;//(P3IN&BIT2)>>2
//#define Qh P3DIR = BIT2
#define uchar unsigned char
/*#define SL RC0
#define QH RC1
#define CLK RC2 //移位寄存器时钟*/
unsigned char hc74_165(void);
void Delay(unsigned int); //延时函数
void delay();
void SysClockInit(void);
int i;
//*************** 主程序 ********************
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关狗
SysClockInit();
P3DIR = 0XFF;
P1DIR = 0xFF;
// P1OUT = 0xFF;
P4DIR = 0xFF;
// P4OUT = 0xFF;
/* TRISC0=0; //引脚设为输出
TRISC1=1; //引脚设为输出
TRISC2=0; //引脚设为输出
TRISD=0; //引脚设为输出
TRISB=0; //引脚设为输出*/
//Qh=0;
CLK165_DOWN;
SL165_UP;
// PORTA=0Xff;
while(1)
{
for(i = 0;i < 8;i++) //LED流水显示
{
P1OUT= ~(0x01<<i);//P1口数据送74HC165的并口输入端A-H
delay( );
SL165_DOWN;
P4OUT= hc74_165();//P4口接收74HC165的输出数据,并利用LED灯显示出来当前值。
delay( );
}
}
}
//***********************74595发送函数************************
unsigned char hc74_165(void)
{
unsigned char m,p;
SL165_DOWN;//当移位/置入控制端S/L为低电平时,并行数据(A-H)被置入寄存器.而时钟(CLK,CLK INH)及串行数据(SER)均无关
delay();
SL165_UP;//当S/L为高电平时,并行置数功能被禁止
delay();
CLK165_DOWN;
p=0;
for(m=0;m<8;m++)
{
p<<=0;
p|=OUT165;
CLK165_DOWN;
delay();
CLK165_UP;//时钟输入端(上升沿有效)
delay();
}
return(p);
}
//延时函数
void Delay(unsigned int m)
{
while(m--);
}
//延时子程序
void delay()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<5;j++);
}
/*******************************************************/
/*函数名称:SysClockInit */
/*函数用途:初始化系统时钟,MCLK:8MHz; SMCLK:4MHz; ACLK:32.768kHz*/
/*入口参数:无 */
/*返回参数:无 */
/*备 注:时钟需要根据应用来配置 */
/*******************************************************/
void SysClockInit(void)
{
unsigned char i;
BCSCTL1 &= ~XT2OFF; //开启XT2高速晶振(8MHz),DCO采用默认设置;
//XT1为低速晶振(32.768kHz),低功耗可以将DCO的频率选择为最低 //MCLK默认1分频,SMCLK选择2分频(4MHz)
do
{
IFG1 &= ~OFIFG; //清除震荡器失效标志
for(i=0xFF; i>0; i--); //短时等待时间
}
while ((IFG1&OFIFG) != 0); //等待晶振起振
BCSCTL2 = SELM_2 + SELS + DIVM_0 + DIVS_1; //MCLK选择XT2CLK,SMCLK选择XT2CLK
//MCLK默认1分频,SMCLK选择2分频(4MHz)
}
功能是通过74HC165的并转串,然后实现流水灯现象。不知道为啥,这个程序实现不了,而且仿真器的mode灯也不亮。
此帖出自
小平头技术问答
一周热门 更多>