文档库 最新最全的文档下载
当前位置:文档库 › 从单片机初学者迈向单片机工程师—完整

从单片机初学者迈向单片机工程师—完整

从单片机初学者迈向单片机工程师—完整
从单片机初学者迈向单片机工程师—完整

目录:

KEY篇第一章----按键程序编写的基础

KEY篇第二章----基于状态转移的独立按键程序设计

LED篇第三章----模块化编程初识

LED篇第四章----渐明渐暗的灯

LED篇第五章----多任务环境下的数码管编程设计

我们用学单片机不要停在演示的基础上。只能让单片机完成局部事。这样我们永远不会走出流水灯地狱!!!

学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。也感谢一线工人提供了这个机会。希望大家有什么好的想法和建议都直接跟帖说出来。毕竟只有交流才能够碰撞出火花来^_^。

几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。很多个日夜就这样陪伴着它度过了。期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来,看到自己曾经走过的路,唏嘘不已。经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。但总是不知从何处写起。今天借一线工人的台,唱一唱我的戏 。“卖弄”也好,“吹嘘”也罢,我只是想认真的写写我这一路走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。姑妄言之,姑妄听之。如果有啥好的想法和建议一定要说出来。

一路学习过来的过程中,帮助最大之一无疑来自于网络了。很多时候,通过网络,我们都可以获取到所需要的学习资料。但是,随着我们学习的深入,我们会慢慢发现,网络提供的东西是有限度的,好像大部分的资料都差不多,或者说是适合大部分的初学者所需,而当我们想更进一步提高时,却发现能够获取到的资料越来越少,相信各位也会有同感,铺天盖地的单片机资料中大部分不是流水灯就是LED,液晶,而且也只是仅仅作功能性的演示。于是有些人选择了放弃,或者是转移到其他兴趣上面去了,而只有少部分人选择了继续摸索下去,结合市面上的书籍,然后在网络上锲而不舍的搜集资料,再从牛人的只言片语中去体会,不断动手实践,慢慢的,也摸索出来了自己的一条路子。当然这个过程必然是艰辛的,而他学会了之后也不会在网络上轻易分享自己的学习成果。如此恶性循环下去,也就不难理解为什么初级的学习资料满天飞,而深入一点的学习资料却很少的原因了。相较于其他领域,单片机技术的封锁更加容易。尽管已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是止于入门阶段或者是简单的演示实验。但是在实际工程应用中却是另外一回事。有能力的高手无暇或者是不愿公开自己的学习经验。

很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的作品,我忽然感觉到一丝丝的悲哀。也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自己。啰啰嗦嗦的说了这么多,相信大家能够明白说的是什么意思。在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初学者更上一层楼。而关于这个主题周的最大主题我想了这样的一个名字“从单片机初学者迈向单片机工程师”。名字挺大挺响亮,给我的压力也挺大的,但我会努力,争取使这样的一系列文章能够带给大家一点帮助,而不是看后大跌眼镜。这样的一系列文章主要的对象是初学者,以及想从初学者更进一步提高的读者。而至于老手,以及那些牛XX 的人,希望能够给我们这些初学者更多的一些指点哈~@_@

我们首先来看第一章节

从这一章开始,我们开始迈入单片机的世界。在我们开始这一章具体的学习之前,有必要给大家先说明一下。在以后的系列文章中,我们将以51内核的单片机为载体,C语言为编程语言,开发环境为KEIL uv3。至于为什么选用C语言开发,好处不言而喻,开发速度快,效率高,代码可复用率高,结构清晰,尤其是在大型的程序中,而且随着编译器的不断升级,其编译后的代码大小与汇编语言的差距越来越小。而关于C语言和汇编之争,就像那个啥,每隔一段时间总会有人挑起这个话题,如果你感兴趣,可以到网上搜索相关的帖子自行阅读。不是说汇编不重要,在很多对时序要求非常高的场合,需要利用汇编语言和C语言混合编程才能够满足系统的需求。在我们学习掌握C语言的同时,也还需要利用闲余的时间去学习了解汇编语言。

1.从点亮LED(发光二极管)开始

在市面上众多的单片机学习资料中,最基础的实验无疑于点亮LED了,即控制单片机的I/O的电平的变化。如同如下实例代码一般

void main(void)

{

LedInit() ;

While(1)

{

LED = ON ;

DelayMs(500) ;

LED = OFF ;

DelayMs(500) ;

}

}

程序很简单,从它的结构可以看出,LED先点亮500MS,然后熄灭500MS,如此循环下去,形成的效果就是LED以1HZ的频率进行闪烁。下面让我们分析上面的程序有没有什么问题。

看来看出,好像很正常的啊,能有什么问题呢?这个时候我们应该换一个思路去想了。试想,整个程序除了控制LED = ON ;LED = OFF;这两条语句外,其余的时间,全消耗在了DelayMs(500)这两个函数上。而在实际应用系统中是没有哪个系统只闪烁一只LED就其它什么事情都不做了的。因此,在这里我们要想办法,把CPU解放出来,让它不要白白浪费500MS的延时等待时间。宁可让它一遍又一遍的扫描看有哪些任务需要执行,也不要让它停留在某个地方空转消耗CPU时间。

从上面我们可以总结出

(1) 无论什么时候我们都要以实际应用的角度去考虑程序的编写。

(2) 无论什么时候都不要让CPU白白浪费等待,尤其是延时(超过1MS)这样的地方。

下面让我们从另外一个角度来考虑如何点亮一颗LED。

先看看我们的硬件结构是什么样子的。

我手上的单片机板子是电子工程师之家的开发的学习板。就以它的实际硬件连接图来分析吧。如下图所示

一般的LED的正常发光电流为10~20MA而低电流LED的工作电流在2mA以下(亮度与普通发光管相同)。在上图中我们可知,当Q1~Q8引脚上面的电平为低电平时,LED发光。通过LED的电流约为(VCC - Vd)/ R A2 。其中Vd为LED导通后的压降,约为1.7V左右。这个导通压降根据LED颜色的不同,以及工作电流的大小的不同,会有一定的差别。下面一些参数是网上有人测出来的,供大家参考。

红色的压降为1.82-1.88V,电流5-8mA,

绿色的压降为1.75-1.82V,电流3-5mA,

橙色的压降为1.7-1.8V,电流3-5mA

兰色的压降为3.1-3.3V,电流8-10mA,

白色的压降为3-3.2V,电流10-15mA,

(供电电压5V,LED直径为5mm)

74HC573真值表如下:

(原文件名:74hc573.jpg)

通过这个真值表我们可以看出。当OutputEnable引脚接低电平的时候,并且LatchEnable引脚为高电平的时候,Q端电平与D端电平相同。结合我们的LED硬件连接图可以知道LED_CS端为高电平时候,P0口电平的变化即Q端的电平的变化,进而引起LED的亮灭变化。由于单片机的驱动能力有限,在此,74HC573的主要作用就是起一个输出驱动的作用。需要注意的是,通过74HC573的最大电流是有限制的,否则可能会烧坏74HC573这个芯片。

上面这个图是从74HC573的DATASHEET中截取出来的,从上可以看出,每个引脚允许通过的最大电流为35mA 整个芯片允许通过的最大电流为75mA。在我们设计相应的驱动电路时候,这些参数是相当重要的,而且是最容易被初学者所忽略的地方。同时在设计的时候,要留出一定量的余量出来,不能说单个引脚允许通过的电流为35mA,你就设计为35mA,这个时候你应该把设计的上限值定在20mA左右才能保证能够稳定的工作。

(设计相应驱动电路时候,应该仔细阅读芯片的数据手册,了解每个引脚的驱动能力,以及整个芯片的驱动能力)

了解了相应的硬件后,我们再来编写驱动程序。

首先定义LED的接口

#define LED P0

然后为亮灭常数定义一个宏,由硬件连接图可以,当P0输出为低电平时候LED亮,P0输出为高电平时,LED熄灭。

#define LED_ON() LED = 0x00 //所有LED亮

#define LED_OFF() LED = 0xff //所有LED熄灭

下面到了重点了,究竟该如何释放CPU,避免其做延时空等待这样的事情呢。很简单,我们为系统产生一个1MS的时标。假定LED需要亮500MS,熄灭500MS,那么我们可以对这个1MS的时标进行计数,当这个计数值达到500时候,清零该计数值,同时把LED的状态改变。

unsigned int g_u16LedTimeCount = 0 ; //LED计数器

unsigned char g_u8LedState = 0 ; //LED状态标志, 0表示亮,1表示熄灭

void LedProcess(void)

{

if(0 == g_u8LedState) //如果LED的状态为亮,则点亮LED

{

LED_ON() ;

}

else //否则熄灭LED

{

LED_OFF() ;

}

}

void LedStateChange(void)

{

if(g_bSystemTime1Ms) //系统1MS时标到

{

g_bSystemTime1Ms = 0 ;

g_u16LedTimeCount++ ; //LED计数器加一

if(g_u16LedTimeCount >= 500) //计数达到500,即500MS到了,改变LED的状态。

{

g_u16LedTimeCount = 0 ;

g_u8LedState = ! g_u8LedState ;

}

}

}

