先看DIP40接口的LED怎么用?
命令头的含义:
这个适合我们的擎天柱出场:
直接写出调用函数:
void PLED_40(void)
{
u8 cod;
cod = 0x0f; //表示开启P0-P3
cod = 0X01; //P0端口
cod = 0X01; //P1
cod = T_NUM; //P2
//cod = ~T_NUM; //P2
cod = 0X01; //P3
LED40_SendData( cod,5 ); //这个函数在USB库里
//说明在STC32_STC8_USB.H里,详见:
//void LED40_SendData(BYTE *dat, BYTE size):
//2个参数,第一个是数组名字,第二个是成员数量
P2 = T_NUM;
//P2 = ~T_NUM;
state_now++;
if( state_now>7 )
state_now = 0;
}
记得在io.h里声明:
#include "config.h" //调用头文件
//#define 引脚名称PXX的端口定义
#define HC595_SER P34
#define HC595_RCK P35
#define HC595_SCK P32
void LED0_Blink(void);
void LED1_Blink(void);
void LED2_Blink(void);
void KEY_Task(void);
//---------------------------------595控制函数---------------------------------
void Init_595(void);
void Send_595( u8 dat );
void Display_Seg(u8 HC595_1,u8 HC595_2);
void Seg_Task(void);
//以下1行任务四才启用
void TIMECOUNT_Task(void);
void PLED_40(void);
void SEG_PC( void );
#endif
还是1秒调用1次:
static TASK_COMPONENTS Task_Comps[]=
{
//状态计数周期函数
{0, 1 ,1 , Seg_Task}, /* task 1 Period: 1ms扫描一次数码管 */
{0,1000,1000, TIMECOUNT_Task}, /* task 1 Period: 1s调用计时一次 */
{0,1000,1000, PLED_40}, /* task 1 Period:1s调用一次 */
{0,1000,1000, SEG_PC}, /* task 1 Period: 1s调用一次 */
};
下面是试验箱的流水灯+USD-CDC调试接口显示
u8 cod;
cod = 0x0f; //表示开启P0-P3
cod = ~T_NUM; //P0端口
cod = 0X01; //P1
cod = 0X01; //P2
cod = 0X01; //P3
LED40_SendData( cod,5 );
P0 = ~T_NUM;
state_now++;
if( state_now>7 )
state_now = 0;
接着看虚拟数码管:
也是先写驱动函数:
void SEG_PC( void )
{
u8 cod;
cod = SEG_NUM; //小时的十位数的数码管段码
cod = SEG_NUM;
cod =SEG_NUM; //数码管刷段码和位码
cod = SEG_NUM; //分钟
cod = SEG_NUM;
cod =SEG_NUM; //数码管刷段码和位码
cod = SEG_NUM; //分钟
cod = SEG_NUM;
SEG7_ShowCode(cod);
//说明在STC32_STC8_USB.H里,详见:
//void SEG7_ShowCode(BYTE *cod);
//1个参数,是个8位数组名字
}
这样虚拟的数码管和LED都可以使用了: