计算机怎么数字符,CPU 只能进行数值运算,那么计算机是怎么显示出字符的?...

【韩祝鹏的回答(99票)】:

怎么显示出字符?

你是想问:只能执行数值逻辑运算的CPU最终如何在显示器上显示出文字? 对吧。

广义的“输出” 包括很多,比如显示器、打印机、绘图仪、甚至写磁盘、写网络,都算是输出。

我们以如何在屏幕上显示来举例说明。

其实要想理解这个原理,看看单片机如何点亮LED灯、如何写一个LCD屏幕,会更加直观。因为现在的PC机,已经包装了太多层了,很难一下子弄明白。我们一步步来:

一个Arduino 单片机的例子:

上面中下部那个黑长条,就是一个微型的计算机,包含了CPU及内存,输入输出控制等。上面中下部那个黑长条,就是一个微型的计算机,包含了CPU及内存,输入输出控制等。

它的代码很简单:它的代码很简单:

void setup() {

pinMode(13, OUTPUT);

digitalWrite(13, HIGH);

}

上图中,发光二极管的正极接到第13个接口,负极接地。程序启动时,将第13数字接口设置为输出(OUTPUT),然后给这个接口写入一个高电平。这样,LED灯就亮了。

在这个单片机里包含了一个CPU,它执行二进制的程序,根据程序去控制这些IO接口,与IO接口相连的外部设备就可以响应了。当然,这是最最简化的一种情况,复杂的外设控制起来需要特别复杂的程序,一般会封装成驱动程序。

能点亮一个LED,就可以点亮很多:

上图中 16X16 共256个LED灯,你可以把它看成是一个16X16分辨率的单色显示器。我们通常用的液晶屏幕,分辨率在1024X768甚至更高,但是原理可以认为类似。上图中 16X16 共256个LED灯,你可以把它看成是一个16X16分辨率的单色显示器。我们通常用的液晶屏幕,分辨率在1024X768甚至更高,但是原理可以认为类似。

在第一个例子中,一个LED灯接入了单片机上一个输出接口里,但是这个单片机没有256个那么多的输出口怎么办?我们看这个图里,实际上上面的单片机和下面的LED板子之间的连线并不多。(只有5根,还有两根是供电的)。cpu通过向这5根数据接口里写入高低电平的信号,与下面的显示板通讯。其实就是告诉下面,第几排第机列的LED灯是点亮还是灭掉。

像上面这个图,会发出类似这样的信息:

第2排第2列,点亮

第2排第3列,点亮,

。。。。

那么我们要输出一个文字,岂不是要写很麻烦的程序?

这些麻烦事底层的程序帮我们做了。

例如,我们最后的程序想要输出这个“陆”字,只要像下面这样写:

(write "陆")

print "陆"

printf("陆")

我们继续看个更复杂些的例子,用Arduino驱动诺基亚5110液晶屏显示文字,帖个帖子的地址:

arduino uno + nokia 5110

你可以看下帖子里的程序。那个程序里有个数组:你可以看下帖子里的程序。那个程序里有个数组:

static const byte ASCII[][5] =

{ ........................

{

0x7e, 0x11, 0x11, 0x11, 0x7e } // 41 A

,{

0x7f, 0x49, 0x49, 0x49, 0x36 } // 42 B

,{

0x3e, 0x41, 0x41, 0x41, 0x22 } // 43 C

。。。。。这就是每个字符对应的“样子”,就是一个5X8的矩阵。就是字体。

其中我们只需要写:

gotoXY(2,2);

LcdString("Albert Lee");

这样的语句就可以了,LcdString 函数会调用LcdCharacter 函数来写一个个字符。LcdCharacter函数会查每一个字符对应的“字体表”,得到对应的一个矩阵,这个矩阵对应到屏幕上一块矩形区域,矩阵中是1的位置,屏幕上对应点就点亮,是0的位置,屏幕上对应点就灭。

现在我们常用的Windows或 Linux,将这些显示文字的功能做到操作系统及驱动中了,但整体的过程与上面那个程序是类似的。

不同的编程语言,不管是编译的还是解释的,最终都会调用到系统提供的辅助程序,它们会把输出的字符翻译成一个二维的点阵,然后把这个点阵显示到屏幕上面。

CPU不单单是数字运算,它其实包含一个叫 ALU 的部件:Arithmetic logic unit 算术与逻辑单元。所有的信息,不管是文字还是图像、声音,都可以转换成二进制的数据,而处理他们需要用到计算和逻辑判断的组合。

这里说得很笼统也不严谨,如果想要深入的了解这方面知识,有一门专门的课程:计算机体系结构。

你现在在学SICP的话,可以先把这些疑问放下,只需要知道下面有一层一层的抽象,把你的程序从S表达式变成电子的运动。

SICP课程的精髓,就是讲抽象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值