上面有一个变量没有提到,就是g_bSystemTime1Ms 。这个变量可以定义为位变量或者是其它变量,在我们的定时器中断函数中对其置位,其它函数使用该变量后,应该对其复位(清0) 。

我们的主函数就可以写成如下形式(示意代码)

void main(void)

{

while(1)

{

LedProcess() ;

LedStateChange() ;

}

}

因为LED的亮或者灭依赖于LED状态变量(g_u8LedState)的改变,而状态变量的改变,又依赖于LED计数器的计数值(g_u16LedTimeCount ,只有计数值达到一定后,状态变量才改变)所以,两个函数都没有堵塞CPU的地方。让我们来从头到尾分析一遍整个程序的流程。

程序首先执行LedProcess() ;函数

因为g_u8LedState 的初始值为0 (见定义,对于全局变量,在定义的时候最好给其一个确定的值)所以LED 被点亮,然后退出LedStateChange()函数,执行下一个函数LedStateChange()

在函数LedStateChange()内部首先判断1MS的系统时标是否到了,如果没有到就直接退出函数,如果到了,就把时标清0以便下一个时标消息的到来,同时对LED计数器加一,然后再判断LED计数器是否到达我们预先想要的值500,如果没有,则退出函数,如果有,对计数器清0,以便下次重新计数,同时把LED状态变量取反,然后退出函数。

由上面整个流程可以知道,CPU所做的事情,就是对一些计数器加一,然后根据条件改变状态,再根据这个状态来决定是否点亮LED。这些函数执行所花的时间都是相当短的,如果主程序中还有其它函数,则CPU 会顺次往下执行下去。对于其它的函数(如果有的话)也要采取同样的措施,保证其不堵塞CPU,如果全部基于这种方法设计,那么对于不是非常庞大的系统,我们的系统依旧可以保证多个任务(多个函数)同时执行。系统的实时性得到了一定的保证,从宏观上看来,就是多个任务并发执行。

好了,这一章就到此为止,让我们总结一下,究竟有哪些需要注意的吧。

(1) 无论什么时候我们都要以实际应用的角度去考虑程序的编写。

(2) 无论什么时候都不要让CPU白白浪费等待,尤其是延时(超过1MS)这样的地方。

(3) 设计相应驱动电路时候,应该仔细阅读芯片的数据手册,了解每个引脚的驱动能力,

以及整个芯片的驱动能力

(4) 最重要的是,如何去释放CPU(参考本章的例子),这是写出合格程序的基础。

附完整程序代码(基于电子工程师之家的单片机开发板)

#include

sbit LED_SEG = P1^4; //数码管段选

sbit LED_DIG = P1^5; //数码管位选

sbit LED_CS11 = P1^6; //led控制位

sbit ir=P1^7;

#define LED P0 //定义LED接口

bit g_bSystemTime1Ms = 0 ; // 1MS系统时标

unsigned int g_u16LedTimeCount = 0 ; //LED计数器

unsigned char g_u8LedState = 0 ; //LED状态标志, 0表示亮,1表示熄灭

#define LED_ON() LED = 0x00 ; //所有LED亮

#define LED_OFF() LED = 0xff ; //所有LED熄灭

void Timer0Ini t(void)

{

TMOD &= 0xf0 ;

TMOD |= 0x01 ; //定时器0工作方式1

TH0 = 0xfc ; //定时器初始值

TL0 = 0x66 ;

TR0 = 1 ;

ET0 = 1 ;

}

void LedProcess(void)

{

if(0 == g_u8LedState) //如果LED的状态为亮,则点亮LED

{

LED_ON() ;

}

else //否则熄灭LED

{

LED_OFF() ;

}

}

void LedStateChange(void)

{

if(g_bSystemTime1Ms) //系统1MS时标到

{

g_bSystemTime1Ms = 0 ;

g_u16LedTimeCount++ ; //LED计数器加一

if(g_u16LedTimeCount >= 500) //计数达到500,即500MS到了,改变LED的状态。

{

g_u16LedTimeCount = 0 ;

g_u8LedState = ! g_u8LedState ;

}

}

}

void main(void)

{

Timer0Init() ;

EA = 1 ;

LED_CS11 = 1 ; //74HC595输出允许

LED_SEG = 0 ; //数码管段选和位选禁止(因为它们和LED共用P0口)

LED_DIG = 0 ;

while(1)

{

LedProcess() ;

LedStateChange() ;

}

}

void Time0Isr(void) interrupt 1

{

TH0 = 0xfc ; //定时器重新赋初值

TL0 = 0x66 ;

g_bSystemTime1Ms = 1 ; //1MS时标标志位置位

}

“从单片机初学者迈向单片机工程师”

第三章----模块化编程初识

好的开始是成功的一半

通过上一章的学习,我想你已经掌握了如何在程序中释放CPU了。希望能够继续坚持下去。一个良好的开始是成功的一半。我们今天所做的一切都是为了在单片机编程上做的更好。

在谈论今天的主题之前,先说下我以前的一些经历。在刚开始接触到C语言程序的时候,由于学习内容所限,写的程序都不是很大,一般也就几百行而矣。所以所有的程序都完成在一个源文件里面。记得那时候大一参加学校里的一个电子设计大赛,调试了一个多星期,所有程序加起来大概将近1000行,长长的一个文件,从上浏览下来都要好半天。出了错误简单的语法错误还好定位,其它一些错误,往往找半天才找的到。那个时候开始知道了模块化编程这个东西,也尝试着开始把程序分模块编写。最开始是把相同功能的一些函数(譬如1602液晶的驱动)全部写在一个头文件(.h)文件里面,然后需要调用的地方包含进去,但是很快发现这种方法有其局限性,很容易犯重复包含的错误。

而且调用起来也很不方便。很快暑假的电子设计大赛来临了,学校对我们的单片机软件编程进行了一些培训。由于学校历年来参加国赛和省赛,因此积累了一定数量的驱动模块,那些日子,老师每天都会布置一定量的任务,让我们用这些模块组合起来,完成一定功能。而正是那些日子模块化编程的培训,使我对于模块化编程有了更进一步的认识。并且程序规范也开始慢慢注意起来。此后的日子,无论程序的大小,均采用模块化编程的方式去编写。很长一段时间以来,一直有单片机爱好者在QQ上和我一起交流。有时候,他们会发过来一些有问题的程序源文件,让我帮忙修改一下。同样是长长的一个文件,而且命名极不规范,从头看下来,着实是痛苦,说实话,还真不如我重新给他们写一个更快一些,此话到不假,因为手头积累了一定量的模块,在完成一个新的系统时候,只需要根据上层功能需求,在底层模块的支持下,可以很快方便的完成。而不需要从头到尾再一砖一瓦的重新编写。藉此,也可以看出模块化编程的一个好处,就是可重复利用率高。下面让我们揭开模块化神秘面纱,一窥其真面目。

C语言源文件*.c

提到C语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个XX.C文件里面。编译器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现的所有功能的源代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。好比我们买了一部手机,我们只需要会用手机提供的功能即可,不需要知晓它是如何把短信发出去的,如何响应我们按键的输入,这些过程对我们用户而言,就是是一个黑盒子。在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。

C语言头文件*.h

谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须

有一些函数或者是变量提供给外部其它文件进行调用。

假设我们有一个LCD.C文件,其提供最基本的LCD的驱动函数

LcdPutChar(char cNewValue) ; //在当前位置输出一个字符

而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?

头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。

下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

于是便得到了LCD.C的头文件LCD.h 其内容如下。

#ifndef _LCD_H_

#define _LCD_H_

extern LcdPutChar(char cNewValue) ;

#endif

这与我们在源文件中定义函数时有点类似。不同的是,在其前面添加了extern 修饰符表明其是一个外部函数,可以被外部其它模块进行调用。

#ifndef _LCD_H_

#define _LCD_H_

#endif

这个几条条件编译和宏定义是为了防止重复包含。假如有两个不同源文件需要调用LcdPutChar(char cNewValue)这个函数,他们分别都通过#include “Lcd.h”把这个头文件包含了进去。在第一个源文件进行编译时候,由于没有定义过_LCD_H_ 因此#ifndef _LCD_H_ 条件成立,于是定义_LCD_H_ 并将下面的声明包含进去。在第二个文件编译时候,由于第一个文件包含时候,已经将_LCD_H_定义过了。因此#ifndef _LCD_H_ 不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语句,那么两个文件都包含了extern LcdPutChar(char cNewValue) ; 就会引起重复包含的错误。

不得不说的typedef

很多朋友似乎了习惯程序中利用如下语句来对数据类型进行定义

#define uint unsigned int

#define uchar unsigned char

然后在定义变量的时候直接这样使用

uint g_nTimeCounter = 0 ;

不可否认,这样确实很方便,而且对于移植起来也有一定的方便性。但是考虑下面这种情况你还会这么认为吗?

#define PINT unsigned int * //定义unsigned int 指针类型

PINT g_npTimeCounter, g_npTimeState ;

