(六)数码管动态刷新
2024-01-02 22:42:00
文章目录
如何实现
利用人眼的余晖效应(100hz无闪烁)
1ms刷一个数码管 8个看起来就是一块亮的
结合前面内容进行操作
前面内容传送门:
如何段选
原理图
通过分析 P2 赋值 0xe0;P0 赋值 所要显示的 字码(数字或者字母)
比如:显示0 P0赋值 0xc0 ;显示1 P0赋值 0xf9
代码写法
DeviceCtrl(0xe0,0xc0);// 显示‘0’
这里借助isp复制共阴数码管码值
当然比赛资源包里面会提供共阳码值
数组改名为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);//不选通位
综上一次性刷新8个数码管代码
#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 :
程序现象
----- 如有错误欢迎大家批评指正!!!
文章来源:https://blog.csdn.net/m0_52555663/article/details/135349656
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!