当前位置:网站首页>在大程序中怎么样显示LED点阵
在大程序中怎么样显示LED点阵
2022-08-03 05:24:00 【langaopeng】
当然,LED点阵的显示在网上有很多简单的方法,我总结了一下,大多都是用死延时的方法来扫描LED的行或者是列,,,一般的方法都是如下如写的:
以8*8点阵为例:
byte code tab[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
byte hang;
void writeDataTo595(byte data)
{
byte i;
led_OE_CLK = 0;
for(i=0;i<8;i++)
{
led_clk = 0;
if(data&0x80) led_data = 1;
else led_data = 0;
led_clk = 1;
}
led_OE_CLK =1;
}
void display()
{
byte i;
for(i=0;i<8;i++)
{
writeDataTo595(tab[i]);
hang = 0x01<<i;
delay();
hang = 0x00;
}
}
void main()
{
display();
}
显然这种方法只适合用于学习点阵原理,不适合用于实际的工程。在实际做工程时,点阵的显示是比较复杂的,而大工程中,点阵显示有可能只是工程中的一小部分,如果用这种方法来扫描点阵的话。那程序就没有方法做其他的任务了。。原因为几个方面:
1.大程序中,主循环一般是不可以放延时程序的。。。当以上的dislay()放到man()里实时循环的话。整个程序系统将不稳定。。
2 若用死延时的方法处理点阵,那么工程中其他的任务将有可能被延时。导致系统不能实时的处理。
3 点阵的扫描靠的是不段的驱动来完成的。扫描的过程是不可以被中断的。。一旦中断的时间长一些,必会导致扫描速度变慢而导致点阵显示有闪烁。如果有死延时的方法来扫描点阵的话。大工程中很难做到让点阵实时扫描。。
综上所述,点阵扫描不能用死延时方法完成。下面我来介绍一下另一种较为可靠的方法,状态机扫描方法。
程序如下:
void display()
{
switch(state)
{
case 0: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 1 : hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 2: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 3 : hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 4: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 5: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 6: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
case 7: hang = 0x00;
writeDataTo595(tab[state]);
hang = 0x01<<state;
break;
}
}
void interrput timer ()
{
state++;
if(state>=8)
state = 0;
}
这个状态机的方法处理点阵扫描时没有用到delay的死延时方式。而是用中断的方式改变状态的方法来扫描点阵中的每一行,能使程序实时性更高。若大工程中有其他的任务刚性需要延时,可以在延时程序中加入display而不会影响程序。更好的让display不段的驱动led。显示效果更佳。
边栏推荐
- Android学习 | 08.SQLiteOpenHelper
- Convolutional Nerual Nertwork(CNN)
- 自监督论文阅读笔记 Incremental-DETR:Incremental Few-Shot Object Detection via Self-Supervised Learning
- 动漫:海贼王女
- 【第一周】深度学习和pytorch基础
- A.1#【内存管理】——1.1.3 page: struct page
- 中国食品产业园区行业前景规划建议及投融资模式分析报告2022~2028年
- Dynamic adjustment subject web system?Look at this one is enough
- 寄存器常见指令
- IO 复用
猜你喜欢

【HQL】(二) 查询使用正则表达式做列选择

【DC-4 Range Penetration】

用户登录验证程序的实现

Leetcode刷题——一些用层次遍历解决的问题(111. 二叉树的最小深度、104. 二叉树的最大深度、226. 翻转二叉树、剑指 Offer 27. 二叉树的镜像)

Browser multi-threaded off-screen rendering, compression and packaging scheme

Sqli-labs-master shooting range 1-23 customs clearance detailed tutorial (basic)

磁盘空间管理

二叉树常见的问题和解决思路

ucos任务调度原理

神经网络基础
随机推荐
Kettle Spoon 安装配置详解
中国生物降解塑料行业市场运营态势及发展趋势研究报告2022~2028年
memblock
详解背包问题(DP分支)
中国柔性制造系统(FMS)市场发展动态及未来趋势预测报告2022~2028年
The ` monorepo ` ` hoist ` mechanism lead to the change of the loading configuration file path
进程间通讯 (IPC 技术) - 信号
Qlik Sense 聚合函数及范围详解(Sum、Count、All、ToTaL、{1})
自监督论文阅读笔记 Multi-motion and Appearance Self-Supervised Moving Object Detection
Mysql 存储过程详解(procedure)
【DC-5 Range Penetration】
A.1#【内存管理】——1.1.4 node: 初始化
二叉树常见的问题和解决思路
Playing with Markdown(2) - Extraction and Manipulation of Abstract Syntax Trees
中国生产力促进中心”十四五”规划与发展规模分析报告2022~2028年
Makefile
深度学习理论课程第八、九、十章总结
布尔盲注需简化代码
中国认证认可服务行业“十四五”发展规划及经营模式分析报告2022~2028年
自监督论文阅读笔记 Incremental-DETR:Incremental Few-Shot Object Detection via Self-Supervised Learning