那么你到底是定义了两个unsigned int 型的指针变量,还是一个指针变量,一个整形变量呢?而你

的初衷又是什么呢,想定义两个unsigned int 型的指针变量吗?如果是这样,那么估计过不久就会到处抓狂找错误了。

庆幸的是C语言已经为我们考虑到了这一点。typedef 正是为此而生。为了给变量起一个别名我们可以用如下的语句

typedef unsigned int uint16 ; //给指向无符号整形变量起一个别名uint16

typedef unsigned int * puint16 ; //给指向无符号整形变量指针起一个别名puint16

在我们定义变量时候便可以这样定义了:

uint16 g_nTimeCounter = 0 ; //定义一个无符号的整形变量

puint16 g_npTimeCounter ; //定义一个无符号的整形变量的指针

在我们使用51单片机的C语言编程的时候,整形变量的范围是16位,而在基于32的微处理下的整形变量是32位。倘若我们在8位单片机下编写的一些代码想要移植到32位的处理器上,那么很可能我们就需要在源文件中到处修改变量的类型定义。这是一件庞大的工作,为了考虑程序的可移植性,在一开始,我们就应该养成良好的习惯,用变量的别名进行定义。

如在8位单片机的平台下,有如下一个变量定义

uint16 g_nTimeCounter = 0 ;

如果移植32单片机的平台下,想要其的范围依旧为16位。

可以直接修改uint16 的定义,即

typedef unsigned short int uint16 ;

这样就可以了,而不需要到源文件处处寻找并修改。

将常用的数据类型全部采用此种方法定义,形成一个头文件,便于我们以后编程直接调用。

文件名MacroAndConst.h

其内容如下:

#ifndef _MACRO_AND_CONST_H_

#define _MACRO_AND_CONST_H_

typedef unsigned int uint16;

typedef unsigned int UINT;

typedef unsigned int uint;

typedef unsigned int UINT16;

typedef unsigned int WORD;

typedef unsigned int word;

typedef int int16;

typedef int INT16;

typedef unsigned long uint32;

typedef unsigned long UINT32;

typedef unsigned long DWORD;

typedef unsigned long dword;

typedef long int32;

typedef long INT32;

typedef signed char int8;

typedef signed char INT8;

typedef unsigned char byte;

typedef unsigned char BYTE;

typedef unsigned char uchar;

typedef unsigned char UINT8;

typedef unsigned char uint8;

typedef unsigned char BOOL;

#endif

至此,似乎我们对于源文件和头文件的分工以及模块化编程有那么一点概念了。那么让我们趁热打铁,将上一章的我们编写的LED闪烁函数进行模块划分并重新组织进行编译。

在上一章中我们主要完成的功能是P0口所驱动的LED以1Hz的频率闪烁。其中用到了定时器,以及LED 驱动模块。因而我们可以简单的将整个工程分成三个模块,定时器模块,LED模块,以及主函数

对应的文件关系如下

main.c

Timer.c -- Timer.h

Led.c -- Led.h

在开始重新编写我们的程序之前,先给大家讲一下如何在KEIL中建立工程模板吧,这个模板是我一直沿用至今。希望能够给大家一点启发。

。。。。。。。。。(这里是一大堆图片,实在是不想贴了,就是用KeilC51建立一个工程的教程)。。。。。。。

OK ,到此一个简单的工程模板就建立起来了,以后我们再新建源文件和头文件的时候,就可以直接保存到src文件目录下面了。

下面我们开始编写各个模块文件。

首先编写Timer.c 这个文件主要内容就是定时器初始化,以及定时器中断服务函数。其内容如下。

#include

bit g_bSystemTime1Ms = 0 ; // 1MS系统时标

void Timer0Ini t(void)

{

TMOD &= 0xf0 ;

TMOD |= 0x01 ; //定时器0工作方式1

TH0 = 0xfc ; //定时器初始值

TL0 = 0x66 ;

TR0 = 1 ;

ET0 = 1 ;

}

void Time0Isr(void) interrupt 1

{

TH0 = 0xfc ; //定时器重新赋初值

TL0 = 0x66 ;

g_bSystemTime1Ms = 1 ; //1MS时标标志位置位

}

由于在Led.c文件中需要调用我们的g_bSystemTime1Ms变量。同时主函数需要调用Timer0Init()初始化函数,所以应该对这个变量和函数在头文件里作外部声明。以方便其它函数调用。

Timer.h 内容如下。

#ifndef _TIMER_H_

#define _TIMER_H_

extern void Timer0Init(void) ;

extern bit g_bSystemTime1Ms ;

#endif

完成了定时器模块后,我们开始编写LED驱动模块。

Led.c 内容如下:

#include

#include "MacroAndConst.h"

#include "Led.h"

#include "Timer.h"

static uint16 g_u16LedTimeCount = 0 ; //LED计数器

static uint8 g_u8LedState = 0 ; //LED状态标志, 0表示亮,1表示熄灭

#define LED P0 //定义LED接口

#define LED_ON() LED = 0x00 ; //所有LED亮

#define LED_OFF() LED = 0xff ; //所有LED熄灭

void LedProcess(void)

{

if(0 == g_u8LedState) //如果LED的状态为亮,则点亮LED

{

LED_ON() ;

}

else //否则熄灭LED

{

LED_OFF() ;

}

}

void LedStateChange(void)

{

if(g_bSystemTime1Ms) //系统1MS时标到

{

g_bSystemTime1Ms = 0 ;

g_u16LedTimeCount++ ; //LED计数器加一

if(g_u16LedTimeCount >= 500) //计数达到500,即500MS到了,改变LED的状态。

{

g_u16LedTimeCount = 0 ;

g_u8LedState = ! g_u8LedState ;

}

}

}

这个模块对外的借口只有两个函数,因此在相应的Led.h 中需要作相应的声明。

Led.h 内容:

#ifndef _LED_H_

#define _LED_H_

extern void LedProcess(void) ;

extern void LedStateChange(void) ;

#endif

这两个模块完成后,我们将其C文件添加到工程中。然后开始编写主函数里的代码。

如下所示:

#include

#include "MacroAndConst.h"

#include "Timer.h"

#include "Led.h"

sbit LED_SEG = P1^4; //数码管段选

sbit LED_DIG = P1^5; //数码管位选

sbit LED_CS11 = P1^6; //led控制位

void main(void)

{

LED_CS11 = 1 ; //74HC595输出允许

LED_SEG = 0 ; //数码管段选和位选禁止(因为它们和LED共用P0口)

LED_DIG = 0 ;

Timer0Init() ;

EA = 1 ;

while(1)

{

LedProcess() ;

LedStateChange() ;

}

}

整个工程截图如下:

至此,第三章到此结束。

一起来总结一下我们需要注意的地方吧

1. C语言源文件(*.c)的作用是什么

2. C语言头文件(*.h)的作用是什么

3. typedef 的作用

4. 工程模板如何组织

5. 如何创建一个多模块(多文件)的工程

“从单片机初学者迈向单片机工程师”之KEY主题讨论

按键程序编写的基础

从这一章开始,我们步入按键程序设计的殿堂。在基于单片机为核心构成的应用系统中,用户输入是必不可少的一部分。输入可以分很多种情况,譬如有的系统支持PS2键盘的接口,有的系统输入是基于编码器,有的系统输入是基于串口或者USB或者其它输入通道等等。在各种输入途径中,更常见的是,基于单个按键或者由单个键盘按照一定排列构成的矩阵键盘(行列键盘)。我们这一篇章主要讨论的对象就是基于单个按键的程序设计,以及矩阵键盘的程序编写。

◎按键检测的原理

常见的独立按键的外观如下,相信大家并不陌生,各种常见的开发板学习板上随处可以看到他们的身影。

(原文件名:1.jpg)

总共有四个引脚,一般情况下,处于同一边的两个引脚内部是连接在一起的,如何分辨两个引脚是否

处在同一边呢?可以将按键翻转过来,处于同一边的两个引脚,有一条突起的线将他们连接一起,以标示它们俩是相连的。如果无法观察得到,用数字万用表的二极管挡位检测一下即可。搞清楚这点非常重要,对于我们画PCB的时候的封装很有益。

它们和我们的单片机系统的I/O口连接一般如下:

(原文件名:2.jpg)

对于单片机I/O内部有上拉电阻的微控制器而言,还可以省掉外部的那个上拉电阻。简单分析一下按键检测的原理。当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O 的电平的时候,其值为1(高电平); 当按键S按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平) 。这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。结论:我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。一切看起来很美好,是这样的吗?

◎现实并非理想

在我们通过上面的按键检测原理得出上述的结论的时候,其实忽略了一个重要的问题,那就是现实中按键按下时候的电平变化状态。我们的结论是基于理想的情况得出来的,就如同下面这幅按键按下时候对应电平变化的波形图一样:

(原文件名:3.jpg)

而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动,尽管这个时间非常的短暂,但是对于我们执行时间以us为计算单位的微控制器来说,

它太漫长了。因而,实际的波形图应该如下面这幅示意图一样。

(原文件名:4.jpg)

