通过分析 P2 赋值 0xe0;P0 赋值 所要显示的 字码(数字或者字母)
比如:显示0 P0赋值 0xc0 ;显示1 P0赋值 0xf9
DeviceCtrl(0xe0,0xc0);// 显示‘0’
当然比赛资源包里面会提供共阳码值
数组改名为smgcode,并添加一个0x00—灭的码值
u8 code smgcode[]={ //标准字库
// 0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,
};
这个数组的码值是 共阴码值 需要取反
通过分析 P2 赋值 0xC0;P0 赋值 所要选通的 位(也就是第几个数码管)
比如:选通com1,P0赋值0x01;
DeviceCtrl(0xc0,0x01);//com1
DeviceCtrl(0xc0,0x00);//不选通位
#include "smg.h"
u8 code smgcode[]={ //标准字库
// 0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,
};
u8 smgbuf[8];
void ScanSmgTask()
{
static u8 i =0;
DeviceCtrl(0xC0,0x00);//消隐
DeviceCtrl(0xe0,~smgbuf[i]);//duan
DeviceCtrl(0xC0,0x01<<i);//com
i++;
if(i>=8){
i = 0;
}
}
说明:只需将ScanSmgTask();在之前开启的1ms定时器2中断服务函数中调用即可;
定时器2中断开启传送门:
另外:smgbuf 在主函数被赋值smgcode了,写smgcode效果是一样的
比如 将 smgbuf里面的缓存 修改成 2020 :
----- 如有错误欢迎大家批评指正!!!