|
我的开发环境是IAR,为防止意外,我写了两个版本,
一个是包含iostm8.h,涉及的代码如下:
端口的宏定义:
#define IO_F PC_ODR_ODR6 //O
#define IO_C PC_ODR_ODR5 //O
#define IO_G PC_ODR_ODR4 //O
#define IO_B PC_ODR_ODR3 //O
#define OUT PC_ODR_ODR1 //O
端口段码显示驱动:
void IO_Dis(uint8 buf)
{
uint8 dat;
dat=(buf&0xff);
IO_A=!((bit)(dat&0x01));
IO_B=!((bit)(dat&0x02));
IO_C=!((bit)(dat&0x04));
IO_D=!((bit)(dat&0x08));
IO_E=!((bit)(dat&0x10));
IO_F=!((bit)(dat&0x20));
IO_G=!((bit)(dat&0x40));
IO_P=!((bit)(dat&0x80));
}
上面的bit是宏定义了bool;
PC1的操作就是将OUT=1或OUT=0;
第二个是使用了库头文件
端口操作定义
#define PORTC_SET(pin,var) GPIOC->ODR = (GPIOC->ODR&(~pin))|(var?pin:0)
#define B_A 0x20
#define B_D 0x10
#define B_E 0x08
……
显示驱动为:
void IO_Dis(uint8 buf)
{
uint8 dat;
dat=~(buf&0xff);
PORTB_SET(B_A,(dat&0x01));
PORTC_SET(B_B,(dat&0x02));
PORTC_SET(B_C,(dat&0x04));
PORTB_SET(B_D,(dat&0x08));
PORTB_SET(B_E,(dat&0x10));
PORTC_SET(B_F,(dat&0x20));
PORTC_SET(B_G,(dat&0x40));
}
显示驱动函数void IO_Dis(uint8 buf)是在定时中断中执行的,1ms溢出中断,OUT的操作在主函数中。
|
|