这样便存在这样一个问题。假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个I/O的状态取反。由于这种抖动的存在,使得我们的微控制器误以为是多次按键的按下,从而将某个I/O的状态不断取反,这并不是我们想要的效果,假如该I/O控制着系统中某个重要的执行的部件,那结果更不是我们所期待的。于是乎有人便提出了软件消除抖动的思想,道理很简单:抖动的时间长度是一定的,只要我们避开这段抖动时期,检测稳定的时候的电平不久可以了吗?听起来确实不错,而且实际应用起来效果也还可以。于是,各种各样的书籍中,在提到按键检测的时候,总也不忘说道软件消抖。就像下面的伪代码所

描述的一样。(假设按键按下时候,低电平有效)

If(0 == io_KeyEnter) //如果有键按下了

{

Delayms(20) ; //先延时20ms避开抖动时期

If(0 == io_KeyEnter) //然后再检测,如果还是检测到有键按下

{

return KeyValue ; //是真的按下了,返回键值

}

else

{

return KEY_NULL //是抖动,返回空的键值

}

while(0 == io_KeyEnter) ; //等待按键释放

}

乍看上去,确实挺不错,实际中呢?在实际的系统中,一般是不允许这么样做的。为什么呢?首先,这里的Delayms(20) , 让微控制器在这里白白等待了20 ms 的时间,啥也没干,考虑我在《学会释放CPU》一章中所提及的几点,这是不可取的。其次while(0 == io_KeyEnter) ;更是程序设计中的大忌(极少的特殊情况例外)。任何非极端情况下,都不要使用这样语句来堵塞微控制器的执行进程。原本是等待按键释放,结果CPU就一直死死的盯住该按键,其它事情都不管了,那其它事情不干了吗?你同意别人可不会同意 所以合理的分配好微控制的处理时间,是编写按键程序的基础。

◎消除抖动有必要吗?

的确,软件上的消抖确实可以保证按键的有效检测。但是,这种消抖确实有必要吗?有人提出了这样的疑问。抖动是按键按下的过程中产生的,如果按键没有按下,抖动会产生吗?如果没有按键按下,抖动也会在I/O上出现,我会立刻把这个微控制器锤了,永远不用这样一款微控制器。所以抖动的出现即意味着按键已经按下,尽管这个电平还没有稳定。所以只要我们检测到按键按下,即可以返回键值,问题的关键是,在你执行完其它任务的时候,再次执行我们的按键任务的时候,抖动过程还没有结束,这样便有可能造成重复检测。所以,如何在返回键值后,避免重复检测,或者在按键一按下就执行功能函数,当功能函数的执行时间小于抖动时间时候,如何避免再次执行功能函数,就成为我们要考虑的问题了。这是一个仁者见仁,智者见智的问题,就留给大家去思考吧。所以消除抖动的目的是:防止按键一次按下,多次响应。

“从单片机初学者迈向单片机工程师”之KEY主题讨论

基于状态转移的独立按键程序设计

本章所描述的按键程序要达到的目的:检测按键按下,短按,长按,释放。即通过按键的返回值我们可以获取到如下的信息:按键按下(短按),按键长按,按键连_发,按键释放。不知道大家还记得小时候玩过的电子钟没有,就是外形类似于CALL 机(CALL 机,好像是很古老的东西了 )的那种,有一个小液晶屏,

还有四个按键,功能是时钟,闹钟以及秒表。在调整时间的时候,短按+键每次调整值加一,长按的时候调整值连续增加。小的时候很好奇,这样的功能到底是如何实现的呢,今天就让我们来剖析它的原理吧。状态在生活中随处可见。譬如早上的时候,闹钟把你叫醒了,这个时候,你便处于清醒的状态,马上你就穿衣起床洗漱吃早餐,这一系列事情就是你在这个状态做的事情。做完这些后你会去等车或者开车去上班,这个时候你就处在上班途中的状态…..中午下班时间到了,你就处于中午下班的状态,诸如此类等等,在每一个状态我们都会做一些不同的事情,而总会有外界条件促使我们转换到另外一种状态,譬如闹钟叫醒我们了,下班时间到了等等。对于状态的定义出发点不同,考虑的方向不同,或者会有些许细节上面的差异,但是大的状态总是相同的。生活中的事物同样遵循同样的规律,譬如,用一个智能充电器给你的手机电池充电,刚开始,它是处于快速充电状态,随着电量的增加,电压的升高,当达到规定的电压时候,它会转换到恒压充电。总而言之,细心观察,你会发现生活中的总总都可以归结为一个个的状态,而状态的变换或者转移总是由某些条件引起同时伴随着一些动作的发生。我们的按键亦遵循同样的规律,下面让我们来简单的描绘一下它的状态流程转移图。

(原文件名:1.jpg)

下面对上面的流程图进行简要的分析。

首先按键程序进入初始状态S1,在这个状态下,检测按键是否按下,如果有按下,则进入按键消抖状态2,在下一次执行按键程序时候,直接由按键消抖状态进入按键按下状态3,在此状态下检测按键是否按下,如果没有按键按下,则返回初始状态S1,如果有则可以返回键值,同时进入长按状态S4,在长按状态下每次进入按键程序时候对按键时间计数,当计数值超过设定阈值时候,则表明长按事件发生,同时进入按键连_发状态S5。如果按键键值为空键,则返回按键释放状态S6,否则继续停留在本状态。在按键连_发状态下,如果按键键值为空键则返回按键释放状态S6,如果按键时间计数超过连_发阈值,则返回连_发按键值,清零时间计数后继续停留在本状态。

看了这么多,也许你已经有一个模糊的概念了,下面让我们趁热打铁,一起来动手编写按键驱动程序吧。下面是我使用的硬件的连接图。

(原文件名:2.jpg)

硬件连接很简单,四个独立按键分别接在P3^0------P3^3四个I/O上面。

因为51单片机I/O口内部结构的限制,在读取外部引脚状态的时候,需要向端口写1.在51单片机复位后,不需要进行此操作也可以进行读取外部引脚的操作。因此,在按键的端口没有复用的情况下,可以省略此步骤。而对于其它一些真正双向I/O口的单片机来说,将引脚设置成输入状态,是必不可少的一个步骤。下面的程序代码初始化引脚为输入。

void KeyIni t(void)

{

io_key_1 = 1 ;

io_key_2 = 1 ;

io_key_3 = 1 ;

io_key_4 = 1 ;

}

根据按键硬件连接定义按键键值

#define KEY_VALUE_1 0x0e

#define KEY_VALUE_2 0x0d

#define KEY_VALUE_3 0x0b

2计算机硬件维护工程师模拟考试试题

三、判断题 1.连接机箱内的信号线时,一般红色(深颜色)线表示正,白色(浅颜色)表示为负。 A.正确 B.错误 答案:A 2.BIOS(Basic Input / Output System)是指基本输入/输出系统。 A.正确 B.错误 答案:A 3.在BIOS中设置密码时,输入的密码不区分大小写。 A.正确 B.错误 答案:B 4.主DOS分区只有一个,它就是C驱动器,而逻辑DOS分区则可以是一个驱动器,也可以是多个驱动器,例如它可以划分为D、E等多个驱动器。 A.正确 B.错误 答案:A 5.Partition Magic可以在保留硬盘数据的前提下对硬盘进行重新分区,并且可以对硬盘创建分区,合并分区,改变分区大小,转换分区格式等。 A.正确 B.错误 答案:A 6.主板上的CPU插槽都是统一的,无论是Intel公司的CPU,还是AMD 公司的CPU,都可以在一个主板上使用。

A.正确 B.错误 答案:B 7.与NTFS的分区相比,FAT32分区格式的安全性更高。 A.正确 B.错误 答案:B 8.安装两个或两个以上杀毒软件,可以提高电脑的防病毒能力。 A.正确 B.错误 答案:B 9.由于液晶屏在制造时是从一大块液晶片上切割下来的,所以要完全没有坏点也是几乎不可能的,发现有1、2个坏点也是正常的,符合要求的。 A.正确 B.错误 答案:A 10.AC97并不是一种生卡的品牌,而是一种标准,是由Intel、Creative Labs、NS、Analog Device与Yamaha共同提出的Audio Codec97(意为“音效多媒体数字信号编/解码器”),目前几乎所有的生卡都支持AC97标准。 A.正确 B.错误 答案:A 11.华硕是台湾的硬件厂商。 A.正确 B.错误 答案:A 12.计算机病毒发作时硬盘数据一定会丢失。

STC15W系列单片机初学者教程

目录 因为网站限制原因,其他链接都不予显示,还有联系方式都不予显示,带来不便非常抱歉 1.开始学习了 2.15W4K32S4单片机简介资料 3.单片机可以用来做什么呢? 4.单片机示例!写一个串口通讯程序,您也可以直接先从这 步开始学习 5.相关资料链接(数据手册,其他进阶例子,开拓眼界) 6.售后持续支持 7.所有下载链接汇总 一. 开始学习了 这个宝贝包含的硬件,也就是给您发货的内容包含以下东西:

