LCD Number 具体介绍参见
http://www.iteye.com/topic/178880
原题和一些解法在这里:http://rubyquiz.com/quiz14.html
LCD Numbers感觉是一个比较经典的问题.涉及到编码,数据结构选择.研究了不少解法,希望有个即精炼,又好懂,扩展性又好的办法.一般解法三种类型:模版法(TEMPLATE),开关位,状态机(STATE MACHINE).这其中最好的是状态机法.用3横2竖这样5个笔划来表达一个LCD 字符,表达最精炼,扩展性也很好.
我专门研究了 电话接线器上的LCD屏,除了0-9数字外,还尽可能多的把字母也表示出来.A-F,HLNOPQU- 这些都可以处理,甚至S-5,T-7,1-I有时是相互替代的.
研究了几天,终于把电话接线器上的LCD显示完全实现了.显示的时候为了增加效果,采取一行行输出,最后看到整个LCD 显示.同时尽量做了全面的参数检测处理,如果有输入的字符不在能显示的LCD表中,将他们显示出来反馈给用户.自我感觉尽量做到完美了.
class LCD
#ALL LCD DIGIT CAN DIVIDE INTO 3 Horizon and 2 vertical line
#order :h v h v h,
#horizon 2 type: 0: ;1: - ;
#vertical 4 type: 0:| ;1: |;2:| |;3
# change LCD_SYM to hash for flexible
LCD_SYM = {"0"=>[1,2,0,2,1],
"1"=>[0,1,0,1,0],
"2"=>[1,1,1,0,1],
"3"=>[1,1,1,1,1],
"4"=>[0,2,1,1,0],
"5"=>[1,0,1,1,1],
"6"=>[1,0,1,2,1],
"7"=>[1,1,0,1,0],
"8"=>[1,2,1,2,1],
"9"=>[1,2,1,1,1],
"A"=>[1,2,1,2,0], #for hex display
"B"=>[0,0,1,2,1],
"C"=>[1,0,0,0,1],
"D"=>[0,1,1,2,1],
"E"=>[1,0,1,0,1],
"F"=>[1,0,1,0,0],
"H"=>[0,2,1,2,0],
"L"=>[0,0,0,0,1],
"N"=>[0,3,1,2,0],
"O"=>[0,3,1,2,1],
"P"=>[1,2,1,0,0],
"Q"=>[1,2,1,1,0],
"U"=>[0,2,0,2,1],
"-"=>[0,3,1,3,0]
}
def initialize(scale = 1)
@draw = [[' '+' '*scale+' ', # h0
' '+'-'*scale+' '], # h1
['|'+' '*scale+' ', # v0
' '+' '*scale+'| ', # v1
'|'+' '*scale+'| ', # v2
' '+' '*scale+' ']] # v3, for 'no-' output
@sc = scale
end
def display(num)
number = num.to_s
0.upto(4) do |i|
line = ''
number.each_byte {|b| line << @draw[i%2][LCD_SYM[b.chr.upcase][i]] } #LCD_SYM hash now
if i%2==1 # vertical line
@sc.times {puts line + "\n";sleep 0.8} # output line by line,not a whole
else # horizon line
puts line + "\n"
sleep 0.8 #sleep 0.8 sec,enhance line by line effect
end
end
end
end
def print_usage
print "\nUsage: #{$0} [-s <size>] <symbols>\n",
" -s scale size (positive integer), default is 2\n",
" symbols symbols to display as lcd\n"
exit 1
end
# ================================================================
# main
# ================================================================
if __FILE__ == $0
# get arguments and error checking on parameters
require 'getoptlong'
print_usage & exit if ARGV.empty?
size = 2 # default scale
opts = GetoptLong.new(
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ "--size", "-s", GetoptLong::OPTIONAL_ARGUMENT] )
opts.each do |opt, arg|
case opt
when '--help'
puts "\nShow this message.\n"
print_usage
exit
when '--size'
if arg.to_i.to_s != arg
puts 'Error: size param is not a number'
exit
end
size = arg.to_i
end
end
print_usage & exit if ARGV.empty?
disp_str = ARGV[0]
reg =/[^0-9a-fA-FHhLlNno-qO-QUu-]/
begin
matches = disp_str.scan(reg)
if not matches.empty?
puts "u have input some chars not in LCD SYMBOL:" +matches.join
puts "\n LCD SYMBOL:[0-9a-fA-FHhLlNno-qO-QUu-]\n"
exit
end
lcd = LCD.new(size)
lcd.display(disp_str) #display line by line,not a whole
rescue NoMethodError
puts "input some chars not include in LCD_SYMBOL"
rescue =>err
puts err
end
end
分享到:
相关推荐
QT倒计时源代码lcdNumber应用实例是一种在QT框架下实现倒计时功能的方法,它结合了`lcdNumber`部件,提供了丰富的功能,包括倒计时的重置、暂停以及自定义时间设置。这个实例在许多需要定时提醒或管理时间的应用场景...
标题中的“lcdnumber.7z”表明这是一个与液晶数字显示相关的项目,可能包含源代码、设计文件或资源。描述提到这是基于QT的实现,意味着它使用了QT这一跨平台的应用程序开发框架,来创建一个类似数码管风格的LCD数字...
在本文中,我们将深入探讨如何使用QT框架实现LCD数字显示,这种显示方式类似于常见...在实际开发中,可以根据项目需求对LCDNumber进行进一步的扩展和优化,比如添加更多的控制按钮,或者与其他部件交互,提升用户体验。
5.保证无毒 1.简单,方便,实用 3.实例可以自行改用 1.如有非法,本人无法律责任! 8.更多作品,查找标签“朱建强”7.... 4.如需联系我请看左边数字!1.如不知代表何物,那就放弃计算机吧! 0....CSDN老板不让我上传联系方式。
"lcd-number.rar_number" 提供的资源很可能是关于如何在LCD上显示数字的教程或代码库。这里我们将深入探讨LCD显示屏的工作原理、如何在LCD上显示数字以及可能涉及的编程技术。 LCD(Liquid Crystal Display)显示屏...
QLcdNumber是Qt提供的一种用于显示数字的控件,通常用于模拟LCD显示器的效果。在这个项目中,我们将学习如何自定义QLcdNumber的外观,并利用贴图来展示时间,以创建出个性化且具有视觉吸引力的时钟界面。 首先,让...
easyUI datagrid 自动调整行号大小
在Java编程领域,创建一个大型LCD液晶时钟显示屏是一项具有挑战性和实用性的任务。 LCD(Liquid Crystal Display)液晶显示屏常用于各种设备上显示时间和信息,因其低功耗、清晰度高等特点而广受欢迎。本项目显然...
4. 可以考虑扩展功能,比如添加步长控制、最小值和最大值限制,以及监听数值变化的回调接口。 接下来,我们讨论TimePicker。原生的TimePicker通常用于选择小时和分钟,有两种模式:数字(24小时制或12小时制)和...
LCD_write_number(7,0,0,BT1_time,"sec",10); // LCD_write_number(0,1,1,BT1_T,"C",0); // LCD_write_number(0,0,0,D882_P,"mW",0); LCD_write_new();//把缓存里的数据写入LCD */ // PORTD=0xff; /...
例如,当接近预设的号码范围上限时,可能需要扩展范围;或者在合并公司数据时,可能需要重新规划Number Sequence以保持一致性。 总之,了解并正确使用AX中的Number Sequence对于企业的数据管理和流程效率至关重要。...
### ArcGIS中“Number of shape does not match the number of table records”问题解析及解决方法 #### 问题背景 在使用ArcGIS进行空间数据分析时,可能会遇到一个常见的问题:“Number of shape does not match ...
bignumber.min.js是一个用于任意精度算术的 JavaScript 库。 众所周知,数字运算的精度问题是一个让人很旦疼的问题,而java中有BigDecimal类对数字精度问题进行处理,经过一番查询,发现前段有一个宝藏精度处理类big...
标题 "test TFT english number dispaly_stm32lcd_" 提示我们这是一项关于在TFT(Thin Film Transistor)液晶显示器上使用STM32微控制器显示英文数字的测试项目。STM32是一款基于ARM Cortex-M内核的微控制器,广泛...
在Android开发中,`NumberPicker` 是一个非常实用的组件,常用于选择数字或进行上下滑动的操作,比如设置日期、时间或者选择序号。在默认情况下,`NumberPicker` 的样式是系统预设的,但有时候为了满足个性化需求...
它通过jQuery的animate方法扩展了基本的数字动画能力,添加了数属性和阶跃函数,使得动画效果更为生动且富有表现力。 1. **数属性**:这个插件支持设置数字的递增或递减速度、起始和结束值、动画持续时间等参数。...
Numberpicker是Android系统中一个用于显示并选择数字的控件,通常用于滑动选择日期、时间或者数值。在默认情况下,Numberpicker具有特定的颜色、字体样式和显示数量。然而,为了满足不同应用的设计需求,开发者可能...
标题中的“自定义numberpicker”指的是在Android开发中对系统默认的NumberPicker组件进行自定义,以满足特定的用户界面需求或功能扩展。NumberPicker是Android SDK提供的一种UI控件,通常用于让用户在预设的一组数值...