范文一:比较有思想深度的文章 语文教学中引导学生拓展思想的深度
导读:就爱阅读网友为您分享以下“语文教学中引导学生拓展思想的深度”资讯,希望对您有所帮助,感谢您对92to.com的支持!
龙源期刊网 http://www.qikan.com.cn
语文教学中引导学生拓展思想的深度
作者:郭玉福
来源:《商情》2014年第39期
中国的母语教育古往今来皆不乏诗意(**时期除外),但却忽略了哲理的探求,加上我国的基础教育一直缺乏真正意义上的哲学教育,使得学生的思想异常苍白,语文教育因之也一直处于贫血状态。
我并不是想把语文课上成哲学课,但我认为,如果没有思想方面(指哲学意义上的)的引导,语文教育很难达到一定的高度与深度。如果以思想深度的拓展作为新学年的教学坐
1
标之一,那么,学生在广袤的语文海洋里应该不会迷失方向。于是,我从阅读、写作、说话三个方面做了一些大胆的尝试。
一、在阅读教学中感知伟大的灵魂。
古今中外许多大文学家同时又是大思想家,读他们的作品,领略的不仅仅是美妙的文字,同时还会吸纳许多思想的养分。还有一部分文章,是以伟人为题材的,阅读这样的文章,仿佛能感受到伟人思想的脉搏,从而不断提升自己的人生境界。在阅读教学中,我十分注重这两类作品的推介,以求师生一道感知那些伟大的灵魂。
我的处理方法主要有两种,其一是通过纵横联系法把书读厚。如课本中涉及曹操诗歌时,我便再给学生补充几首他的代表作,让曹操以一个伟大诗人的形象厚实地矗立在学生面前。 另一种方法就是挑选课本中暂时没有的名家名篇,作为教材的必要补充。这其中有经典的作家作品,如《论语》、唐诗、宋词、泰戈尔散文诗、《培根论说文集》等等;只要是用自由的笔墨抒写自由的思想的文字,又能启迪中学生的思想与智慧,我都乐意为学生导航。我相信:高品位的阅读,不但可以避免粗俗文字对学生的干扰,同时又能丰富学生的思想涵养。
二、在写作教学中张扬自己的个性。
写作这行当之所以传百代而不衰,是因为她可以抒写自己的个性,惟其如此,才“江山代有才人出,各领风骚数百年。”
2
若要我们的学生不厌弃作文,首先当鼓励他们写自己的话。我极力主张学生在作文中张扬自己的个性,没有个性的作文如死水一潭。
在以居里夫人为话题的作文中,有的学生站在科学家的
角度,有的站在母亲的角度,有的站在妻子的角度,有的站在朋友的角度等,抒发自己对居里夫人的敬佩之情。在以爱因斯坦为话题的写作中,学生的感悟也非常深刻。
三、在说话教学中放飞自己的思想。
百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网92to.com,您的在线图书馆
3
范文二:《浙商》的文章有深度
Iea b/ cF e dk
《浙》商是大 生学的课辅材
料
: 一害f …糍 一 …— 露 一 F量 ■ … ■ ●- _■ 一
杨荣 成集华董团事秘长
@I书 usY :尹 omr _
学经济的
伤 不起啊, 课深 难懂。奥 商》浙专业 《
杂志便
了 我成学经济的学课教材了 辅《。 浙》商 杂 志 内容 深浅入, 出有多很鲜活 经商案例和的独的
到业见解,行适 大合学学生习阅读 。
金@:信
前段
时间福建出差去,沿途经过徐士 在温淮州瑞的厂安 高看速去 过 廒
从浙商
群能够这么体地发好 ,展首 先是全各球
颇为显眼.
. 程之后恰好读到回《 浙商》 杂志 2合刊《月徐士淮 然凛赴 死 一》, 深文 感 悲. 凉.徐士淮去 世一已事去过时,多此 前方官出传的消息是病因猝 ,死 地自 当 的传言甚杀尘上嚣 章提到文众离 多前世细节,可略 微推出测的内心他挣扎与困 境 : 温州委 书记市陈荣德说 , 企曾家业 杀是自业企家精体神现。 起 来有些刺
听,激 可但能的真一种实情。 危是 到机来之时 他,未想曾携到款跑, 逃曾想到未
现套 求,生 是努而 力维持 在,如 的今 语体 系 话经 十已分 易不 。下 ,只 ,是造 了 成 这谁
地
商浙在拼奋斗, 搏体力 行身着商精浙 浙商》神 《
志引杂领播传进的先商浙炙, 化无形文化化有为
形
载, 体众人传供欣赏阅 有。江省开明的政浙府,吴 晓 波、鲁 博士等浙商的研者究 有,地良各运性的商
会作, 为浙作,商很 福。幸
样恶
和脆劣弱堪的民不企存生环境?谁又 在他背最后后推了 他一把? 唯窘愿 , 此
事要 重不.演
.
喜《欢 商》 浙经对形势济分析的
唯谢宜 北师湖范大在学生校
很喜欢《 商》 杂浙对经志济势的分形析,靓 爆
看多了了 ,。我自己也 会分学析了比如 近最热的点 , 希问题。 腊腊希也于欧元区属 ,欧几盟大主要都
国
到受了影响! 而希腊 第是一,个希腊政府 整从体上 来说是
极的积, 并未做但出完全 实性的质大模规 财政 革措施。
改王梅 个体菊工商户
深开灯夜,随手拿起 本 杂志一起看 。来浙 商》《封 立马面吸引了翻 -:面的内容很也实扎。我, 7 ̄ r - 夜深
人静, 适合一很人个一边思一考阅边,读 是 精
王坚大 溪诺丽地饮料( 中 国 有限公司)浙江公司经分 理
神营养餐。
然虽我不是 人, 商每年必但风看云浙商的 颁奖典礼 也常常,注关《浙 商》 的 报道 . 不 仅是浙 江经济晴的雨 ,表 .它 更是激自 励已的 良范本好 浙。商
身上那种
逆 中 求境生存,顺 境 中抓机 , 不断遇新、创 超 越自我的 精神深深影着响我 , 为已 经换跑
道的如我走何 出片新天一提地了供大强精的力置神
欢迎者选读择 以下式方与我们联:系 () 1拨 打话:电5 1 8 3 0 5 5 14 0 0 —75 1 96 8 12 3
( —)a : za n1 1@6c r 2 E mi ra T29 2 o ln
(
) 关注3发私信并给浪微博新 的 《浙》商官 方微博
tht: iacm zne n t h n/ co/ h asg p /s
编
辑: 吴 亚芬 谢 庆 式版计: 设盈潘 盈插画: 红李红邮 : i@ 箱z so c b jrbm.n c
8 10 Z 1 E4AN 2G1 34S 0 102
范文三:有思维深度的文章写作(李伟希)
问:
有思维深度的文章写作
请问怎样才能写出有质量,有深度的文章,我们应该如何思考?
答:
首先,这是一个很好的问题!
用最快的时间,写出最有质量、最有深度的文章,实现自己的影响力。谁不想?我也想!或许,这也是马斯洛需求的一个相对高层级的需求。
然而,现实中要做到这一点,并不容易。尤其在这个“微”时代,信息严重过剩,人们的思维已经碎片化了,所以匹配有深度有质量的文章还得对应的是阅读者的一份耐性。比如,现在很多人看微信,首先不是看微信的内容,首先是用手指滑一下,看这篇文章有多长,如果太长也就不想看了。
互联网时代不缺文章,缺的是高质量的原创文章!所以,在现在这个“微”时代,碎片化的时代,写文章确保要有质量,有深度,大概应该是这样:
1. 创!坚持原创,并且尽量做到文章有自己的观点;
2. 窄!专注于自己最熟悉的领域;
3. 多!量变决定质变。
最后一点“量变决定质变”尤为重要! 据说,汪峰从走上音乐之路开始,原创的音乐作品近千件,被你所熟知的有几首?
范文四:有深度的单片机文章
“从单片机初学者迈向单片机工程师”之LED主题讨论周第一章----写在前面
学习单片机也已经有几年了,藉此机会和大家聊一下我学习过程中的一些经历和想法吧。也感谢一线工人提供了这个机会。希望大家有什么好的想法和建议都直接跟帖说出来。毕竟只有交流才能够碰撞出火花来^_^。
。“卖弄”也好,“吹嘘”也罢,我只是想认真的写写我这一路走来历经的总总,把其中值得注意,以及经验的地方写出来,权当是我对自己的一个总结吧。而作为看官的你,如果看到了我的错误,还请一定指正,这样对我以及其它读者都有帮助,而至于你如果从中能够收获到些许,那便是我最大的欣慰了。姑妄言之,姑妄听之。如果有啥好的想法和建议一定要说出来。?几年前,和众多初学者一样,我接触到了单片机,立刻被其神奇的功能所吸引,从此不能自拔。很多个日夜就这样陪伴着它度过了。期间也遇到过非常多的问题,也一度被这些问题所困惑……等到回过头来,看到自己曾经走过的路,唏嘘不已。经常混迹于论坛里,也看到了很多初学者发的求助帖子,看到他们走在自己曾走过的弯路上,忽然想到了自己的那段日子,心里竟然莫名的冲动,凡此总总,我总是尽自己所能去回帖。很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。但总是不知从何处写起。今天借一线工人的台,唱一唱我的戏
一路学习过来的过程中,帮助最大之一无疑来自于网络了。很多时候,通过网络,我们都可以获取到所需要的学习资料。但是,随着我们学习的深入,我们会慢慢发现,网络提供的东西是有限度的,好像大部分的资料都差不多,或者说是适合大部分的初学者所需,而当我们想更进一步提高时,却发现能够获取到的资料越来越少,相信各位也会有同感,铺天盖地的单片机资料中大部分不是流水灯就是LED,液晶,而且也只是仅仅作功能性的演示。于是有些人选择了放弃,或者是转移到其他兴趣上面去了,而只有少部分人选择了继续摸索下去,结合市面上的书籍,然后在网络上锲而不舍的搜集资料,再从牛人的只言片语中去体会,不断动手实践,慢慢的,也摸索出来了自己的一条路子。当然这个过程必然是艰辛的,而他学会了之后也不会在网络上轻易分享自己的学习成果。如此恶性循环下去,也就不难理解为什么初级的学习资料满天飞,而深入一点的学习资料却很少的原因了。相较于其他领域,单片机技术的封锁更加容易。尽管已经问世了很多年了,有价值的资料还是相当的欠缺,大部分的资料都是止于入门阶段或者是简单的演示实验。但是在实际工程应用中却是另外一回事。有能力的高手无暇或者是不愿公开自己的学习经验。 很多时候,我也很困惑,看到国外爱好者毫不保留的在网络上发布自己的作品,我忽然感觉到一丝丝的悲哀。也许,我们真的该转变一下思路了,帮助别人,其实也是在帮助自己。啰啰嗦嗦的说了这么多,相信大家能够明白说的是什么意思。在接下来的一段日子里,我将会结合电子工程师之家举办的主题周活动写一点自己的想法。尽可能从实用的角度去讲述。希望能够帮助更多的初学者更上一层楼。而关于这个主题周的最大主题我想了这样的一个名字“从单片机初学者迈向单片机工程师”。名字挺大挺响亮,给我的压力也挺大的,但我会努力,争取使这样的一系列文章能够带给大家一点帮助,而不是看后大跌眼镜。这样的一系列文章主要的对象是初学者,以及想从初学者更进一步提高的读者。而至于老手,以及那些牛XX的人,希望能够给我们这些初学者更多的一些指点哈~@_@~.
“从单片机初学者迈向单片机工程师”之LED主题讨论周第二章----学会释放CPU
从这一章开始,我们开始迈入单片机的世界。在我们开始这一章具体的学习之前,有必要给大家先说明一下。在以后的系列文章中,我们将以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)/ RA2 。其中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真值表如下:
通过这个真值表我们可以看出。当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 Timer0Init(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时标标志位置位
}
实际效果图如下
点亮
熄灭
“从单片机初学者迈向单片机工程师”之LED主题讨论周第三章----模块化编程初识
OK ,到此一个简单的工程模板就建立起来了,以后我们再新建源文件和头文件的时候,就可以直接保存到src文件目录下面了。
下面我们开始编写各个模块文件。
首先编写Timer.c 这个文件主要内容就是定时器初始化,以及定时器中断服务函数。其内容如下。 #include
bit g_bSystemTime1Ms = 0 ; // 1MS系统时标
void Timer0Init(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
#include
#include
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
#include
#include
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() ;
}
}
整个工程截图如下:
至此,第三章到此结束。
一起来总结一下我们需要注意的地方吧
[color=#FF0000]1. C语言源文件(*.c)的作用是什么
2. C语言头文件(*.h)的作用是什么
3. typedef 的作用
4. 工程模板如何组织
5. 如何创建一个多模块(多文件)的工程
“从单片机初学者迈向单片机工程师”之LED主题讨论周第四章----渐明渐暗的灯
看着学习板上的LED按照我们的意愿开始闪烁起来,你心里是否高兴了,我相信你会的。但是很快你就会感觉到太单调,总是同一个频率在闪烁,总是同一个亮度在闪烁。如果要是能够由暗逐渐变亮,然后再由亮变暗该多漂亮啊。嗯,想法不错,可以该从什么地方入手呢。
在开始我们的工程之前,首先来了解一个概念:PWM。
PWM(Pulse Width Modulation)是脉冲宽度调制的英文单词的缩写。下面这段话是通信百科中对其的定义: 脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽调制是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽调制式开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
读起来有点晦涩难懂。其实简单的说来,PWM技术就是通过调整一个周期固定的方波的占空比,来调节输出电压的平均当电压,电流或者功率等被控量。我们可以用一个水龙头来类比,把1S时间分成50等份,即每一个等份20MS。在这20MS时间里如果我们把水龙头水阀一直打开,那么在这20MS里流过的水肯定是最多的,如果我们把水阀打开15MS,剩下的5MS关闭水阀,那么流出的水相比刚才20MS全开肯定
要小的多。同样的道理,我们可以通过控制20MS时间里水阀开启的时间的长短来控制流过的水的多少。那么在1S内平均流出的水流量也就可以被控制了。
当我们调整PWM的占空比时,就会引起电压或者电流的改变,LED的明暗状态就会随之发生相应的变化,听起来好像可以通过这种方法来实现我们想要的渐明渐暗的效果。让我们来试一下吧。
大家都知道人眼有一个临界频率,当LED的闪烁频率达到一定的时候,人眼就分辨不出LED是否在闪烁了。就像我们平常看电视一样,看起来画面是连续的,实质不是这个样子,所有连续动作都是一帧帧静止的画面在1S的时间里快速播放出来,譬如每秒24帧的速度播放,由于人眼的视觉暂留效应,看起来画面就是连续的了。同样的道理,为了让我们的LED在变化的过程中,我们感觉不到其在闪烁,可以将其闪烁的频率定在50Hz以上。同时为了看起来明暗过渡的效果更加明显,我们在这里定义其变化范围为0~99(100等分).即最亮的时候其灰度等级为99,为0的时候最暗,也就是熄灭了。
于是乎我们定义PWM的占空比上限为99, 下限定义为0
#define LED_PWM_LIMIT_MAX 99
#define LED_PWM_LIMIT_MIN 0
假定我们LED的闪烁频率为50HZ,而亮度变化的范围为0~99共100等分。则每一等分所占用的时间为 1/(50*100) = 200us 即我们在改变LED的亮灭状态时,应该是在200us整数倍时刻时。在这里我们用单片机的定时器产生200us的中断,同时每20MS调整一次LED的占空比。这样在20MS * 100 = 2S的时间内LED可以从暗逐渐变亮,在下一个2S内可以从亮逐渐变暗,然后不断循环。
由于大部分的内容都可以在中断中完成,因此,我们的大部分代码都在Timer.c这个文件中编写,主函数中除了初始化之外,就是一个空的死循环。
Timer.c内容如下。
#include
#include
#define LED P0 //定义LED接口
#define LED_ON() LED = 0x00 ; //所有LED亮
#define LED_OFF() LED = 0xff ; //所有LED熄灭
#define LED_PWM_LIMIT_MAX 99
#define LED_PWM_LIMIT_MIN 0
static uint8 s_u8TimeCounter = 0 ; //中断计数
static uint8 s_u8LedDirection = 0 ; //LED方向控制 0 :渐亮 1 :渐灭
static int8 s_s8LedPWMCounter = 0 ; //LED占空比
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定时器0工作方式1
TH0 = 0xff ; //定时器初始值(200us中断一次)
TL0 = 0x47 ;
TR0 = 1 ;
ET0 = 1 ;
}
void Time0Isr(void) interrupt 1
{
static int8 s_s8PWMCounter = 0 ;
TH0 = 0xff ; //定时器重新赋初值
TL0 = 0x47 ;
if(++s_u8TimeCounter >= 100) //每20MS调整一下LED的占空比
{
s_u8TimeCounter = 0 ;
//如果是渐亮方向变化,则占空比递增
if((s_s8LedPWMCounter
{
s_s8LedPWMCounter++ ;
if(s_s8LedPWMCounter > LED_PWM_LIMIT_MAX)
{
s_u8LedDirection = 1 ;
s_s8LedPWMCounter = LED_PWM_LIMIT_MAX ;
}
}
//如果是渐暗方向变化,则占空比递渐
if((s_s8LedPWMCounter >= LED_PWM_LIMIT_MIN) &&(1 == s_u8LedDirection))
{
s_s8LedPWMCounter-- ;
if(s_s8LedPWMCounter
{
s_u8LedDirection = 0 ;
s_s8LedPWMCounter = LED_PWM_LIMIT_MIN ;
}
}
s_s8PWMCounter = s_s8LedPWMCounter ; //获取LED的占空比
}
if(s_s8PWMCounter > 0) //占空比大于0,则点亮LED,否则熄灭LED
{
LED_ON() ;
s_s8PWMCounter-- ;
}
else
{
LED_OFF();
}
}
其实PWM技术在我们实际生活中应用的非常多。比较典型的应用就是控制电机的转速,控制充电电流的大小,等等。而随着技术的发展,也出现了其他类型的PWM技术,如相电压PWM,线电压PWM,SPWM等等,如果有兴趣可以到网上去获取相应资料学习。
关于渐明渐暗的灯就简单的讲到这里。
“从单片机初学者迈向单片机工程师”之LED主题讨论周第五章--多任务环境下的数码管编程设计
[post]数码管在实际应用中非常广泛,尤其是在某些对成本有限制的场合。编写一个好用的LED程序并不是那么的简单。曾经有人这样说过,如果用数码管和按键,做一个简易的可以调整的时钟出来,那么你的单片机就算入门了60%了。此话我深信不疑。我遇到过很多单片机的爱好者,他们问我说单片机我已经掌握了,该如何进一步的学习下去呢?我并不急于回答他们的问题,而是问他们:会编写数码管的驱动程序了吧?“嗯”。会编写按键程序了吧?“嗯”。好,我给你出一个小题目,你做一下。用按键和数码管以及单片机定时器实现一个简易的可以调整的时钟,要求如下:
8位数码管显示,显示格式如下
时-分-秒
XX-XX-XX
要求:系统有四个按键,功能分别是 调整,加,减,确定。在按下调整键时候,显示时的两位数码管以1 Hz 频率闪烁。如果再次按下调整键,则分开始闪烁,时恢复正常显示,依次循环,直到按下确定键,恢复正常的显示。在数码管闪烁的时候,按下加或者减键可以调整相应的显示内容。按键支持短按,和长按,即短按时,修改的内容每次增加一或者减小一,长按时候以一定速率连续增加或者减少。
结果很多人,很多爱好者一下子都理不清楚思路。其实问题的根源在于没有以工程化的角度去思考程序的编写。很多人在学习数码管编程的时候,都是照着书上或者网上的例子来进行试验。殊不知,这些例子代码仅仅只是具有一个演示性的作用,拿到实际中是很难用的。举一个简单的例子。
下面这段程序是在网上随便搜索到的:
while(1)
{
for(num=0;num
{
P0=table[num];
P2=code[num] ;
delayms(2) ;
}
}
看出什么问题来了没有,如果没有看出来请仔细想一下,如果还没有想出来,请回过头去,认真再看一遍“学
会释放CPU”这一章的内容。这个程序作为演示程序是没有什么问题的,但是实际应用的时候,数码管显示的内容经常变化,而且还有很多其它任务需要执行,因此这样的程序在实际中是根本就无法用的,更何况,它这里也调用了delayms(2)这个函数来延时2 ?ms这更是令我们深恶痛绝
本章的内容正是探讨如何解决多任务环境下(不带OS)的数码管程序设计的编写问题。理解了其中的思想,无论要求我们显示的形式怎么变化(如数码管闪烁,移位等),我们都可以很方便的解决问题。
数码管的显示分为动态显示和静态显示两种。静态显示是每一位数码管都用一片独立的驱动芯片进行驱动。比较常见的有74LS164,74HC595等。利用这类芯片的好处就是可以级联,留给单片机的接口只需要时钟线,数据线,因此比较节省I/O口。如下图所示:
利用74LS164级联驱动8个单独的数码管
静态显示的优点是程序编写简单。但是由于涉及到的驱动芯片数量比较多,同时考虑到PCB的布线等等因素,在低成本要求的开发环境下,单纯的静态驱动并不合适。这个时候就可以考虑到动态驱动了。 动态驱动的图如下所示(以EE21开发板为例)
由上图可以看出。8个数码管的段码由一个单独的74HC573驱动。同时每一个数码管的公共端连接在另外一个74HC573的输出上。当送出第一位数码管的段码内容时候,同时选通第一位数码管的位选,此时,第一位数码管就显示出相应的内容了。一段时间之后,送出第二位数码管段码的内容,选通第二位数码管的位选,这时显示的内容就变成第二位数码管的内容了……依次循环下去,就可以看到了所有数码管同时显示了。事实上,任意时刻,只有一位数码管是被点亮的。由于人眼的视觉暂留效应以及数码管的余辉效应,当数码管扫描的频率非常快的时候,人眼已经无法分辨出数码管的变化了,看起来就是同时点亮的。
我们假设数码管的扫描频率为50 Hz, 则完成一轮扫描的时间就是1 / 50 = 20 ms 。我们的系统共有8位数码管,则每一位数码管在一轮扫描周期中点亮的时间为20 / 8 = 2.5 ms 。
动态扫描对时间要求有一点点严格,否则,就会有明显的闪烁。
假设我们程序 中所有任务如下:
while(1)
{
LedDisplay() ; //数码管动态扫描
ADProcess() ; //AD采集处理
TimerProcess() ; //时间相关处理
DataProcess() ; //数据处理
}
LedDisplay() 这个任务的执行时间,如同我们刚才计算的那样,50 Hz频率扫描,则该函数执行的时间为20 ms 。 假设ADProcess()这个任务执行的的时间为2 ms ,TimerProcess()这个函数执行的时间为 1 ms ,DataProcess() 这个函数执行的时间为10 ms 。 那么整个主函数执行一遍的总时间为 20 + 2 + 1 + 10 = 33 ms 。即LedDisplay() 这个函数的扫描频率已经不为50 Hz 了,而是 1 / 33 = 30.3 Hz 。这个频率数码管已经可以感觉到闪烁了,因此不符合我们的要求。为什么会出现这种情况呢? 我们刚才计算的50 Hz 是系统只有LedDisplay()这一个任务的时候得出来的结果。当系统添加了其它任务后,当然系统循环执行一次的总时间就增加了。如何解决这种现象了,还是离不开我们第二章所讲的那个思想。
系统产生一个2.5 ms 的时标消息。LedDisplay() , 每次接收到这个消息的时候, 扫描一位数码管。这样8个时标消息过后,所有的数码管就都被扫描一遍了。可能有朋友会有这样的疑问:ADProcess() 以及 DataProcess() 等函数执行的时间还是需要十几ms 啊,在这十几ms 的时间里,已经产生好几个2.5 ms的时标消息了,这样岂不是漏掉了扫描,显示起来还是会闪烁。能够想到这一点,很不错,这也就是为什么我们要学会释放CPU的原因。对于ADProcess(),TimerProcess(),DataProcess(),等任务我们依旧要采取此方法对CPU进行释放,使其执行的时间尽可能短暂,关于如何做到这一点,在以后的讲解如何设计多任务程序设计的时候会讲解到。
下面我们基于此思路开始编写具体的程序。
首先编写Timer.c文件。该文件中主要为系统提供时间相关的服务。必要的头文件包含。
#include
#include
为了方便计算,我们取数码管扫描一位的时间为2 ms。设置定时器0为2 ms中断一次。
同时声明一个位变量,作为2 ms时标消息的标志
bit g_bSystemTime2Ms = 0 ; // 2msLED动态扫描时标消息
初始化定时器0
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定时器0工作方式1
TH0 = 0xf8 ; //定时器初始值
TL0 = 0xcc ;
TR0 = 1 ;
ET0 = 1 ;
}
在定时器0中断处理程序中,设置时标消息。
void Time0Isr(void) interrupt 1
{
TH0 = 0xf8 ; //定时器重新赋初值
TL0 = 0xcc ;
g_bSystemTime2Ms = 1 ; //2MS时标标志位置位
}
然后我们开始编写数码管的动态扫描函数。
新建一个C源文件,并包含相应的头文件。
#include
#include
#include
先开辟一个数码管显示的缓冲区。动态扫描函数负责从这个缓冲区中取出数据,并扫描显示。而其它函数则可以修改该缓冲区,从而改变显示的内容。
uint8 g_u8LedDisplayBuffer[8] = {0} ; //显示缓冲区
然后定义共阳数码管的段码表以及相应的硬件端口连接。
code uint8 g_u8LedDisplayCode[]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
0xbf, //'-'号代码
} ;
sbit io_led_seg_cs = P1^4 ;
sbit io_led_bit_cs = P1^5 ;
#define LED_PORT P0
再分别编写送数码管段码函数,以及位选通函数。
static void SendLedSegData(uint8 dat)
{
LED_PORT = dat ;
io_led_seg_cs = 1 ; //开段码锁存,送段码数据
io_led_seg_cs = 0 ;
}
static void SendLedBitData(uint8 dat)
{
uint8 temp ;
temp = (0x01
LED_PORT = temp ;
io_led_bit_cs = 1 ; //开位码锁存,送位码数据
io_led_bit_cs = 0 ;
}
下面的核心就是如何编写动态扫描函数了。
如下所示:
void LedDisplay(uint8 * pBuffer)
{
static uint8 s_LedDisPos = 0 ;
if(g_bSystemTime2Ms)
{
g_bSystemTime2Ms = 0 ;
SendLedBitData(8) ; //消隐,只需要设置位选不为0~7即可
if(pBuffer[s_LedDisPos] == '-') //显示'-'号
{
SendLedSegData(g_u8LedDisplayCode[16]) ;
}
else
{
SendLedSegData(g_u8LedDisplayCode[pBuffer[s_LedDisPos]]) ;
}
SendLedBitData(s_LedDisPos);
if(++s_LedDisPos > 7)
{
s_LedDisPos = 0 ;
}
}
}
函数内部定义一个静态的变量s_LedDisPos,用来表示扫描数码管的位置。每当我们执行该函数一次的时候,s_LedDisPos的值会自加1,表示下次扫描下一个数码管。然后判断g_bSystemTime2Ms时标消息是否到了。如果到了,就开始执行相关扫描,否则就直接跳出函数。SendLedBitData(8) ;的作用是消隐。因为我们的系统的段选和位选是共用P0口的。在送段码之前,必须先关掉位选,否则,因为上次位选是选通的,在送段码的时候会造成相应数码管的点亮,尽管这个时间很短暂。但是因为我们的数码管是不断扫描的,所以看起来还是会有些微微亮。为了消除这种影响,就有必要再送段码数据之前关掉位选。
if(pBuffer[s_LedDisPos] == '-') //显示'-'号这行语句是为了显示’-’符号特意加上去的,大家可以看到在定义数码管的段码表的时候,我多加了一个字节的代码0xbf:
code uint8 g_u8LedDisplayCode[]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
0xbf, //'-'号代码
通过SendLedSegData(g_u8LedDisplayCode[pBuffer[s_LedDisPos]]) ;送出相应的段码数据后,然后通过SendLedBitData(s_LedDisPos);打开相应的位选。这样对应的数码管就被点亮了。
if(++s_LedDisPos > 7)
{
s_LedDisPos = 0 ;
}
然后s_LedDisPos自加1,以便下次执行本函数时,扫描下一个数码管。因为我们的系统共有8个数码管,所以当s_LedDisPos > 7后,要对其进行清0 。否则,没有任何一个数码管被选中。这也是为什么我们可以用
SendLedBitData(8) ; //消隐,只需要设置位选不为0~7即可
对数码管进行消隐操作的原因。
下面我们来编写相应的主函数,并实现数码管上面类似时钟的效果,如显示10-20-30
即10点20分30秒。
Main.c
#include
#include
#include
#include
sbit io_led = P1^6 ;
void main(void)
{
io_led = 0 ; //发光二极管与数码管共用P0口,这里禁止掉发光二极管的锁存输出
Timer0Init() ;
g_u8LedDisplayBuffer[0] = 1 ;
g_u8LedDisplayBuffer[1] = 0 ;
g_u8LedDisplayBuffer[2] = '-' ;
g_u8LedDisplayBuffer[3] = 2 ;
g_u8LedDisplayBuffer[4] = 0 ;
g_u8LedDisplayBuffer[5] = '-' ;
g_u8LedDisplayBuffer[6] = 3 ;
g_u8LedDisplayBuffer[7] = 0 ;
EA = 1 ;
while(1)
{
LedDisplay(g_u8LedDisplayBuffer) ;
}
}
?将整个工程进行编译,看看效果如何
动起来
既然我们想要模拟一个时钟,那么时钟肯定是要走动的,不然还称为什么时钟撒。下面我们在前面的基础之上,添加一点相应的代码,让我们这个时钟走动起来。
我们知道,之前我们以及设置了一个扫描数码管用到的2 ms时标。 如果我们再对这个时标进行计数,当计数值达到500,即500 * 2 = 1000 ms 时候,即表示已经逝去了1 S的时间。我们再根据这个1 S的时间更新显示缓冲区即可。听起来很简单,让我们实现它吧。
首先在Timer.c中声明如下两个变量:
bit g_bTime1S = 0 ; //时钟1S时标消息
static uint16 s_u16ClockTickCount = 0 ; //对2 ms 时标进行计数
再在定时器中断函数中添加如下代码:
if(++s_u16ClockTickCount == 500)
{
s_u16ClockTickCount = 0 ;
g_bTime1S = 1 ;
}
从上面可以看出,s_u16ClockTickCount计数值达到500的时候,g_bTime1S时标消息产生。然后我们根据这个时标消息刷新数码管显示缓冲区:
void RunClock(void)
{
if(g_bTime1S )
{
g_bTime1S = 0 ;
if(++g_u8LedDisplayBuffer[7] == 10)
{
g_u8LedDisplayBuffer[7] = 0 ;
if(++g_u8LedDisplayBuffer[6] == 6)
{
g_u8LedDisplayBuffer[6] = 0 ;
if(++g_u8LedDisplayBuffer[4] == 10)
{
g_u8LedDisplayBuffer[4] = 0 ;
if(++g_u8LedDisplayBuffer[3] == 6)
{
g_u8LedDisplayBuffer[3] = 0 ;
if( g_u8LedDisplayBuffer[0]
{
if(++g_u8LedDisplayBuffer[1]==10)
{
g_u8LedDisplayBuffer[1] = 0 ;
g_u8LedDisplayBuffer[0]++;
}
}
else
{
if(++g_u8LedDisplayBuffer[1]==4)
{
g_u8LedDisplayBuffer[1] = 0 ;
g_u8LedDisplayBuffer[0] = 0 ;
}
}
}
}
}
}
}
}
这个函数的作用就是对每个数码管缓冲位的值进行判断,判断的标准就是我们熟知的24小时制。如秒的个位到了10 就清0,同时秒的十位加1….诸如此类,我就不一一详述了。
同时,我们再编写一个时钟初始值设置函数,这样,可以很方便的在主程序开始的时候修改时钟初始值。 void SetClock(uint8 nHour, uint8 nMinute, uint8 nSecond)
{
g_u8LedDisplayBuffer[0] = nHour / 10 ;
g_u8LedDisplayBuffer[1] = nHour % 10 ;
g_u8LedDisplayBuffer[2] = '-' ;
g_u8LedDisplayBuffer[3] = nMinute / 10 ;
g_u8LedDisplayBuffer[4] = nMinute % 10 ;
g_u8LedDisplayBuffer[5] = '-' ;
g_u8LedDisplayBuffer[6] = nSecond / 10 ;
g_u8LedDisplayBuffer[7] = nSecond % 10 ;
}
然后修改下我们的主函数如下:
void main(void)
{
io_led = 0 ; //发光二极管与数码管共用P0口,这里禁止掉发光二极管的锁存输出
Timer0Init() ;
SetClock(10,20,30) ; //设置初始时间为10点20分30秒
EA = 1 ;
while(1)
{
LedDisplay(g_u8LedDisplayBuffer) ;
RunClock();
}
}
编译好之后,下载到我们的实验板上,怎么样,一个简单的时钟就这样诞生了。
至此,本章所诉就告一段落了。至于如何完成数码管的闪烁显示,就像本章开头所说的那个数码管时钟的功能,就作为一个思考的问题留给大家思考吧。
同时整个LED篇就到此结束了,在以后的文章中,我们将开始学习如何编写实用的按键扫描程序。
[/post
本章所附例程在EE21学习板上调试通过,拥有板子的朋友可以直接下载附件对照学习
“从单片机初学者迈向单片机工程师”之KEY主题讨论第一章按键程序编写的基础
从这一章开始,我们步入按键程序设计的殿堂。在基于单片机为核心构成的应用系统中,用户输入是必不可少的一部分。输入可以分很多种情况,譬如有的系统支持PS2键盘的接口,有的系统输入是基于编码器,有的系统输入是基于串口或者USB或者其它输入通道等等。在各种输入途径中,更常见的是,基于单个按键或者由单个键盘按照一定排列构成的矩阵键盘(行列键盘)。我们这一篇章主要讨论的对象就是基于单个按键的程序设计,以及矩阵键盘的程序编写。
◎按键检测的原理
常见的独立按键的外观如下,相信大家并不陌生,各种常见的开发板学习板上随处可以看到他们的身影。
总共有四个引脚,一般情况下,处于同一边的两个引脚内部是连接在一起的,如何分辨两个引脚是否处在同一边呢?可以将按键翻转过来,处于同一边的两个引脚,有一条突起的线将他们连接一起,以标示它们俩是相连的。如果无法观察得到,用数字万用表的二极管挡位检测一下即可。搞清楚这点非常重要,对于我们画PCB的时候的封装很有益。
它们和我们的单片机系统的I/O口连接一般如下:
对于单片机I/O内部有上拉电阻的微控制器而言,还可以省掉外部的那个上拉电阻。简单分析一下按键检测的原理。当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平); 当按键S按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平) 。这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。结论:我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。一切看起来很美好,是这样的吗?
◎现实并非理想
在我们通过上面的按键检测原理得出上述的结论的时候,其实忽略了一个重要的问题,那就是现实中按键按下时候的电平变化状态。我们的结论是基于理想的情况得出来的,就如同下面这幅按键按下时候对应电平变化的波形图一样:
而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动,尽管这个时间非常的短暂,但是对于我们执行时间以us为计算单位的微控制器来说,
它太漫长了。因而,实际的波形图应该如下面这幅示意图一样。
这样便存在这样一个问题。假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个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 )的那种,有一个小液晶屏,还有四个按键,功能是时钟,闹钟以及秒表。在调整时间的时候,短按+键每次调整值加一,长按的时候调整值连续增加。小的时候很好奇,这样的功能到底是如何实现的呢,今天就让我们来剖析它的原理吧。?机,好像是很古老的东西了
状态在生活中随处可见。譬如早上的时候,闹钟把你叫醒了,这个时候,你便处于清醒的状态,马上你就穿衣起床洗漱吃早餐,这一系列事情就是你在这个状态做的事情。做完这些后你会去等车或者开车去上班,这个时候你就处在上班途中的状态…..中午下班时间到了,你就处于中午下班的状态,诸如此类等等,在每一个状态我们都会做一些不同的事情,而总会有外界条件促使我们转换到另外一种状态,譬如闹钟叫醒我们了,下班时间到了等等。对于状态的定义出发点不同,考虑的方向不同,或者会有些许细节上面的差异,但是大的状态总是相同的。生活中的事物同样遵循同样的规律,譬如,用一个智能充电器给你的手机电池充电,刚开始,它是处于快速充电状态,随着电量的增加,电压的升高,当达到规定的电压时候,它会转
换到恒压充电。总而言之,细心观察,你会发现生活中的总总都可以归结为一个个的状态,而状态的变换或者转移总是由某些条件引起同时伴随着一些动作的发生。我们的按键亦遵循同样的规律,下面让我们来简单的描绘一下它的状态流程转移图。
下面对上面的流程图进行简要的分析。
首先按键程序进入初始状态S1,在这个状态下,检测按键是否按下,如果有按下,则进入按键消抖状态2,在下一次执行按键程序时候,直接由按键消抖状态进入按键按下状态3,在此状态下检测按键是否按下,如果没有按键按下,则返回初始状态S1,如果有则可以返回键值,同时进入长按状态S4,在长按状态下每次进入按键程序时候对按键时间计数,当计数值超过设定阈值时候,则表明长按事件发生,同时进入按键连发状态S5。如果按键键值为空键,则返回按键释放状态S6,否则继续停留在本状态。在按键连发状态下,如果按键键值为空键则返回按键释放状态S6,如果按键时间计数超过连发阈值,则返回连发按键值,清零时间计数后继续停留在本状态。
看了这么多,也许你已经有一个模糊的概念了,下面让我们趁热打铁,一起来动手编写按键驱动程序吧。 下面是我使用的硬件的连接图。
硬件连接很简单,四个独立按键分别接在P3^0------P3^3四个I/O上面。
因为51单片机I/O口内部结构的限制,在读取外部引脚状态的时候,需要向端口写1.在51单片机复位后,不需要进行此操作也可以进行读取外部引脚的操作。因此,在按键的端口没有复用的情况下,可以省略此步骤。而对于其它一些真正双向I/O口的单片机来说,将引脚设置成输入状态,是必不可少的一个步骤。 下面的程序代码初始化引脚为输入。
void KeyInit(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
#define KEY_VALUE_4 0x07
#define KEY_NULL 0x0f
下面我们来编写按键的硬件驱动程序。
根据第一章所描述的按键检测原理,我们可以很容易的得出如下的代码:
static uint8 KeyScan(void)
{
if(io_key_1 == 0)return KEY_VALUE_1 ;
if(io_key_2 == 0)return KEY_VALUE_2 ;
if(io_key_3 == 0)return KEY_VALUE_3 ;
if(io_key_4 == 0)return KEY_VALUE_4 ;
return KEY_NULL ;
}
其中io_key_1等是我们按键端口的定义,如下所示:
sbit io_key_1 = P3^0 ;
sbit io_key_2 = P3^1 ;
sbit io_key_3 = P3^2 ;
sbit io_key_4 = P3^3 ;
KeyScan()作为底层按键的驱动程序,为上层按键扫描提供一个接口,这样我们编写的上层按键扫描函数可以几乎不用修改就可以拿到我们的其它程序中去使用,使得程序复用性大大提高。同时,通过有意识的将与底层硬件连接紧密的程序和与硬件无关的代码分开写,使得程序结构层次清晰,可移植性也更好。对于单片机类的程序而言,能够做到函数级别的代码重用已经足够了。
在编写我们的上层按键扫描函数之前,需要先完成一些宏定义。
//定义长按键的TICK数,以及连发间隔的TICK数
#define KEY_LONG_PERIOD 100
#define KEY_CONTINUE_PERIOD 25
//定义按键返回值状态(按下,长按,连发,释放)
#define KEY_DOWN 0x80
#define KEY_LONG 0x40
#define KEY_CONTINUE 0x20
#define KEY_UP 0x10
//定义按键状态
#define KEY_STATE_INIT 0
#define KEY_STATE_WOBBLE 1
#define KEY_STATE_PRESS 2
#define KEY_STATE_LONG 3
#define KEY_STATE_CONTINUE 4
#define KEY_STATE_RELEASE 5
接着我们开始编写完整的上层按键扫描函数,按键的短按,长按,连按,释放等等状态的判断均是在此函数中完成。对照状态流程转移图,然后再看下面的函数代码,可以更容易的去理解函数的执行流程。完整的函数代码如下:
void GetKey(uint8 *pKeyValue)
{
static uint8 s_u8KeyState = KEY_STATE_INIT ;
static uint8 s_u8KeyTimeCount = 0 ;
static uint8 s_u8LastKey = KEY_NULL ; //保存按键释放时候的键值
uint8 KeyTemp = KEY_NULL ;
KeyTemp = KeyScan() ; //获取键值
switch(s_u8KeyState)
{
case KEY_STATE_INIT :
{
if(KEY_NULL != (KeyTemp))
{
s_u8KeyState = KEY_STATE_WOBBLE ;
}
}
break ;
case KEY_STATE_WOBBLE : //消抖
{
s_u8KeyState = KEY_STATE_PRESS ;
}
break ;
case KEY_STATE_PRESS :
{
if(KEY_NULL != (KeyTemp))
{
s_u8LastKey = KeyTemp ; //保存键值,以便在释放按键状态返回键值
KeyTemp |= KEY_DOWN ; //按键按下
s_u8KeyState = KEY_STATE_LONG ;
}
else
{
s_u8KeyState = KEY_STATE_INIT ;
}
}
break ;
case KEY_STATE_LONG :
{
if(KEY_NULL != (KeyTemp))
{
if(++s_u8KeyTimeCount > KEY_LONG_PERIOD)
{
s_u8KeyTimeCount = 0 ;
KeyTemp |= KEY_LONG ; //长按键事件发生
s_u8KeyState = KEY_STATE_CONTINUE ;
}
}
else
{
s_u8KeyState = KEY_STATE_RELEASE ;
}
}
break ;
case KEY_STATE_CONTINUE :
{
if(KEY_NULL != (KeyTemp))
{
if(++s_u8KeyTimeCount > KEY_CONTINUE_PERIOD)
{
s_u8KeyTimeCount = 0 ;
KeyTemp |= KEY_CONTINUE ;
}
}
else
{
s_u8KeyState = KEY_STATE_RELEASE ;
}
}
break ;
case KEY_STATE_RELEASE :
{
s_u8LastKey |= KEY_UP ;
KeyTemp = s_u8LastKey ;
s_u8KeyState = KEY_STATE_INIT ;
}
break ;
default : break ;
}
*pKeyValue = KeyTemp ; //返回键值
}
关于这个函数内部的细节我并不打算花过多笔墨去讲解。对照着按键状态流程转移图,然后去看程序代码,你会发现其实思路非常清晰。最能让人理解透彻的,莫非就是将整个程序自己看懂,然后想象为什么这个地方要这样写,抱着思考的态度去阅读程序,你会发现自己的程序水平会慢慢的提高。所以我更希望的是你能够认认真真的看完,然后思考。也许你会收获更多。
不管怎么样,这样的一个程序已经完成了本章开始时候要求的功能:按下,长按,连按,释放。事实上,如果掌握了这种基于状态转移的思想,你会发现要求实现其它按键功能,譬如,多键按下,功能键等等,亦相当简单,在下一章,我们就去实现它。
在主程序中我编写了这样的一段代码,来演示我实现的按键功能。
void main(void)
{
uint8 KeyValue = KEY_NULL;
uint8 temp = 0 ;
LED_CS11 = 1 ; //流水灯输出允许
LED_SEG = 0 ;
LED_DIG = 0 ;
Timer0Init() ;
KeyInit() ;
EA = 1 ;
while(1)
{
Timer0MainLoop() ;
KeyMainLoop(&KeyValue) ;
if(KeyValue == (KEY_VALUE_1 | KEY_DOWN)) P0 = ~1 ;
if(KeyValue == (KEY_VALUE_1 | KEY_LONG)) P0 = ~2 ;
if(KeyValue == (KEY_VALUE_1 | KEY_CONTINUE)) { P0 ^= 0xf0;}
if(KeyValue == (KEY_VALUE_1 | KEY_UP)) P0 = 0xa5 ;
}
}
按住第一个键,可以清晰的看到P0口所接的LED的状态的变化。当按键按下时候,第一个LED灯亮,等待2 S后第二个LED亮,第一个熄灭,表示长按事件发生。再过500 ms 第5~8个LED闪烁,表示连按事件发生。当释放按键时候,P0口所接的LED的状态为:
灭亮灭亮亮灭亮灭,这也正是P0 = 0xa5这条语句的功能
这位大大提供!转载请注明:
来自eehome!
红金龙吸味 在线
级别: 论坛版主
UID: 50410
精华: 14
发帖: 242
电子币: 481 元 威望: 180 点
贡献值: 1 点
交易币: 0
在线时间: 806(时)
注册时间: 2009-04-28 最后登录: 2010-04-20
范文五:指导学生写有深度的文章
…
…
…
…
…
…
…
…
越
指 导学 生写有 深 度 的文章
浙 江 省温岭 市之 江高级 中学 朱 于新
摘
要: 高考作文评分标准设置 “ 发展 等级” 旨在 鼓励 考生写 出深刻透彻 的文章 , 出有创见 、 , 写 有个性
的文章 。 这就对高 中作 文教 学提 出了更高的要 求。 本文从 认真观察 , 勤于思考; 注重立意, 深刻新颖 ; 心胸宽
广, 彰显大气等方面阐述 了指导学生把 文章写深刻的问题 。
关 键 词 : 文教 学 作 文章深刻 途 径 策略
高考作文评分标准设置“ 发展 等级 ” 旨在鼓励 , 考生写出深刻透彻 的文章 , 出有 创见 、 写 有个性 的 文章。这就对高 中作文教学提出了更 高的要求 。 那 么, 在平时的作 文训练 中如何指导学生写有深度 的
文章呢?
他们大胆的说出心里话 , 这就会激发他们 的写作热 情。 又如《关 系” “ 就是 生产力》 班 门弄斧辩》 《 这类题 目, 很能触动学生的是非心理 。“ 用关 系来 走天下 ,
而 不 是 靠 本 事 , 是 哪 里 的 道 理 ? ” 弄 斧 为 什 么 不 这 “
能到班门? 一种反对当前 的歪风邪气 、 ” 反对 旧的传 统观念 的情 绪油然 而生 , 写作冲动产 生了 , 学生 自
一
、
认 真 观 察 。 于 思 考 勤
然有兴趣写作了。
2抓 住 关 注 热 点, 生 写作 . 催
“ 事 洞 明 皆 学 问 , 情 练 达 即文 章 。” 世 人 只要 认
真观察 , 勤于思考 , 生就能从悬崖 峭壁里顽强 生 学 长的树 木中感受到生命 的力量和不可遏制的生机 ; 观蚂蚁捕食 , 就能体会 到蚂蚁 的执 著 ; 看飞蛾扑火 , 就会感 觉到它对光 明追求 的坚定与执著 。生活 中,
只 要 认 真 观 察 , 于 思 考 , 于 发 现 , 能 随 时 得 到 勤 善 就 启 迪 , 至 可 以窥 见 到 事 物 的 哲 理 , 此 , 生 的 作 甚 如 学 文 就 会 更 上 一层 楼 。
随 着 互 联 网 的 普 及 ,学 生 的 见识 日益 增 长 , 自
我 意识 也不 断强 化 ,有关他们 自身发 展的关注心
理 、 任 心理 也 日益 强 烈 。教 师 应 注 意 学 生 圈里 的 责 热 点 问 题 , 点 话 题 , 出 一 些 题 目供 学 生 自 由选 焦 拟
择作文 , 这样 既有利于写作 , 又有利于素质教育 , 引
导学生 向健康的方向发展。 例如 : 当班干部弊大利 《
于吗?》 读书与就业》 谈学生的早恋》 关于“ 星 《 《 《 追
1 . 质疑心理 , 抓住 激发思考
在 学 习生 活 中 ,学 生 必 然 会 遇 上 许 多 疑 难 问
族” 的思考 》 , 等 这类题 目涉及 的问题 , 几乎所有学
生 都关 注过
、 考过 。 思 同学 们 选 我 当 干部 , 什 么父 为
题, 许多是非难 辨的事物 , 这必然 会引起他们 的思 考和争辩。随着年龄的增 长 , 学生的独立性思维增 强, 这表 现在他们不愿盲从 , 自己的见解。 有 针对这
一
母 却反对 ? 有学问的人 , 为什么有的流芳百世 , 的 有 却遗臭万年 ?身边的 同学早恋 了, 我们该怎样对待 呢?什么才是 真正的“ ?对待 “ 应该有什么正 星” 星” 确 的态 度等 。这类问题 已不单是作文问题 了, 而是 关系到学生怎样成长 、怎样成功的切身利益问题 。 这类作 文, 学生乐于关 注 , 乐于讨论 , 写起来 自然 轻 松得多。 甚至我们还可以把学生对 自我成长的关注
心 理 特 点 , 师 可 以 出一 些 学 生 希 望 解 决 而 又 有 教
探讨价值的疑难 问题 , 供他们讨论 。 考试成绩是 如“
衡量学生的唯一标准吗” 是一个经常 困扰学生的问
题 , 生 有 不 同 的看 法 , 言会 很 积 极 , 师 可 以让 学 发 教
语 文 考 试 碍 霓
2 1 第 1 、2 合 刊 0 0年 11 期
…………。
引 入 到 对 国家 、 会 的关 注 上 来 。 样 , 拓 宽 了 写 社 这 既
寨
即对社会来 讲 , 既需要 具有特殊 才能 的专 家 , 义需 要各行各业 的建设人才 。 用辩证 的观点去分析这则 材料. 论证在社 会生活 中广与博 的关系 , 显然 芟 比 前面 的立意准确得多 , 深刻得多 。
作面 , 又有 利于培养学生正确 的世界观 , 树立“ 以天
下 为 已任 ” 的理 想 。
二、 重立意 , 注 深刻 新 颖
2立 意 的 现 实性 .
其实作文立意是否深刻, 首先不是写作技巧 问 题, 而是认识水平问题。 深刻 的思想, 有 才能在作文
中写 出 深 刻 的 见解 。 先 能 “ 人 所 未 见 , 人 所 未 首 见 发 发 ” 写 出 “ 人 心 中 皆有 , 人 笔 下 俱 无 ” 意 思 来 , 人 人 的
有 的学生写作 文经常谈 “ ” 外” 洋洋洒洒 古 论“ , 千余字 , 而最终 没有 落脚 到“ 上 。 今” 如作 文题《 先天 下之 忧而忧 , 天下之乐 而乐》 如果 不分析 “ 忧 后 , 先
后 乐 ”这 种 民族 优 秀传 统 在 历 史 上 的 继 承 和 发 扬 ,
对学生来 说 , 这就是深刻 了。 见就是发现 , 就是创造 从平凡的生活 中发现 了美 , 普通事物 中洞见 了其 从
本质 意 义 , 比一 般 人 观 察 得 细 , 究 得 深 , 磨 得 研 琢
不去论证在今天 四化建 设 、 改革大业 中所起 的作用
和全新的含义 , 却着 眼 于挽 救 国运 的危 , 以诸 葛
亮 、 飞 、 天 祥 等 人 为 主 要 材 料 ,
赞 前 人 , 么 岳 文 力 那
透, 这是 主题逐渐深刻 的一个思 维过程 , 是符 合写
作 的 一 般 规 律 的 。 立 意 还 必 须 是 鲜 明 的 , 就 是 说 也
尽管 满纸史实英 名 , 却毫不 触及时事 , 既不准 又不
新 , 难以写出好文章 的。我们都知道 , 章是社 是 文
你 赞 成什 么 , 对 什 么 , 须 让 读 者 清 楚 地 感 受 到 。 反 必
会生活的载体 。白居易说 :文章合 为时而著 , “ 歌诗 合为事而作。 立意要针对 当前 的现实有感而发 , ” 要 把握时代的脉搏 , 现代人的思想认识 中去选取符 从 合时代精 神的本质方面 , 这样 才能给人们较多 的启 迪 和教益。因此 , 师引导学 生养成对社会时事热 教
点关 注 和思 考 的 习惯 显 得 尤 为 重 要 。
3 立意 的深 刻 性 .
立意鲜 明的关键就 是要从 自身感受最深 的一 点打
开思路 , 后 以此为契 机进行深 入思考 , 然 以求 对 材
料和问题 的认识进入 比较深的层次。 然后将其融于 笔端 , 透过字里行间 , 传达给读者 , 之产 生强烈 再 使
的情 感 共 鸣 。
1 意 的 准 确性 . 立
立 意的准确性 即选取最 佳切合 材料 的 内蕴本
质 的方面 , 除太泛 、 窄 、 实 、 虚或偏 离等不 排 太 太 太 恰 切 的 立 意 角 度 。有 一 则 材 料 : 晋 著 名 的 书法 家 东
想 要 文章 写得 深 刻 , 要 辩 证 分 析 问 题 。 德 国 需
哲学家康德 曾经指 出 ,当我们用理性探讨世 界时 ,
常常 会 陷 入 不 可 解 决 的 自相 矛 盾 之 中 。 就 需要 辩 这
王羲之看到一个烙饼的姑娘 ,烙饼时 手法娴 熟, 效 率很高。他睹此情景 , 不胜惋惜地 说 :此人如果学 “ 书 , 成为一代宗9 竞专此小技 矣!” 可 币, 旁边一位老 太太 听 了此 话 , 以为 然 , 不 接着 说 : 先 生 , “ 天下 之 大 , 品万类 , 干 六行八道 , 率各有所 长 ,岂能 干人一 技乎 ?学 问亦 如此 , 共专一类 , 其他必有偏废 , 天下
畸形 矣 !” 解 这 则 材料 可 以 有 以下 几 个 角 度 : 王 理 就
证法 , 只有辩 证的思维才能揭示事物 的真相 。辩 证 法是宇宙的根本规 律。 辩证分析就是用 辩证 法的基
本 观 点 分 析 客 观事 物 ,就是 要 避 免 片 面 性 议 论 , 避 免静止地看待和分析问题。
首先 , 要避 免说“ 过头话 ” 作 片面议论 。例如 、 《 出去 了》 豁 的学生作文 , 能结合 实际对“ } 去” 豁 { 作 }
了辩 证 的 分 析 , 出 “ 出去 ” 非 莽 夫 的 “ 利 ” 指 豁 并 专 , 普通 人 , 其是青 年一代 , “ 就一番事 业”“
尤 要 成 。要 在 竞 争 中脱 颖 而 出 ”若 没有 一 点 “ 出 去 ” , 豁 的劲 儿 ,
羲 之来说 , 他认 为姑 娘烙饼是 屈才 , 不如学 书法 成
就 更 大 些 ; 从 个 人 发 展 的 角 度 来 说 , 无 可 非 c 就 是 义
的 。 材 料 所 涉 及 到 的 两 个 人 中 , 羲 之 这 个 大 书 法 王
是断难成功的 。论点鲜 明正 确 , 既肯定其 “ 【 豁f 去” | 的勇气 和精神 , 又反 对鲁莽 、 狂妄 、 孤注 一掷 的蛮
干。 是有这样的辩证的分析 , 章说理才透辟 , 正 文 令
人折服。
家无 疑会成 为学生注意 的重点 。 如果我们再思考一
下 老 太 太 的话 , 得 更 有 玩 味之 处 。 社 会 是 一 个 多 觉
面体 , 由诸种 复杂 素 组成 的, 是 如果 大家都 集中
去 攻 一 个 方 面 , 他 方 面 将 失 去 平 衡 , 果 必 然 导 其 结 致“ 下畸形” 天 。那 么 这 篇 文 章 便 有 了另 一 个立 意 ,
其次 , 要用 发展 的眼光分析 问题 , 避免 静止地 看待和分析问题。世界上万事万物都是在运 动 、 发
语 文 考 试 研 究
21 0 0年第 1 、2期合 刊 11
…
…
…
…
…
…
…
…
…
…
0癣 ㈡
轻 的 爱抚 , 有 妈 妈 甜 甜 的 呼 唤 。云 啊 , , 你 到 没 云 那 我 家来 吧 , 来做 我 的姐 姐 。 爸 妈 妈 喜 欢 我 , 一 定 爸 也
会喜欢你的。
展、 变化 中, 我们在论证 一个问题 的时候 , 如果用静
止 的 、 立 的 眼 光 看 待 事 物 , 不 可 能 揭 示 它 的 内 孤 就
在 的本 质的规律 , 就必 然违背事理 , 分析起 来就无 法得出正确的结论 。例 如“ 艰苦奋斗” 这个 口号 , 从 提出到现在已经几十年了。在当前搞 现代 化建 没 , 物质条件得 到很大改 善的时代 , 怎样看 待“ 苦奋 艰 斗” 还要不要发扬“ , 艰苦奋斗” 这个精神呢? 一篇谈 “ 艰苦 奋斗 ” 的学生作 文是这样分析 的 : 同时代 , 不 不同环境条件 下 ,对艰 苦奋 斗各有不 同的要求 , 在
形 式 上 也 不必 强 求 一 致 。 安 时 代 党 中 央是 住 在 窑 延
c你在 高高的 天空漫游 , 时时想 着土地 , . 却 哪
里 的 泥 土 干 涸 了 , 就 毫 不 犹 豫 地 变 成 雨 滴 . 焦 你 把 急 的 大地 滋润 。 D. 不 以 闷雷 为 伴 , 不 以 闪 电 为友 。 闷 雷 牢 你 你
骚 满腹 , 装腔作势 , 闪电怒 目圆睁, 凶神恶熬。你总
是 那 样谦 和 平 易 , 沉稳 重 , 持 着 自己 的本 色。 深 保
E居 高位 , . 切忌 日中无人 ; 处空 中, 必 自命清 何
高。 F有 人 称 颂 我 的轻 盈 , 人 赞 美我 的 绚
丽 , . 有 有
洞里 的, 而倘若 有人非要把人民大会堂修得如窑洞
一
样, 准会 被认 为 是 思 维 不 正 常 。 草 鞋 在 一 定 条 件
下表现 了艰 苦奋斗 , 而深圳 人创 造 了“ 口速度 ” 蛇 ,
在穷 乡僻壤建起一 座现代化 城市 ,尽管 出入有车 , 也是地地道道 的艰苦奋斗。 发扬传统与时代的发展
人说我是无私 的化 身, 有人 给我以谦 逊的 美名。可
谁 知 道我 坚 实的 心 正 被孤 独 淹没 呢 ? 这 位 同 学 从 几 个 不 同的 角 度 对 “ ” 行 思 维 云 进
是统 一的。作者对 “ 苦奋斗” 了历史 的考察 , 艰 作 指
出它的形式会随着时间 的推移 、 条件的不同而发 生
变化 , 导 读 者认 识 到 : 量 是 否 艰 苦 奋 斗 的标 志 , 引 衡 主要 看 处 于艰 难 困苦 之 中 , 否 有 一 种 自强 不 息 的 能
体验 , 或托物 以明理, 或借物以抒情 , 每种感受都有
新发现 , 给人 耳 目一 新 之 感 。
三、 心胸 宽广 。 显大 气 彰
奋斗精神 。 作者用发展 的观点分析说理 , 揭示了“ 艰
苦奋 斗 ” 本 质 特 点 , 有 较 强 的说 服 力 。可 见 , 的 具 只
文章要有大气 魄 , 是要有大见识 , 就 这样才 能 使写 出的文章有品位 , 有高度。而 目前许 多学 生选
材 范 围小 , 琐 碎 碎 , 琐 目光 如 豆 , 胸 狭 小 , 至 显 心 甚
要多讲一些辩证法 ,就能对 问题 的思考更全面 , 更 具体 , 更有说服力 。
4 立 意的 新 颖 性 .
得 十分庸俗 。怎样才能使 学生的作 文写出大气 魄
呢?
苏轼有诗 云:横看成岭侧成 峰, “ 远近高低各 不
首先要求学生做到“ 眼大” 阅读 量大 , : 视野宽 , 生活要充实 。平时要多引导学生 阅读名篇 , 学生 让 从 名家名 人的优 秀作 品透射 出来的“ 大气”中受到 感染 。引导学生多读古今中外名人传记 , 让学 生在 心中树立起一尊尊高大 的形象 , 使他们崇高的人格 成为学生 效法 的榜样 。还要引导学 生关心世 界大 事、 国家大事 、 社会 风云 , 多看报纸和 电视新闻 , 对
自己感 兴 趣 的事 发 表 看 法 , 成 时 评 或 随 笔 。 问 渠 写 “
同。 它提示 了生活中的哲理 , ” 把它借来说 明一种认
识 现象也是恰 当 的, : 即 人从不 同的角度去观察 事
物 , 思 考 问题 , 会 有 不 同 的感 受 和 发 现 。 以对 去 就 所 学 生 进 行 多 角 度 思 维 训 练 既 是 可 行 的 ,又 是 有 效
的。既能满足他们 的好 奇心 , 又能培养他们 的创造
力 。 一 次 , 者 以《 为 题布 置练 习 , 有 笔 云》 要求 每 个 学
生 至 少 写 出 五种 不 同 的感 受 。学 生兴 趣盎 然 , 花 五
八门 , 应有尽有。其 中一位 同学是这样写的 :
A你 在 高空 , 飘 扬 扬 , 忧 无 虑 , 么快 活 , . 飘 无 多 多 么 自由。 没 人 干 涉 , 没人 阻拦 , 来 去 活像 一 个快 乐
的 小天使 , 像 我 们 整 天 陷在 教 室 里 , 在 书 堆 中 , 哪 埋 整 天 整 天 抬 不起 头 呢?
B是 谁 生 了你 ? 又是 谁 抛 弃 了你 ?你 整 天游 游 .
哪得 清如许 , 为有源头活水来” 只要我们多关注社 ,
会 人 生 , 一 点 独 立 判 断 , 人 云 亦 云 , 注 意 思 维 多 不 并 的 角 度 , 能 提 高 认 识 和 思 辩 能 力 , 能 拓 展 思 维 就 就
的疆域 , 就能升 华人生 的境界 , 就能进发 出不落俗
套的真知灼 见 , 出思想新颖独到 的佳作 。高考作 写
文“ 关注社会 、 关注生 活” 的命题 原则, 为胸怀 祖 会 国、 放眼世界的学子 昏下展示思想与才华的足够空
荡荡, 无家可归, 个孤 苦伶 仃的孩子 , 像 没有爸爸轻
话 文 考 试 研 究
21 0 0年第 l 、2期合 刊 11
。 酝 誊 | 试 镌 ; 案 -
恻。
言权 。 站起 来吧 , 王 朔 叫 板 金 庸 一 样 , 出 自我 生 像 舞
其 次 要 引 导 学 生 做 到 “ 大 ” 大 气 的文 章 来 自 心 :
命 的亮点。( 吐出 自足 成虹 霓》 《 ) 这些 余意无 穷的结尾 , 的以涛 作结 , 有 文采 斐
然 ; 的 引 用 名 言 , 含 哲 理 ; 的 用 设 问 反 问 句 有 饱 有
精神世界 的博大丰富。 教师应该教育学生心 胸要 宽 广 , 能追 求真理 , 尚正 义 , 要 崇 志存 高远 , 不要让学
生一 味沉 溺 于 个 人 得 失 的 小 天 地 里 。 为语 文 老 师 作
式, 增强语势 ; 的用感叹句 , 有 以情 动人……种种方 式 , 一而足 , 不 但其 共问点都 是给 阅读 者 留下 了想
象 的余 地 , 人 人 胜 , 人 寻 味 , 引 耐 显得 大 气 。
有 责任在 自己的教 学 中 , 学生 感受 “ 家” 风 让 大 的
范。 文 课上 , 卜 要i 学生反 复诵读慷慨 、 大气 的诗
句 , 曹操 的 “ 如 老骥 伏 撕 , 在 千 里 ” 李 清 照 的 “ 志 , 生 当作 人 杰 ,死 亦 鬼 雄 ” ,坼 飞 的 “ 志 饥 餐 胡 虏 壮
作文教学 既无定法 , 又有 “ 可依。写作水平 法”
的提 高 是 一 个 渐 进 的积 累 过 程 , 免 会 出 现 一 些 问 难 题 , 阕此 高 中 作 文 教 学 始 终 是 一 个 非 常 艰 辛 的 过 程。 只要 教 师 指 导 学 生 根 据 自 己的 实 际情 况 , 读 、 多 多 看 、 想 、 练 , 之 以恒 , 多 多
持 日积 月 累 , 么 , 生 那 学
的综 合 能 力 会 得 到 逐 步 提 高 , 想 境 界 也 会 得 到 提 思
肉” 鲁迅 的“ 以我 m荐轩辕 ” 毛泽 东的“ , 我 , 问苍茫
大地 , 主沉 浮” 。学生胸 中充盈着 豪壮 之气 , 谁 等 作
文 时 “ 气 ” 会 自然 流露 , 段 时 间 积 累 之 后 , 大 就 一 作 文就 会 拥 有 大 气 魄 。
另 外 , 些 学 生 在 作 文 时 往 往 在 开 头 和 r 间 花 有 { 1
升 , 定 能 写 出有 深 度 , 个 性 , 文 采 , 且 有 较 一 有 有 并 高 格 调 和 品位 的文 章 来 :
费了不少 的T 夫 , 而结尾却 草草收兵 , 果使文章 结 黯然失色 。好 的文章加上好 的结 尾 , 恰似佳人 回眸
一
笑, 能使人 回味无穷 。六此作文 时, 【 j 除了开头和中
间 的独 具 匠 心 外 , 还要 注 意 结 尾 的 精 雕 细 琢 。李 渔 曾说 :终 篇 之 际 , 以 媚语 摄 魂 , 之 执 笔 留连 , “ 当 使 若
参 考 文献
[ 1 麦坚, 高考作 文发展 等级达标 [ , 家 出 M]作
版 社 ,0 9 20 。
难遽别” 。所 谓 “ 滑 ” 即富 有 文 采 、 蕴 深 刻 的 语 媚 , 意 言 。 如 以 下学 生作 文结 尾 :
[] 2 朱艳 华 , 高考作 文获得发展 等级 分的 策略
[ 作 文教 学研 究 ,07 5 。 j , 2 0 ( )
扬起 生命 之帆 , 让涛声为伴 奏 , 扯缆 绳作琴 弦 ,
掬 劲 风 当号 角 , 奏一 曲超 越 时 空 的 乐 声 , 石 间 , 礁 狂
L: 3 崔巍 嵩 , 文 深刻 方 法例 谈 [] 新 高考 , 作 J,
2 8(1 00 2)
风里 , 我张 开双臂 , 用沸腾的流着我热血 的心 , 拥抱
博 爱— — 紧 紧地 — — 一 生无 悔 《 起 生命 之 帆 》 扬 : 陆 游 曾说 :谁 能养 气塞 天 地 , 出 自足 成 虹 霓 。 即 “ 吐 ” 使 你 没 有 博 大 的 思 想 。但 你 有 意 识 , 就 拥 有 了发 也
( 上接 第 4 7页 )
4 刘玉梅 , 文立 意如何 鲜 明深刻 [] 山西 ] 作 J,
教 育 ,09 8 。 20( )
5 李 因林 , 文 必须这样 “ ] 作 深刻” []语 文 吗 J,
教 学 通 讯 ,0 9 1 。 20( )
哀伤 的情调 , 没有 以物 喻人 , 比如君 子好 比温 润之 玉 , 贞之士 如同傲雪之 松竹梅 , 坚 隐逸 高洁者 就像
淡 然 之 菊 这 样 的 民族 共 同 审 美 情 趣 , 面对 红 叶 , 只 怕 想 到 的 是 如 何 做 标 本 ,如 何 研 究 红 色 的 形 成 , 那
的息 想 。” 是 中 国文 化 中 “ 宙 观 ” 这 宇 。文 巾还 提 到 : “ 天坛 建筑 群 的一 个 突 特 征 是 大 置 团的 造 型 。
闼
丘、 皇穹 宇 、 祈年殿都是圆形 , 每一个建筑又形成很
多 同 心 圆 、 直扩 展 到 与 穹 降 形 的 犬 空 成 为 一 个 圆 一 融 的 整 体 。 这 是 因 为 :在 中 国 代 美 学 中 , 代 表 ” “ 着 生 命 流 转 , 含着 宇 宙 万 物 , 现 了 一 种 “ 行 蕴 体 天
岂不索然寡味 ?没有 虚实 相生 , 即为有这样 的民 无
族 共 同 审 美 心 理 . 如 何 解 得 《 然 把酒 对 西 山 》 又 悠 捉 到 的 借 景 ( 国 园 林 设 计 中把 远 景 纳 为 同 中一 景 , 中 增 加 了 园 林 的 景 色 变 化 。 明 同 和 颐 和 园 正是 借 了 圆
健” 的思想 以及祥和 的精神 。” 这时 中国文化 的“ 生
命 观” 。人与宇宙 的和谐 , 人与他人的和谐 , 人与 自
身 的 和谐 , 成 了 中 国 “ ” 文化 。 铸 和 的 再 者 , 化 味 儿 是 民 族 的 , 民 族 共 同 的 审 美 文 是
蜿蜒若 驿的西山之景 ,方成就 了世 界名 园的美誉 )
之妙?
千年古都 , 金秋佳 日, 品咂京卷三味 , 感受 民族 文化 , 琢磨读通读懂读透高考语 文北 京卷现代文妙
法 , 甚幸甚。 乐
心理 和情趣 。《 碧云寺的秋色》 一文提到古人悲秋 , 诗篇里是“ 满山红叶 , 尽是离 人眼中血” 那种饱 含着
语 文 耄 谈 蓐 霓 矸
21 0 0年第 1 、2期 合 刊 11
转载请注明出处范文大全网 » 比较有思想深度的文章语文教学