1.15W4K32S4最小系统板 1块 2.转串口下载器一个2303转串口 1块用来下载程序和串口 通讯 3.白色面包板一个 1块适合搭建各种电路 4.一个霍尔传感器,制作一个霍尔电路做一个磁控开关 5.若干杜邦针;连接电路 6.彩灯3 颗若干电阻学习彩色灯控制彩色灯 7.三极管若干个电位计 1个灯亮度控制 8.提供上面所有元器件手把手教程手把手教程

这篇教程能够让您学会什么呢? 1.怎么使用 4软件编写的程序,并且使用下载程序到单片机 上面; 2.串口通讯程序,另外在电脑端使用软件进行图形化显示 程序; 如果您有兴趣的话,希望下面对您学习工作有帮助,资料有点多,但是还是值得花一些时间实际操作演示,只有自己动手了,才能体会到更多的内容。

二. 15W4K32S4单片机简介 15W4K32S4单片机是一款非常优秀的51系列单片机,很适合用来作为初学者入门单片机世界。当然单片机的世界没有最强大,只有最适合的单片机。如果你有了解过什么是51单片机和一点C语言。就可以尝试进入这款单片机。边玩边搭建更多的电路,在玩中学习。 继续往下看,将会一步一步演示给您看具体怎么是使用这款单片机。请有耐心的看下去哦,不过如果一次看不完的话,可以分多几天来操作,关键是要坚持! 那么单片机可以用来做什么呢? 目前单片机渗透到我们生活的各个领域,小到电话,玩具,手机,刷卡机,电脑键盘,彩电,冰箱,空调,电磁炉,大到汽车,工业自动控制,机器人,导弹导航装置,甚至是美国的火星车,这些设备里面都含有一个或者多个单片机。单片机的数量不仅远超过机,甚至比人类的数量还要多。可见数量之庞大,用途之广泛啊。 三. 我们掌握单片机有什么用呢?

写给电脑初学者的一些建议(注册表篇)

【原创2008】写给电脑初学者的一些建议(注册表篇)发表于2008-02-03 14:04 在上篇文章中对新手朋友们关心的安全问题做了一点小小的阐述。今天,再就WIN系统中的注册表问题跟大家做个探讨。说实话,注册表问题很难写,不光是因为牵涉到了很多新手朋友们头疼的技术问题,而且覆盖面广、涉及的内容多,也很容易看花眼,但总是要写的,所以,如果新手朋友一下看不懂的话,建议多看几遍,多动手多验证,这样对提高你们对电脑的了解和维护都有很大的裨益。 有人曾经说过,了解了注册表就读懂了WIN系统,这句话是一点都不假的。那么,什么是注册表?注册表有什么功能?如何去修改注册表以达到最佳的效果?又如何来区分注册表里有用和无用甚至是危害的部分呢? 什么是注册表?在还是使用Dos和Win3.x操作系统的时代里,大部分的应用程序都采用了ini文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。system.ini 和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。随着应用程序的数目的不断增加和复杂性的日益增强,则需要在.ini文件中添加更多的参数项。这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改.ini文件。然而,几乎没有一个人在删除应用程序后删除.ini文件中的相关设置,所以system.ini和win.ini这个两个文件会变的越来越大。每次增加的内容会导致系统性能越来越慢,在每次应用程序的升级都出现类似的难题:升级后会增加更多的参数项但是从来不去掉旧的参数设置。而且还有一个明显的问题,一个.ini文件的最大尺寸是64KB。为了能够解决这个问题,软件商自己开始支持自己的.ini文件,然后指向特定的ini 文件,这样下来多个.ini文件影响了系统正常的存取级别设置。 在windows操作系统序列里,system.ini和win.ini这两个文件包含了操作系统的所有控

51单片机基础知识试题题库(含答案)

第二章习题参考答案 一、填空题: 1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。 2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。 3、当使用8751且EA=1,程序存储器地址小于1000H 时,访问的是片内ROM。 4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。 5、MCS-51有4组工作寄存器,它们的地址范围是 00H~1FH 。 6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。 7、PSW中RS1 RS0=10时,R2的地址为 12H 。 8、PSW中RS1 RS0=11时,R2的地址为 1AH 。 9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第 0 组,8个寄存器的单元地址为 00H ~ 07H 。 10、PC复位后为 0000H 。 11、一个机器周期= 12 个振荡周期= 6 个时钟周期。 12、PC的内容为将要执行的的指令地址。 13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为 2us 。 14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为 26H 。 15、若A中的内容为63H,那么,P标志位的值为 0 。 16、8051单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW= 00H 。这时当前的工作寄存器区是第 0 工作寄存器区。 17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。 18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区 和用户RAM区。 19、通过堆栈操作实现子程序调用,首先就要把 PC 的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到 PC 。 20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS -51的PC是16位的,因此其寻址的范围为 64 KB。 21、MCS-51单片机片内RAM的寄存器共有 32 个单元,分为 4 组寄存器,每组 8 个单元,以R0~R7作为寄存器名称。 22、但单片机的型号为8031/8032时,其芯片引线EA一定要接低电平。 二、选择题: 1、当MCS-51复位时,下面说法正确的是( A )。 A、 PC=0000H B、 SP=00H C、 SBUF=00H D、 P0=00H 2、PSW=18H时,则当前工作寄存器是( D )。 A、 0组 B、 1组 C、 2组 D、 3组 3、MCS-51上电复位后,SP的内容应是( B )。 A、 00H B、 07H C、 60H D、 70H 4、当ALE信号有效时,表示( B )。 A、从ROM中读取数据 B、从P0口可靠地送出低8位地址 C、从P0口送出数据 D、从RAM中读取数据 5、MCS—51单片机的CPU主要的组成部分为( A )。 A、运算器、控制器 B、加法器、寄存器 C、运算器、加法器 D、运算器、译码器

单片机学习感悟

这个我从别处贴来百度文库的。写的非常的好。我们用学单片机不要停在演示的基础上。只能让单片机完成局部事。这样我们永远不会走出流水灯地狱!!! 学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。也感谢一线工人提供了这个机会。 。“卖弄”也好,“吹嘘”也罢,我只是想认真的写写我这一路走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。姑妄言之,姑妄听之。 几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。很多个日夜就这样陪伴着它度过了。期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来,看到自己曾经走过的路,唏嘘不已。经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。但总是不知从何处写起。今天借一线工人的台,唱一唱我的戏一路学习过来的过程中,帮助最大之一无疑来自于网络了。很多时候,通过网络,我们都可以获取到所需要的学习资料。但是,随着我们学习的深入,我们会慢慢发现,网络提供的东西是有

限度的,好像大部分的资料都差不多,或者说是适合大部分的初学者所需,而当我们想更进一步提高时,却发现能够获取到的资料越来越少,相信各位也会有同感,铺天盖地的单片机资料中大部分不是流水灯就是LED,液晶,而且也只是仅仅作功能性的演示。于是有些人选择了放弃,或者是转移到其他兴趣上面去了,而只有少部分人选择了继续摸索下去,结合市面上的书籍,然后在网络上锲而不舍的搜集资料,再从牛人的只言片语中去体会,不断动手实践,慢慢的,也摸索出来了自己的一条路子。当然这个过程必然是艰辛的,而他学会了之后也不会在网络上轻易分享自己的学习成果。如此恶性循环下去,也就不难理解为什么初级的学习资料满天飞,而深入一点的学习资料却很少的原因了。相较于其他领域,单片机技术的封锁更加容易。尽管已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是止于入门阶段或者是简单的演示实验。但是在实际工程应用中却是另外一回事。有能力的高手无暇或者是不愿公开自己的学习经验。 很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的作品,我忽然感觉到一丝丝的悲哀。也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自己。啰啰嗦嗦的说了这么多,相信大家能够明白说的是什么意思。在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初学者更上一层楼。而关于这个主题周的最大主题我想了这样的一个名字“从单片机初学者

2020硬件维护工程师年终总结.doc

2020硬件维护工程师年终总结 1、对各部门电脑软件、硬件、邮件打印机、网络的维护工作级时和到位。让设备的的使用故障率降到最低,在故障发生的时候立马当地解决。有不能当地解决的也会在最短的时间内给予解决。 2、及时的对系统补丁进行更新,防止了病毒和黑客通过系统漏洞进行的破坏和攻击。对ie、outlook、office等应用程序也打上最新的补丁,另外还关闭了一些不需要的服务,关闭guset帐号等。 3、对中心每台电脑安装防病毒软件,避免了病毒在公司局域网内自我复制相互传播,占用局域网的网络资源,甚至使得系统崩溃,丢失硬盘的重要资料等各种危害,并及时的对软件进行升级,定期的清除隔离病毒的文件夹。 4、项目机房系统更新,系统从原有的20xx更新到xp,重新安装了所有软件,解决了一部分原无法解决的问题,并重新部署杀毒软件解决方案。 5、交换机、路由等网络硬件设备的维护,屏蔽中心不用的端口,安全设置等,保证公司所有电脑的安全正常工作,优化路由运行速度,节约带宽,提高上网的速度化和稳定化,使我们上网的速度大大提高,保证网络顺畅; 6、针对服务器,3次被黑客攻击采取相应的解决方案。重新部署服务器。 7、学校服务器,硬件的安装、维修、调试,投影仪设备的定

