/*************FPC886/MF520***************/
/***************8核心测试****************/
/**************6PWM+188LED***************/
/****************20201127****************/
/*************qq:774145445***************/
/*************快手:共同学习stm8**********/
/******************************************************************************/
// _______@________
// cl--|1 pa2 pa1 20|--ch
// bl--|2 pa3 p pa0 19|--bh
// al--|3 pa4 f pa7 18|--ah
// k1--|4 pa5 c pa6 17|--led1
// _____|5 nc 8 nc 16|_____
// 烧录时与nc相连 |-----|6 gnd 8 vdd 15|-----| 烧录时与nc相连
// k2--|7 pb0 6 pb7 14|--led2
// k3--|8 pb1 pb6 13|--led3
// k4--|9 pb2 pb5 12|--led4
// k5--|10pb3_____pb4 11|--led5
/******************************************************************************/
// 显示屏2353/188
// _2a_ ____
// 正转| 2e 2b | |
// | | | | |
// -2f- ----
// 反转| 2e 2c | |
// | |_2d_| |____|
// @1 @2 @3 @4 @5
// ____________________________
// | |led1|led2|led3|led4|led5|
// |_1_|_高_|_3A_|_3C_|_3E_|____|
// |_2_|_3B_|_高_|_2A_|_1B_|____|
// |_3_|_3D_|_2B_|_高_|_1A_|____|
// |_4_|_3F_|_2D_|_2C_|_高_|____|
// |_5_|_3G_|_2E_|_2F_|_2G_|_高_|
//共阳:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0x88,0x83,0xc6,0xa1,0x86,0x8e
//共阴:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f//0x77,0x7c,0x39,0x5e,0x79,0x71
/******************************************************************************/
#include "extern.h"
led1 bit pa.6;
led2 bit pb.7;
led3 bit pb.6;
led4 bit pb.5;
led5 bit pb.4;
k1 bit pa.5;
k2 bit pb.0;
k3 bit pb.1;
k4 bit pb.2;
k5 bit pb.3;
byte xianshi_a1; //显示用0-99
byte xianshi_a2; //显示用正反转,0/不显,1/正转,2/反转
byte xianshi_c1; //查表十位
byte xianshi_c2; //查表个位
/******************************************************************************/
void xianshi(); //显示
void xianshi_fj(); //显示分解
/******************************************************************************/
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/4 // SYSCLK=IHRC/4
pmode 31; ///8/8/8/8/8/8/8/8带宽共享
fppen = 0xFF; //8核全开
//有8个核心可以分时全部运行,可以分别干8件事.
//8核真爽!
$ led1 out,low;
$ led2 out,low;
$ led3 out,low;
$ led4 out,low;
$ led5 out,low;
$ k1 in,pull;
$ k2 in,pull;
$ k3 in,pull;
$ k4 in,pull;
/******************************************************************************/
$ pwmgc enable,updown,reset,pa2; //控制寄存器
$ pwmgm Protection_Enable,Protection_Inverse,IHRC,/16;
//PWMGC1 =0b1110_0000; //pwmg控制寄存器1,7/1启用,65/11三相电机,4/0只读0,32/00pwm5低电位,10/00pwm4低电位
//PWMGC2 =0b0000_0000; //pwmg控制寄存器2,76/00pwm3低电位,54/00pwm2低电位,32/00pwm1低电位,10/00pwm0低电位
//PWMCUBH //pwm计数上限高位寄存器7-0/11:4
//PWMCUBL //pwm计数上限低位寄存器7-5/3:1
//PWM0DTH //pwm0占空比高位7-0/11:4
//PWM0DTL //pwm0占空比低位7-4/3:0
//PWM1DTH //pwm1占空比高位7-0/11:4
//PWM1DTL //pwm1占空比低位7-4/3:0
//PWM2DTH //pwm2占空比高位7-0/11:4
//PWM2DTL //pwm2占空比低位7-4/3:0
//PWMDZ //pwm死区寄存器7-1/0-254
/******************************************************************************/
$ k1 out;
while(1)
{
k1 =1;
.delay 50000;
k1 =0;
.delay 50000;
}
}
/******************************************************************************/
void FPPA1 (void)
{
while(1)
{
}
// goto $;
}
/******************************************************************************/
void FPPA2 (void)
{
while(1)
{
}
// goto $;
}
/******************************************************************************/
void FPPA3 (void)
{
while(1)
{
}
// goto $;
}
/******************************************************************************/
void FPPA4 (void)
{
while (1)
{
}
// goto $;
}
/******************************************************************************/
void FPPA5 (void)
{
while (1)
{
}
// goto $;
}
/******************************************************************************/
void FPPA6 (void)
{
while(1)
{
}
// goto $;
}
/******************************************************************************///显示用0-99
void FPPA7 (void)
{
xianshi_a1 =0; //显示用0-99
xianshi_a2 =0; //显示用正反转,0/不显,1/正转,2/反转
byte x_aa1;
x_aa1 =0;
while(1)
{
x_aa1 ++;
if((x_aa1==1)||(x_aa1==25))
{
xianshi_fj(); //显示分解
}
xianshi(); //显示
if(x_aa1==50)
{
x_aa1=0;
xianshi_a1 ++;
if(xianshi_a1>99)
{
xianshi_a1=0;
}
}
}
// goto $;
}
/******************************************************************************
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
//...
}
popaf;
}
/******************************************************************************/ //显示
void xianshi() //显示
{
/******************************************************************************/ //第一种
$ led1 out,high
$ led2 in;
$ led3 in;
$ led4 in;
$ led5 in;
//if(){} //高
if(xianshi_c2.0){$ led2 out,low;} //3a
if(xianshi_c2.2){$ led3 out,low;} //3c
if(xianshi_c2.4){$ led4 out,low;} //3e
//if(){} //空
.delay 1000;
/******************************************************************************/ //第二种
$ led1 in;
$ led2 out,high
$ led3 in;
$ led4 in;
$ led5 in;
if(xianshi_c2.1){$ led1 out,low;} //3b
//if(){} //高
if(xianshi_c1.0){$ led3 out,low;} //2a
//if(xianshi_a2==0){;} //1b //0/不显,1/正转,2/反转
if(xianshi_a2==2){$ led4 out,low;} //1b反转 //0/不显,1/正转,2/反转
//if(){} //空
.delay 1000;
/******************************************************************************/ //第三种
$ led1 in;
$ led2 in;
$ led3 out,high
$ led4 in;
$ led5 in;
if(xianshi_c2.3){$ led1 out,low;} //3d
if(xianshi_c1.1){$ led2 out,low;} //2b
//if(){} //高
//if(xianshi_a2==0){;} //1a //0/不显,1/正转,2/反转
if(xianshi_a2==1){$ led4 out,low;} //1a正转 //0/不显,1/正转,2/反转
//if(){} //空
.delay 1000;
/******************************************************************************/ //第四种
$ led1 in;
$ led2 in;
$ led3 in;
$ led4 out,high
$ led5 in;
if(xianshi_c2.5){$ led1 out,low;} //3f
if(xianshi_c1.3){$ led2 out,low;} //2d
if(xianshi_c1.2){$ led3 out,low;} //2c
//if(){} //高
//if(){} //空
.delay 1000;
/******************************************************************************/ //第五种
$ led1 in;
$ led2 in;
$ led3 in;
$ led4 in;
$ led5 out,high
if(xianshi_c2.6){$ led1 out,low;} //3g
if(xianshi_c1.4){$ led2 out,low;} //2e
if(xianshi_c1.5){$ led3 out,low;} //2f
if(xianshi_c1.6){$ led4 out,low;} //2g
//if(){} //高
.delay 1000;
}
/******************************************************************************/ //显示分解
void xianshi_fj() //显示分解
{
//byte xianshi_a1; //显示用0-99
//byte xianshi_a2; //显示用正反转,0/不显,1/正转,2/反转
byte xianshi_b1=0; //个位
byte xianshi_b2=0; //十位
//byte xianshi_c1=0; //查表十位
//byte xianshi_c2=0; //查表个位
/******************************************************************************/ //计算出十位,个位
xianshi_b1 =xianshi_a1;
while(xianshi_b1>9) //分解出十位
{
xianshi_b1 -=10;
xianshi_b2 +=1; //十位
}
//xianshi_b1 //个位
//xianshi_b2 //十位
/******************************************************************************/ //代替查表
//共阳:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0x88,0x83,0xc6,0xa1,0x86,0x8e
//共阴:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f//0x77,0x7c,0x39,0x5e,0x79,0x71//用这个
if(xianshi_b2 ==0) {xianshi_c1 =0x3f;} //十位
if(xianshi_b2 ==1) {xianshi_c1 =0x06;}
if(xianshi_b2 ==2) {xianshi_c1 =0x5b;}
if(xianshi_b2 ==3) {xianshi_c1 =0x4f;}
if(xianshi_b2 ==4) {xianshi_c1 =0x66;}
if(xianshi_b2 ==5) {xianshi_c1 =0x6d;}
if(xianshi_b2 ==6) {xianshi_c1 =0x7d;}
if(xianshi_b2 ==7) {xianshi_c1 =0x07;}
if(xianshi_b2 ==8) {xianshi_c1 =0x7f;}
if(xianshi_b2 ==9) {xianshi_c1 =0x6f;}
if(xianshi_b1 ==0) {xianshi_c2 =0x3f;} //个位
if(xianshi_b1 ==1) {xianshi_c2 =0x06;}
if(xianshi_b1 ==2) {xianshi_c2 =0x5b;}
if(xianshi_b1 ==3) {xianshi_c2 =0x4f;}
if(xianshi_b1 ==4) {xianshi_c2 =0x66;}
if(xianshi_b1 ==5) {xianshi_c2 =0x6d;}
if(xianshi_b1 ==6) {xianshi_c2 =0x7d;}
if(xianshi_b1 ==7) {xianshi_c2 =0x07;}
if(xianshi_b1 ==8) {xianshi_c2 =0x7f;}
if(xianshi_b1 ==9) {xianshi_c2 =0x6f;}
}
/******************************************************************************/ |
|