想改个程序,也好了解下IO的操纵,水平有限,不知51移植到STM32要注意哪些问题
//LED段口定义修改了。。。
#define A_port PBout(0)// PB0
#define B_port PBout(1)// PB1
#define C_port PBout(2)// PB2
#define D_port PBout(3)// PB3
#define DA_in_port PBout(4)// PB4
#define CLK_port PBout(5)// PB5
#define Latch_port PBout(6)// PB6
IO初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<2;
GPIOB->CRL&=0XF0000000;
GPIOB->CRL|=0X03333333;
GPIOB->ODR|=1<<0;
GPIOB->ODR|=1<<1;
GPIOB->ODR|=1<<2;
GPIOB->ODR|=1<<3;
GPIOB->ODR|=1<<4;
GPIOB->ODR|=1<<5;
GPIOB->ODR|=1<<6;
}
主程序
u8 table[]={
0xFF,0xFC,0xFF,0xFC,0xC0,0xC0,0xC0,0xC0,0x4F,0xCE,0x49,0xCE,0x29,0xF9,0xE3,0xF9,
0xE7,0xF9,0xE7,0xF9,0xC3,0xF1,0xD9,0xE4,0x78,0xCE,0x3D,0x9F,0x9F,0xFF,0xFF,0xFF,
0x7F,0xFE,0x19,0xC0,0x19,0xC1,0x93,0xC9,0x9F,0xC9,0x90,0xC9,0x90,0xC9,0x93,0xC9,
0x93,0xC9,0x13,0xC1,0x93,0xC9,0xF3,0xF9,0xE3,0xFF,0x09,0x80,0x1C,0x80,0xFF,0xFF,
0x7F,0xFE,0x7F,0xFE,0x73,0xEE,0x67,0xE6,0x67,0xF2,0x6F,0xFA,0x00,0x80,0x00,0x80,
0x9F,0xFC,0x9F,0xFC,0x9F,0xFC,0xCF,0xDC,0xE7,0x9C,0xF0,0x80,0xF9,0xC1,0xFF,0xFF
0xFF,0xFC,0xE7,0xFC,0x64,0xC0,0x64,0xC0,0x24,0xFF,0x84,0xF9,0xE4,0xF3,0x24,0xC0,
0x24,0xC0,0x24,0xC9,0x24,0xC9,0x24,0xC9,0x24,0xC0,0x27,0xC0,0x27,0xCF,0xFF,0xFF,
0xFF,0xFF,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x77,0xF6,0x77,0xE6,0x73,0xE6,0x73,0xCE,
0x79,0xCE,0x79,0x9E,0x7D,0x9E,0x7F,0xFE,0x7F,0xFE,0x1F,0xFE,0x1F,0xFF,0xFF,0xFF,
0x7F,0xC0,0x41,0xC0,0x41,0xCE,0x4F,0xCE,0x41,0xC0,0xC1,0xF3,0x79,0x80,0x79,0x80,
0x41,0x92,0x4F,0x92,0x4F,0x80,0xCF,0xF3,0xCF,0x93,0x41,0x80,0x63,0x98,0xFF,0xFF,
0x3F,0xFF,0x3F,0xFF,0x03,0xE0,0x03,0xE0,0x33,0xE7,0x33,0xE7,0x03,0xE0,0x33,0xE7,
0x33,0xE7,0x03,0xE0,0x03,0xE0,0x33,0x9F,0x3F,0x9F,0x3F,0x80,0x7F,0xC0,0xFF,0xFF,
0x03,0xE0,0x03,0xE0,0xFF,0xF3,0xFF,0xF9,0x7F,0xFC,0x7F,0xFE,0x00,0x80,0x00,0x80,
0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x1F,0xFE,0x3F,0xFF,0xFF,0xFF,
};
void HC595_Data_Send(u8 daH,u8 daL,u8 hang)
{
u8 i;
Latch_port = 0;
CLK_port = 0;
for(i=0;i<8;i++){
if((daH&0x80)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
daH <<= 1;
}
for(i=0;i<8;i++){
if((daL&0x80)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
daL <<= 1;
}
switch (hang)
{
case 0:
A_port = 0; B_port = 0; C_port = 0; D_port = 0;
break;
case 1:
A_port = 1; B_port = 0; C_port = 0; D_port = 0;
break;
case 2:
A_port = 0; B_port = 1; C_port = 0; D_port = 0;
break;
case 3:
A_port = 1; B_port = 1; C_port = 0; D_port = 0;
break;
case 4:
A_port = 0; B_port = 0; C_port = 1; D_port = 0;
break;
case 5:
A_port = 1; B_port = 0; C_port = 1; D_port = 0;
break;
case 6:
A_port = 0; B_port = 1; C_port = 1; D_port = 0;
break;
case 7:
A_port = 1; B_port = 1; C_port = 1; D_port = 0;
break;
case 8:
A_port = 0; B_port = 0; C_port = 0; D_port = 1;
break;
case 9:
A_port = 1; B_port = 0; C_port = 0; D_port = 1;
break;
case 10:
A_port = 0; B_port = 1; C_port = 0; D_port = 1;
break;
case 11:
A_port = 1; B_port = 1; C_port = 0; D_port = 1;
break;
case 12:
A_port = 0; B_port = 0; C_port = 1; D_port = 1;
break;
case 13:
A_port = 1; B_port = 0; C_port = 1; D_port = 1;
break;
case 14:
A_port = 0; B_port = 1; C_port = 1; D_port = 1;
break;
case 15:
A_port = 1; B_port = 1; C_port = 1; D_port = 1;
break;
}
Latch_port = 1;
Latch_port = 0;
}
int main(void)
{
u8 hang=0;
u8 i,zi;
u16 time1;
Stm32_Clock_Init(9);
delay_init(72);
LED_Init();
while(1)
{
for(time1=300;time1>0;time1--)
{
HC595_Data_Send(table[(hang+zi*16)*2+1],table[(hang+zi*16)*2],hang);
hang++; //调试的时候我在hang这里设置断点,发现hang一直是0,time1是递减的
if(hang>i)hang=0;
}
i++;
if(i>15)
{
i=0;
zi++;
if(zi>7)
zi=0;
}
}
}
|