期清理,维护。 8、电话交换机部属置,电话线调整,电话录音设备的安装调试。 9、rtx服务器、邮件服务器、web服务器、搭建、优化、信息整理和测试。用户数据导入和备份。 10、为了的节约成本,并针对学校所有计算机设置系统自动休眠,有效地节省了相当一部分资源。 11、加强了对网络设备的维护,对经常出故障的设备采取了相应的解决办法。公司目前一共近80多台电脑,由于机器较多,日常出现故障的情况较为常见,主要的电脑故障有:系统故障,网络故障,软件故障等,很多机器由于长期使用,导致系统中存在大量垃圾文件,系统文件也有部分受到损坏,从而导致系统崩溃,重装系统,另外有一些属网络故障,线路问题等。 近一年来,我始终坚持严格要求自己,勤奋努力,在自己平凡而普通的工作岗位上,努力做好本职工作,从不把情绪带到工作中。在具体工作中,我努力做好服务工作。回顾一年来的工作,我在思想上、学习上、工作上取得了新的进步。但我也认识到自己的不足之处: 1、因为简单的问题重复出现重复解决,可能到位不及时。 2、自己的思路还很窄对现代网络技术的发展认识的不够全面,自己对新技术掌握速度还不够快。 3、有时出现问题我并不知道而领导先知。其实从咱们公司的结构来看这些都是正常的,但我感到惭愧。

初学占星(写给初入门的童鞋)

初学占星 (写给初入门的童鞋) 作者:简单 好多童鞋都问“我这样的小白能学占星吗?能学好吗?学占星要从哪开始学?需要看哪些入门书籍?”没问题的,大家都能学,大家都要对自己有信心。 为了入门的童鞋少走些弯路,在下就把自己学习占星的经验和思路跟大家分享一下。 首先要说的是我们要端正学习占星的初衷,占星是认识自己,认识世界的一把钥匙,千万不要把占星当做算命的手段过度迷信。教条的话不多说,下面就来分享下在下学习占星的思路。这里主要介绍的是现代占星(现代占星也就是心理占星)。 第一,符号的学习。 要想学习占星,不认识这些星盘上的符号是不行的,所谓的符号,就是行星和十二星座的符号。初学者建议不要记太多的符号,最好先记住十大行星和十二星座的符号,我们看命盘时最需要的就是这两种符号。其实所谓行星,就是太阳系的八大行星加上太阳和月亮。所谓十二星座,就是黄道带上的十二个星座,占星上的十二星座和天文上的十二星座是有所区别的。 十大行星符号 ???♀ ♂ ????? 十二星座符号

第二,守护星的学习。白羊座,火星 金牛座,金星 双子座,水星 巨蟹座,月亮 狮子座,太阳 处女座,水星 天秤座,金星 天蝎座,冥王星 射手座,木星 摩羯座,土星 水瓶座,天王星 双鱼座,海王星 第三,星盘的学习。

这是一张由Astrology32软件绘制的星盘。星盘的最外圈标有星座符号的是星座,然后是刻度(最小的格代表1度,一个星座是30度),然后标有数字的一圈叫做宫位,最里边各种颜色的线叫做相位。星盘上有四个点,其中Asc叫做上升点,Des叫做下降点,Mc是天顶,Ic是天底。以上是一张星盘的基本信息。 第四,十二星座分类 做了张表便于记忆,顺便把守护星也加了进去。所谓的四分也就是四元素。 综合了以上信息以后,基本上就能看懂一张星盘也能大致明白别人说的什么星落在什么星座什么宫上与什么星形成了相位。接下去就需要更具体的理解星座的含义了。

单片机初学者必看

单片机初学者必看 51、A VR、430、ARM(包括嵌入操作系统)、FPGA当前单片机系统如此丰富,对于新手到底该如何选择呢?我认为最大的误区,在于新手普遍的追时髦心理,急功近利心理,妄想短时间之内学会ARM,学会嵌入操作系统。网上资料、厂家宣传、培训机构广告也对初学者产生误导,使之误认为ARM很容易学。但是没有51单片机知识作为基础,其他一切都是空中楼阁。必不能达到预期效果。51单片机作为入门级产品,现在更多的体现在教学意义上了。虽然大部分的产品,已经淘汰51,使用高级芯片或者增强型51芯片,但是奉劝初学者,还是要从底层、基础、即51开始单片机的学习。学好、学会、精通51单片机再学习其他单片机也能很快入门。 第二个问题,学习单片机,需要有哪些基础,入门都学哪些东西。 很多初学者经常问,我能学单片机吗?难吗?我现在什么也不会啊?这里想说几句,要想学习单片机开发,需要有以下几方面基础,但要求并不是很高,可以在以后的学习过程中慢慢学。 1、电路基础:一些数字电路、模拟电路基础。毕竟以后要自己设计电路,这些知识是很有用的。 2、C语言基础:我个人比较喜欢C语言开发,相比汇编最大的优点就是移植性要好。学习51单片机,C语言编程当然需要有些基础。 3、一些单片机的基础知识:虽然是初学者,但是一些基础理论知识还是应该知道的。 4、一些焊接等动手能力,这个要求就不是那么严格了。呵呵。不过能搭一手漂亮的电路还是挺好的。 怎么样算入门? 1、学会使用编译器软件:就是在编译器下建立一个项目,编写一点点代码,生成一个程序文件。当你熟悉这个流程以后,就变得非常容易了。不过第一次还是很难实现的,最好有一个比较详细点的教程。 2、学会使用下载工具和软件:把程序烧录到单片机里,运行起来,需要动手去操作。 3、学会使用调试工具:如有条件,可以学习硬件仿真调试。 4、以上可以在学习板上实现,不过以后你要学会自己设计并制作电路。所以还要学会PRTEL软件使用。 第三个问题,学过一段51单片机了,入门也会了。以后怎么办啊? 很多初学者,学了一款51学习板,基础东西也都会了,下一步怎么发展却不知道了。下面的一些理论是我的一点不成熟想法,有这样困惑的朋友可以参考参考。 1、单片机的平面发展理论:不断学习同一个层次、不同结构、不同品牌的单片机。 学会了一个系列、一个公司单片机,比如51(AT89S51),了解的它的全部内部资源。下一步学习,仍然可以围绕51进行。可以扩展到其它公司的51单片机,比如stc、pic因为他们有很多增强型51单片机。功能比普通AT89S51强很多。如果可以,接触更多的同系列的51单片机。最终能够在做产品时,选择最正确的单片机,对每一种51单片机的优劣有清晰的判断。 2、单片机的纵向发展理论:不断学习高级别的单片机。 在学会一个系列的单片机,继续学习高级的单片机,比如从51到A VR、到ARM。可以学习到更多的单片机,接触到更多的知识。 3、单片机的外围发展理论:不断学习单片机的外围功能模块。 学会一个系列的单片机以后,转而研究外围电路。不论是输入、输出、通讯、逻辑和计算。单片机外围电路千变万化,其功能模块也千奇百怪。这样的模块学的越多,对你做产品的好处越大。毕竟所有功能模块都是用在单片机上的,不论是51还是ARM都需要有外围电路才能实现功能。

献给初学者-DSP入门教程

前言:此资料也是来源于网络,并不是我们原创,但是希望这些资料能够给初学DSP的朋友们一点帮助,也希望你们能够把这里当成是你们学习DSP技术的一个家园,让我们携手共建,为更多的朋友创造学习的条件~ 1、TI DSP的选型 主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、I/O口数量、中断数量、DMA通道数等。DSP的主要供应商有TI,ADI,Motorola,Lucent 和Zilog等,其中TI占有最大的市场份额。 TI公司现在主推四大系列DSP 1)C5000系列(定点、低功耗):C54X,C54XX,C55X 相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS等应用。处理速度在80MIPS--400MIPS之间。C54XX和C55XX 一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。值得注意的是C55XX提供了EMIF外部存储器扩展接口,可以直接使用SDRAM,而C54XX则不能直接使用。两个系列的数字IO都只有两条。 2)C2000系列(定点、控制器):C20X,F20X,F24X,F24XX ,C28x该系芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),W ATCHDOG、CAN总线/PWM发生器、数字IO脚等。是针对控制应用最佳化的DSP,在TI所有的DSP中,只有C2000有FLASH,也只有该系列有异步串口可以和PC的UART相连。 3)C6000系列:C62XX,C67XX,C64X 该系列以高性能著称,最适合宽带网络和数字影像应用。32bit,其中:C62XX和C64X是定点系列,C67XX 是浮点系列。该系列提供EMIF 扩展存储器接口。该系列只提供BGA封装,只能制作多层PCB。且功耗较大。同为浮点系列的C3X中的VC33现在虽非主流产品,但也仍在广泛使用,但其速度较低,最高在150MIPS。 4)OMAP系列:OMAP处理器集成ARM的命令及控制功能,另外还提供DSP 的低功耗实时信号处理能力,最适合移动上网设备和多媒体家电。 其他系列的DSP曾经有过风光,但现在都非TI主推产品了,除了C3X系列外,其他基本处于淘汰阶段,如:C3X的浮点系列:C30,C31,C32 C2X和C5X系列:C20,C25,C50 每个系列的DSP都有其主要应用领域. 2、设计中如何得到技术参考资料以及如何得到相关源码 原则是碰到问题就去https://www.wendangku.net/doc/af10288887.html, 1)在TI网站的搜索中用keyword搜索资料,主要要注意的就是Application Notes,user guides 比如不知道怎样进行VC5402的McBSP编程,搜McBSP和VC5402 如果不知道如何设计VC5402和TLV320AIC23的接口以及编程,搜TLV320AIC23和VC5402; 这样可以搜到一堆的资料,这些资料一般均有PDF文档说明和相应的源程序包提供,download后做少许改动即可 2)来DSP交流网,HELLODSP真诚欢迎每一位有需要的朋友 3)google搜 4)再不济,找技术支持,碰运气了 3、如何看待TI DSP庞杂的技术文档 新手进行DSP开发学习之时,常常感觉技术文档太多,哪本都有用,哪本都想看,无从下手。此时原则是只看入门必须的、只看和芯片相关的。根据经验,如下的资料必看不可: 1)讲述DSP的CPU,memory,program memory addressing,data memory addressing的资料都需要看、外设资源的资料可以只看自己用到的部分;

计算机维护服务方案

计算机维护服务方案 一、前言 (2) 二、我司的优势 (2) 1. 我司提供技术服务的部分单位 (2) 三、对贵单位提供的专门设计服务方案 (3) 1. 服务范围: (3) 2. 服务内容: (3) 1)硬件维护包括: ........................................................................... . (3) 2)系统软件维护包括: (3) 3)系统安全维护包括: (4) 4)网络运行维护包括: (4) 3.可选服务内容为:(需付费) (5) 1) 灾难恢复服务 (5) 2) 系统管理服务 (6) 4. 服务方式: (7) 1) 电话热线支持: (7) 2) 远程网络支持: (7) 3) 驻点服务方式: (7)

4) 1 小时响应方式: (7) 5) 2小时响应方式: (7) 6) 24 小时响应方式: (8) 8) 特别服务方式:(需协商付费) (8) 5.服务流程: (8) 四、服务报价 (10) 五、保密协议 (10)

一、前言 现今社会是信息与自动化办公技术急速发展时代。发展到如今,各个单位办公设备数量也都呈现飞速上升的趋势。各个单位对于这些办公设备维护与维修都存在着不同程度的困难。这些困难包括了: 1、本单位员工对于办公设备的维护能力无法达到要求; 2、本单位办公设备的维护量超出了专职员工的能力范围; 3、办公设备维护人员的工资支出超出了单位的年度工资预算。 以上这些困难的存在同时也促进了类似我们这样的技术服务公司的发展,因应时代的变化,我们针对这些困难提出了详实的服务方案,为所有的单位解决这些困难,促进各个单位的办公秩序有序进行,保证办公环境的良好,提高办公效率。 二、我司的优势 我们有着长达八年的技术服务经验。有着一支技术精湛,经验丰富的技术团队。包括了台式电脑维护工程师,笔记本维护工程师,网络工程师,打印机维护工程师,复印机维护工程师,服务器工程师,数据库工程师,智能安防设备工程师。技术服务范围完整,服务项目多样反应了我们能应付解决问题的范围的大小;同时,我们有完善的服务方案,快速的反应速度,高效的维修质量。我们同时为许多家单位提供过技术服务,我们高效及时处理过客户遇到的各种问题,并且我公司同时是各种办公设备经销商,耗材经销商,丰富的进货渠道说明我们公司的实力以及产品门类齐全。能够应对各个单位各种问题,并能迅速解决这些问题。 1.我司提供技术服务的部分单位,以下是部分单位名称:

单片机MCU基础知识,初学者必看

单片机MCU基础知识,初学者必看 1.MCU有串口外设的话,在加上电平转换芯片,如MAX232,SP3485就是RS232和RS485接口了。 2.RS485采用差分信号负逻辑,+2~+6V表示0,-6~-2表示1。有两线制和四线制两种接线,四线制是全双工通讯方式,两线制是半双工通讯方式。在RS485一般采用主从通讯方式,即一个主机带多个从机。 3.Modbus是一种协议标准,可以支持多种电气接口,如RS232,RS485,也可以在各种介质上传输,如双绞线,光纤,无线。 4.很多MCU的串口都开始自带FIFO,收发FIFO主要是为了解决串口收发中断过于频繁而导致CPU的效率不高的问题。如果没有FIFO,则没收发一个数据都要中断处理一次,有了FIFO,可以在连续收发若干个数据(根据FIFO的深度而定)后才产生一次中断去处理数据,大大提高效率。 5.有些工程师在调试自己的系统时一出现系统跑飞,就马上引入看门狗来解决问题,而没有思想程序为什么会跑飞?程序跑飞可能是程序本身的bug,也可能是硬件电路的问题(本身就是易受干扰或自己就是干扰源)。通常建议在调试自己的系统时,先不加看门狗,等完全调试稳定了,在补上(危机产品安全,人身安全的除外)。 6.如何区分有源蜂鸣器和无源蜂鸣器? 从外观上看,如将两种蜂鸣器的引脚都朝上放置时,可以看出绿色电路板的一种是源蜂鸣器,没有电路板而用黑胶密封的一种是有源蜂鸣器。 有源蜂鸣器直接接上额定电源就可以连续发声,而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路上才能发声。 7.电压比较器的用途主要是波形的产生和变换,模拟电路到数字电路的接口。 8.低功耗唤醒的常用方式:处理器进入低功耗后就停止了很多活动,当出现一个中断时,可以唤醒处理器,使其从低功耗模式返回到正常运行模式。因此在进入低功耗模式之前,必须配置莫个片内外设的中断,并允许其在低功耗模式下继续工作。如果不这样,只有复

从单片机初学者迈向单片机工程师_完整.doc

目录: KEY篇第一章----按键程序编写的基础 KEY篇第二章----基于状态转移的独立按键程序设计 LED篇第三章—模块化编程初识 LED篇第四章----渐明渐暗的灯 LED篇第五章----多任务环境下的数码管编程设计 我们用学单片机不要停在演示的基础上。只能让单片机完成局部事。这样我们永远不会走出流水灯地狱! !! 学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。也感谢一线工人提供了这个机会。希望大家有什么好的想法和建议都直接跟帖说出来。毕竟只有交流才能够碰撞出火花来 几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。很多个日夜就这样陪伴着它度过了。 期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来, 看到自己曾经走过的路,唏嘘不已。经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。但总是不知从何处写起。今天借一线工人的台,唱一唱我的戏。卖弄”也好,吹嘘”也罢,我只是想认真的写写我这一路 走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。姑妄言之,姑妄听之。如果有啥好的想法和建议一定要说出来。 一路学习过来的过程中,帮助最大之一无疑来自于网络了。很多时候,通过网络,我们都可以获取到所需要的学习资料。但是,随着我们学习的深入,我们会慢慢发现,网络提供的东西是有限度的,好像大部分的资料都差不多,或者说是适合大部分的初学者所需,而当我们想更进一步提高时,却发现能够获取到的资料越来越少,相信各位也会有同感,铺天盖地的单片机资料中大部分不是流水灯就是 LED,液晶, 而且也只是仅仅作功能性的演示。于是有些人选择了放弃,或者是转移到其他兴趣上面去了,而只有少部分人选择了继续摸索下去,结合市面上的书籍,然后在网络上锲而不舍的搜集资料,再从牛人的只言片语中去体会,不断动手实践,慢慢的,也摸索出来了自己的一条路子。当然这个过程必然是艰辛的,而他学会了之后也不会在网络上轻易分享自己的学习成果。如此恶性循环下去,也就不难理解为什么初级的学习资料满天飞,而深入一点的学习资料却很少的原因了。相较于其他领域,单片机技术的封锁更加容易。尽管已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是止于入门阶段或者是简单的演示实验。但是在实际工程应用中却是另外一回事。有能力的高手无暇或者是不愿公开自己的学习经验。 很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的作品,我忽然感觉到一丝丝的悲哀。也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自己。啰啰嗦嗦的说了这么多,相信大家能够明白说的是什么意思。在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初学者更上一层楼。而关于这个主题周的最大主题我想了这样的一个名字从单片机初学者迈向单片机工程师”。名字挺大挺响亮,给我的 压力也挺大的,但我会努力,争取使这样的一系列文章能够带给大家一点帮助,而不是看后大跌眼镜。这样的一系列文章主要的对象是初学者,以及想从初学者更进一步提高的读者。而至于老手,以及那些牛XX 的人,希望能够给我们这些初学者更多的一些指点哈?@_@ 我们首先来看第一章节

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

计算机硬件维修维护考试试题库

硬件维护工程师试题(时间90分钟) 姓名:____性别:__身份证号码:____________ Ⅰ、单项选择题(共35题、每题2分) 1、主板上集成的声卡多为【】声卡。() A. 低档 B. 中档 C. 高档 D. 以上都有 2、脱一些化纤衣服时有可能听到声响或看到闪光,此时的静电至少在【】KV以上。() A. 4 B. 5 C. 6 D. 7 3、灰尘大,天长日久就会腐蚀各配件的电路板。() A. 对 B. 错 4、室内湿度≥【】时可能产生显示器漏电的危险。() A. 80% B. 70% C. 50% D. 30% 5、计算机理想的工作湿度应为【】。() A. 10%~30% B. 30%~80% C. 45%~65% D. 60%~80% 6、当室内湿度≤【】,会在某些部位产生静电干扰,内部元器件被静电破坏的可能性增大,会影响显示器正常工作。() A. 40% B. 30% C. 60% D. 70% 7、相对湿度超过【】,则机器表面容易结露,可能引起元器件漏电、短路、触点生锈、导线霉断。() A. 30% B. 50% C. 60% D. 80% 8、计算机电源的频率范围是【】Hz。() A. 20 B. 30 C. 40 D. 50 9、相对湿度低于【】,则容易产生静电,这可能损坏元器件、破坏磁盘上的信息等。() A. 10% B. 20% C. 30% D. 40% 10、计算机板卡上的集成电路器件多采用MOS技术制造。() A. 对 B. 错 11、显示器内部的高压高达【】KV。() A. 1~10 B. 10~30 C. 30~50 D. 50~70 12、显示器的使用寿命可能是计算机的所有部件中最长的。() A. 对 B. 错 13、计算机硬件资源冲突解决的办法是以【】模式启动操作系统。() A. 正常 B. MS-DOS C. 安全 D. 分步 14、AMI BIOS的1长3短声音代码表示【】。() A. 内存校验错误 B. 显示卡错误 C. 内存错误 D. 非致命错误 15、下面空格处应填写【】命令。C:>\DOS\【】() A. Fdisk B. DEBUG C. MSD D. Format 16、AT A33和AT A66及AT A100的硬盘连接线是一样的。() A. 对 B. 错 17、BIOS和CMOS没有任何区别。() A. 对 B. 错 18、kv3000不能修复硬盘引导问题。() A. 对 B. 错 19、分析并找出故障点应按着【】的原则进行。() A. 先软后硬先外后内 B. 先硬后软先外后内 C. 先硬后软先外后内 D. 先硬后软先内后外 20、Windows 98中的磁盘扫描程序可用于【】各种类型的磁盘错误和损坏。() A. 检查 B. 诊断 C. 修复 D. 以上都可以21、VCM Virtual Channel Memory(VCM)的中文名称是什么。() A. 存储器 B. 虚拟通道存储器 C. 虚拟内存 D. 通道内存 22、P4主板具有独立的【】V供电系统。() A. 1.5 B. 3.3 C. 5 D. 12 23、电容冒泡或淌液时容易死机或系统不稳定,经常出现蓝屏。() A. 对 B. 错 24、开机机箱内"嘀嘀"地叫个不停只要打开机箱,把【】取下来重新插一下就好了。() A. CPU B. 显卡 C. 内存 D. 电源 25、如果出现开机后,过几秒钟就自动关机,这时最好拆开机箱面板,检查一下电源开关是不是按下后弹不起来。() A. 对 B. 错 26、当不认键盘、鼠标时,要首先检查给键盘,鼠标供电的【】电源。() A. +5V B. 时钟 C. 键盘和鼠标 D. 接地线 27、PRI IDE 和IDE1及SEC IDE和IDE2表示硬盘和光驱接口的【】。() A. 主和副 B. 对和错 C. 副和主 D. 错和对 28、如果显示器没有消磁功能,将显示器放一段时间后显示器的磁化现象会自动消除。() A. 对 B. 错 29、在彩色显示器中,通常是1个电子枪,所以是单枪显示器。() A. 对 B. 错 30、EGA彩色显示器分辨率为【】。() A. 640×350 B. 640×480 C. 640×320 D. 800×600 31、EGA彩色显示器可显示【】种颜色。() A. 8 B. 16 C. 32 D. 64 32、MTS多频显示器用途单一,所以目前市场上不常见。() A. 对 B. 错 33、液晶显示器是将液晶置于两片【】之间。() A. 普通玻璃 B. 茶色玻璃 C. 导电玻璃 D. 磁场 34、荧光屏上的每一个彩色点(即像素)是由【】三原色组合而成。() A. 红、绿、黄 B. 红、黄、蓝 C. 红、绿、蓝 D. 黄、红、绿 35、电脑工作时,如果发现字符突然消失,屏幕变黑,应该立即对主机进行检修。() A. 对 B. 错 Ⅱ、多项选择题(共5题、每题6分) 1、目前在预防病毒工具中采用的技术主要有哪些。() A.智能判断型 B.智能监察型 C.监测写盘操作,对引导区BR或主引导区MBR的写操作报警 D.检测一些病毒经常要改变的系统信息,如引导区、中断向量表、可用内存空间等,以确定是否存在病毒行为 2、按配接的显示卡分类,显示器可以分为【】。() A.MDA单色显示器 B.CGA彩色显示器 C.EGA彩色显示器 D.VGA(包括SVGA)彩色显示器 3、无法从硬盘启动的情况主要有哪几种原因。() A. CMOS数据丢失 B. 硬盘坏 C. 系统文件丢失 D. 病毒 4、DVD音频采样标准有哪些。() A. 8位 B. 12位 C. 16位 D. 24位 5、POST程序在上电启动时可对【】进行常规检测。() A. 内存 B. 主板 C. CPU D. 驱动器

单片机基础知识

1.一个完整的微机系统由硬件和软件两大部分组成 2.微型计算机的性能指标: 字长、运算速度、存储容量、软件配置、外设扩展能力 字:一组二进制数,字长:该二进制数的位数,字长越大,计算机处理数据越快运算速度:表达方式:cpu主频,越高,运算速度越快 存储容量:内存储容量(cpu直接访问存储器)、外存储容量(硬盘容量) 2.计算机系统:硬件系统(冯.诺依曼结构)(运算器、存储器、控制器、输入输出设备)、软件系统(运行程序和相应文档) 3.CPU主要组成部分:运算器、控制器 ALU运算器核心、累加器A、标志寄存器FR(C进、借位,OF溢出标志)、(不影响标志位CY的指令:INC A) 寄存器组RS、控制器CU(pc程序计算器、ir指令寄存器、id指令译码器) 4.存储器:RAM、ROM,其中RAM 具有易失性,常用于存储临时性数据 存储器的地址范围是0000H~0FFFH,它的容量为4KB(16*16*16=4*1024) 5.总线bus:传递信息的公共通信公道 片总线、内总线、外总线 地址总线(AB)、控制总线(CB)、数据总线(DB) 6.单片机(芯片)包括五部分:运算器、存储器、控制器、输入部分、输出部分8051:8位单片机 8031:复位后,PC和SP为:0000H、07H 7.二进制B、八进制O、十进制D、十六进制H 8.原码、反码、补码、压缩BCD码

9.单片机引脚: P1.0VCC(40引脚)P1.1P0.0 P1.2P0.1 P1.3P0.2 P1.4P0.3 P1.5P0.4 P1.6P0.5 P1.7P0.6 RST P0.7 RXD EA/VPP TXD ALE/PROG ITR0PSDE ITR1P2.7 T0P2.6 T1P2.5 WR P2.4 RD P2.3 XTAL2P2.2 XTAL1P2.1 GND P2.0(21引脚)

单片机初学者必须掌握的几个概念

单片机初学者必须掌握的几个概念 一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢这种情况是是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称控制总线。 在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能用,分配地址当也是以电信号的形给出的,由于存储单元比较多,所以,用于地址分的线也较多,这些线被称为地址总线。 二、数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的─数字,或者说都是串‘0‘和‘1‘组成的序列。换言之,地址、指令也都是数据。指令由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内单元的地址值已由芯设计者规定好,不可更改,外部的单元可以由单片机开发者自行决,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况: 1地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。 2方式字或控制字(如MOV TMOD,#3),3即是控制字。 3常数(如MOV TH0,#10H)10H即定时常数。 4实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执兄令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实际出的值。理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来行了。 三、P0口、P2口和P3的第二功能用法初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有个切换的过程,或者说要有一条指令,事实,各端口的第二功能完全是自动,不需要指令来转换。如、分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们挥作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从 P3. 或送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用‘也并不是‘不能而是(使用者)‘不会‘将其作为通用I/O口使用。你完全可以在指令中按排一条S ETB 的指令,并且当单片机执行到这条指令时,也会使变为高电平,但使用者不会这么做,因为这通常这会导致系统当溃(即死机)。 四、程序的执行过程单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000,所以程序总是从‘0000‘单元开始执行,也就是说:在系统的ROM中一定要存在‘0000‘个单元,并且在‘0000‘单元中存放的一定是一条指令。

相关文档
相关文档 最新文档