程序 - 天悬星河
欢迎光临:

单片机C程序优化

Post by 天悬星河 2010-7-25 18:41 Sunday

        转者按:本文转自网络,由于经过多方流传,原作者已不可考,如有涉及版权,请联系 http://www.candura.us 注明版权信息。另,转载也要进行很多诸如排版、改错之类的工作,请另外转载尊重原转载者劳动成果。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

        单片机C程序优化对程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化了程序的执行速度,通常会带来代码增加的副作用,很难鱼与熊掌兼得,只能在设计时掌握一个平衡点。

一、程序结构的优化

1、程序的书写结构

        虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰、明...

阅读全文>>

标签: 编程 程序 C语言

0

电类专业(自动化、电气、电子、电力、通信等)的大学四年怎么过

Post by 天悬星河 2010-7-7 14:20 Wednesday

这篇文章是在人人找到的,目前能追溯到的最原始的源地址是:http://blog.renren.com/blog/281657796/475930811
但是原文最下面包含一个腾迅的图片,不敢确定这个是否最原始地址,请作者看到后联系http://www.candura.us声明版权,谢谢~
另:转载也需要做排版之类的工作很辛苦的,希望大家也一并尊重转载者的劳动成果!

以下是原文
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 

        看这篇帖子的,我想都是电子爱好者或电类专业学生。不知道大家都处于什么一个阶段,这篇帖子是写给入门者的,要解决一个问题:初学者应重点掌握什么电子知识,大学阶段如何学习?   先说点貌似题外的东西——3个谬论。  

         谬论一: 高中老师常对我们说,大家现在好好学,考上了大学就轻松了,爱怎么玩怎么玩。这真是狗屁。别的专业我不好说,电气、电子、电力、通信、自动化等电类专业,想要轻松那是不可能地(当然你是天才就另说),专业课上讲的东西对决大多数人来说那是云里雾里,从来都是一知半解,需要你课下大量时间精力地消化。有些东西甚至需要你若干年后在工作中遇着时才回过味:“哦,原来以前学的那东西是干这使的。”你要能想得起,并知道怎么回头去补,就算是上学时专业课学得很扎实了。  

         谬论二: 填志愿时经常有人对我们说:专业不重要,学校最重要,进了个好学校想学什么再学。这亦是狗屁。进了学校,本专业的课程就可能会压得你喘不过气来,还有多少人有时间和毅力选修第二专业?而所学专业几乎就是决定了你今后一生的职业生涯。而学校,说实在话本科阶段我觉得从老师那学到的东西各校间差别不是很大。课上讲的大同小异,课下也不会有什么好老师给你单独指导和点拨,若能遇着,那是你的幸运。越牛的学校的越牛的老师就越忙,不要指望他们会在教学上花多少心思,更不要指望他们对你另眼相看。反倒是一些普通院校的小老师们可能跟学生走得更近,辅导更多些,虽然他们可能水平一般,但对于你大学的学习来说还是足够的。综上所述,我觉得对于一个电子爱好者来说,成为一名普通重点大学的电子系学生比成为北大的哲学系学生更重要。当然看帖的应该大多数都是学电的,那恭喜你,这个专业不错的,虽不是什么“朝阳产业”,但绝对是个“常青行业”。  

         谬论三: 上了大学,可能又有不少人对你说,在大学专业不重要,关键的是学好计算机和英语,这样就不愁找不到好工作了。这也是屁话。你要明确一点:你将来不是纯靠英语吃饭的,也不是做编程、搞软件开发或动画创作的。我是想说:若果你性格偏内向沉稳、肯钻研、爱好电子行业,将来想从事电子设计和研发工作,那你一定要学好专业课。当然英语也很重要,但以后工作中用得多的是你的专业英语,即能读懂英语技术文档,而不是跟别人比你口语多正宗多流利。至于计算机,那就是一工具,不要花太多时间去学photoshop、3dmax、Flash、网页制作等流行软件,这些在你今后的工作中用不着,也会牵扯你大量时间精力。好钢用在刀刃上,多进进实验室多搭搭电路吧。当然,电类学生对电脑也有特殊要求,那就是用熟Protel、Multisim,学好汇编语言、C语言、选学PLD相关软件。任务也是很重的。  

        以上说了3个谬论,下面言归正传吧。那么进了大学,读了电类专业,这4年你该学些什么呢?  

 1. 大一大二(打基础)   

        首先要了解:电类专业可分为强电和弱电两个方向,具体为电力工程及其自动化(电力系统、工厂供变电等)专业属强电,电气工程及其自动化以强电为主弱电为辅,电子、通信、自动化专业以弱电为主。其他更进一步的细分要进入研究生阶段才划分。但无论强电还是弱电,基础都是一样的。  

        首先高数是要学好的,以后的信号处理、电磁场、电力系统、DSP等不同方向的专业课都用得着。  

        专业基础课最重要的就是电路分析、模拟电路、数字电路。这3门课一定要学好。这3门课一般都是大一下学期到大三上学期开设,对大多数对电子知识还了解不多的同学来说,通常是学得一知半解,迷迷糊糊。所以,最好是在开课之前或是开课的同时读一两本通俗浅显的综合介绍电子知识的书籍,对书中的知识你不需要都懂,能有个大致感觉就行。对这这种入门读物的选择很重要,难了看不懂可能兴趣就此丧失或备受打击,反而事与愿违。在此推荐一本《电子设计丛零开始》(杨欣编著,清华大学出版社出版),该书比较系统全面地介绍了电子设计与制作的基础知识,模电、数电、单片机、Multisim电路仿真软件等都有涉及,一册在手基本知识就差不多了,关键是浅显易懂,有一定趣味性。另外科学出版社引进出版的一套小开本(32开)电子系列图书也不错,是日本人写的,科学出版社翻译出版,插图较多,也较浅显,不过这一系列分册较多,内容分得较细。  

         除了看书,还要足够重视动手实践。电路、模电、数电这些课程进行的同时都会同时开设一些课程试验,珍惜这个动手机会好好弄一弄,而不要把它当作一个任务应付了事。跟抄作业一样,拷贝别人的试验结果在高校中也是蔚然成风,特别是几个人一个小组的实验,那就是个别勤奋好学的在那折腾,其他人毫不用心地等着出结果。我只想说,自己动手努力得来的成果才是甜美的,那种成就感会让你充实和满足。游手好闲的,到临近毕业找工作或在单位试用时,心中那种巨大的惶恐会让你悔不当初。这种教训太多了,多少次我们都是蹉跎了岁月才回过头来追悔莫及。除了实验课好好准备好好做之外,许多学校都设有开放性实验室,供学生平时课余自觉来弄弄。珍惜这种资源和条件吧,工作后不会再有谁给你提供这种免费的午餐了。当然有些学校没有这么好的条件,或缺少器件,那同学们就在电脑上模拟一把试验平台吧,就是学好用好Multisim软件。Multisim是一种电路仿真软件,笔者上学时叫做EWB,后来随着版本更新,先后更名为Multisim2001、Multisim7、Multisim8。这个软件可模拟搭建各种模拟电路和数字电路,并可观测、分析电路仿真结果。大伙可以把模电、数电中学习的电路在这软件里面模拟一下,增加感性认识,实验前后也可把试验电路在软件里模拟,看跟实际试验结果有多大差别。可以说,只要你是学电的,这个小软件就是你上学时必须掌握的,对你的学习助益很大。另一个必须掌握的软件那就是protel了。上学时,从小学期的综合设计实验到毕业设计,最后都会要求你用Protel绘出设计的电路原理图和PCB版;工作后,Protel也是你必须掌握的基本技能,部分同学毕业后一两年内的工作,可能就是单纯地用这软件画板子。Protel的版本也走过了Protel98、Protel99、Protel99SE、ProtelDXP、Protel2004的发展道路。Protel99SE、ProtelDXP、Protel2004这三个版本现在用得最多,目前许多学校教学或公司内工程师使用的都还是Protel99SE,当然若作为新的自学者直接从Protel2004学起似乎好一些。综上所叙,作为最基本的EDA(电子设计自动化)软件,Multisim和Protel是所有电类学生在上学时必须掌握的。其他的如Pspice、Orcad、SYstemview、MATLAB、QuartusII等等,需根据不同的专业方向选学,或是在进入研究生阶段或工作后在重点学习使用。那Multisim和Protel好学么?入门应该问题不大,让师兄师姐指导指导,或是找一两本入门书看一看就OK了。这里推荐一本《电路设计与仿真——基于Multisim 8与Protel 2004》(也是杨欣编著,清华社出版),作为这两款软件的入门学习挺不错的,关键是一本书包含了两款软件学习,对穷学生来说比较划算,若是花钱买两本书分别去学这两个软件,就不值了,因为Multisim的入门不是很难。另用Protel画PCB电路板学问挺大的,有必要多看一些技术文档或是买一本高级应用类的图书。  

 2.大三大四(学习专业课,尝试应用)   

        进入大三,就涉及到专业课的学习了,本文只讨论以应用为主的专业课,其他如《电力系统分析》、《电机学》、《自控原理》、《信号与处理》、《高电压》、《电磁场》等等以理论和计算为主的专业课,咱就不多提了。当然这些课对你今后向研究型人才发展很重要,也都很让人头疼,要有建议也只能说是努力学、好好学,懂多少是到少(不过别指望全都懂),以后工作或接着深造用得着时再回过头来接着补接着学,那时有工作经验或接触多了有感性认识,可能学着就容易些了。  

        那以应用为主的专业课又有哪些呢?不同专业方向有不同的课程,很难面面俱到。这里先简单罗列一下,有微机原理与接口技术(也称单片机)、开关电源设计、可编程逻辑器件(PLD)应用、可编程逻辑控制(PLC)应用、变频器应用、通信电路、数字集成电路分析与设计、DSP、嵌入式等等。可能有同学要问:这么多东西,大学阶段要想都学好不容易吧?答案是不仅是不容易,而且是不可能。这些技术每一门展开来都是复杂的一套知识,可以说,你只要精通其中一门,就可以到外边找个不错的工作了。而且在大学阶段,这些课程也不是都要学的,而是针对不同专业方向选修其中几门(具体选哪几门,多研究研究你们各自的专业培养方案,多请教老师),学的时候争取能动基本用法即可,真正的应用和深入是要到工作后的;当然你若很勤奋或有天赋,能熟练掌握某一门达到开发产品的程度,那毕业后找个好工作就轻而易举了。到这里我们需要再明确一点:电子领域知识繁多、浩如烟海,所以一般搞硬件的公司都有较多的员工,一个研发项目是多人细致分工、共同完成的,所以我们经常会听到团队意识这个名词。因为一个人的能力有限,不可能掌握所有的知识。比如一些人专门负责搞驱动,一些人专门从事逻辑设计,一些人专门搞高频无线,一些人专门搞测试,一些人专门设计外壳,一些人专门设计电路板等等。  

 

4 回复:学习自动化专业主要学习哪些 ?  

        看到这里可能有的同学头都大了:那说来说去大学阶段到底究竟应该学些什么呢?说实话写到这里我的头也大了,电子设计涉及方方面面的东西太多了,实在不是一篇文章甚至一本书能说得清楚的。所以我决定剔除这些生涩的课程名目,大致说一下我所认为的一个电类学生或是想要成为电子工程师的自学者应该掌握的基本的专业技能。  

        我认为:除了最初提到的电路分析、模拟电路、数字电路基础知识外,应了解并掌握电子元器件识别与选用指导、基本仪器仪表的使用、一些常用电路模块的分析与设计、单片机的应用、PLD的应用、仿真软件的应用、电路板设计与制作、电子测量与电路测试。  

        电子元器件的识别与使用就不用说了,这是元素级的基础,不过要想掌握好也并不容易,一些电子系学生毕业了,还认不出二极管、三极管实物、分不清电解电容的正负极等等,也不是没有的事。还是一句话,多进进实验室,多跑跑电子市场,多看看书。  

        仪器仪表的使用,大学的实验课中你至少会用过数字万用表,波形发生器、电源、示波器、小电机、单片机仿真机,至少要把这些东西的接线方法和用法弄懂吧。  

        常用电路模块也是包罗万相,各种放大电路、比较器、AD转换电路、DA转换电路、微分电路、积分电路,还有各种数字逻辑单元电路等等,只能说,大致了解吧,并学会怎么去查资料、查芯片查管脚。最基本的,做实验或课程设计中用到的各种芯片要弄熟。  

        单片机,这是应该掌握的。时下单片机种类繁多,但各大小企业用得最多的还是51系列单片机,而且价格便宜、学习资料也最全,故给自学者推荐。当然各学校开课讲的单片机型号会有所不同,没关系,学好单片机编程,学好了一种,再学别的单片机就容易了。  

        PLD(可编程逻辑器件),一种集成电路芯片,提供用户可编程,实现一定的逻辑功能。对可编程逻辑器件的功能设定(即要它实现什么功能)要有设计者借助开发工具,通过编写程序来实现,这跟单片机类似。开发工具可学习Altera公司的Quartus II软件(这是该公司的第4代PLD开发软件,第3代是MAX+PLUS II软件)。编程语言学习硬件描述语言VHDL或Verilog HDL。  

        仿真软件最基本的就是前面说的Multisim了,另外还可学MATLAB。其他的试专业情况选学或是工作后学。电路板设计与制作主要是用Protel软件辅助进行。这在前面已有介绍,读者应该也比较熟悉。  

        最后建议同学们积极与各类电子竞赛赛事,参加一场比赛一个项目做下来,电子设计的一个流程和各环节的基础知识就能串起来了,对知识的融会贯通及今后走向工作岗位都有莫大裨益。

        以上这些东西我说得笼统,深入下去又是一大堆要学的东西。还是那句话,多啃书本、多实践!清华大学出版社有一套“电子电路循序渐进系列教程”是按照上面我所讲的那个思路出的,可惜好像还没出全,现在好像只有《单片机在电子电路设计中的应用》、《电路设计与制板——Proetl应用教程》、《仿真软件教程——Multisim和MATLAB》、《常用电路模块分析与设计指导》几本。另外听听你们老师的意见、师兄师姐的意见,问问他们应读些什么书,当然也不能尽听尽信,翻开一本书我想你先大致看看他讲得是否通俗,自己琢磨着能看懂几分?我想能有5分懂这本书就值得一看了,示自己现阶段的知识情况,太浅显的书不用看了,太深的书也不要去看,看得迷迷糊糊还打击自信心丧失了兴趣。  

        好了,就此停笔吧。本来是要写个书目推荐,可干瘪瘪的罗列一堆书目有什么意义?还是写下这些字,让同学们自己去思考去选择去深入吧,希望能对你们有所帮助。  

        最后一句老生常谈也是我的切肤之痛:大学四年会一晃而过,要学的东西太多太多,不要虚度光阴。及时当努力,岁月不待人!

标签: 大学 抉择 迷茫 程序 C语言

0

屏蔽之源(《寂静之城》节选)

Post by 天悬星河 2010-4-1 17:09 Thursday

        今天是愚人节,还好应该会安然度过。上午无聊时,拿出手机,再看了一遍《寂静之城》,越来越觉得可玩味之处颇多。现在节选出这么一段,大家当做愚人节玩笑也好,当做警示也罢,慢慢玩味。“屏蔽之源”这个名字是自己无聊起的,话说文中的“美国”,似乎跟另一个国家的初级阶段很相似呢。。。以下为其文

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 

  有一次集会,他们谈到了敏感词汇的问题。阿瓦登记得很早的时候——他对这方面的记忆有点模糊——有关部门给出的是一份敏感词汇列表,由网站的内部管理人员秘密参考使用,他对如何演变成现在的局面大惑不解。那一天瓦格纳带了一瓶葡萄酒,兴致很高,于是索性给他们讲了讲“屏蔽”的进化史,身为网管的他经常可以接触到这些资料。 

  在最开始美国政府只是单纯地屏蔽掉敏感词汇,但很快他们就发现这样的措施根本没有用处。很多人会采取在词组中夹杂符号或者数字的方式来绕开系统检查;于是有关部门不得不将这些近似敏感词汇也一一屏蔽掉。然而众所周知,数字与符号之间的组合方式是近乎无限的,只要你有想象力,就完全可以组合出一个新的词组而且不失掉他的原意。比如说“politic”这个词,就有“politi/c”、“政polit/ic”、“pol/itic”等近乎无限种表达方式。 

  当有关部门意识到这个问题时,他们采取了新的策略。既然无法辨识词组,那么就用单词屏蔽。这一举措在一开始是奏效的,违规交谈的人显著减少,但很快人们就发现可以用同音字或者谐音的方式来继续表达自己的危险思想。即使有关部门封掉全部敏感词汇的同音字,也无济于事,思想活跃的美国人充分发挥了自己的想象力,使用隐喻,借代、类比、引申及其他修辞方法,或者将一个敏感词用数个不敏感的字来代替。人类的思维方式要比电脑开阔许多。电脑屏蔽掉一条路,他们还会有更多的路可以选择。 

  这一场水面以下的角力看起来似乎是美国大众要取得胜利。这时候,一个具有逆向思维精神的人出现了。他的身份不明。有人说他是有关部门的主管;也有人说他是因过度使用敏感词汇而被捕的危险人士。无论他是谁,总之整个局面被扭转过来。他向有关部门建议,不再告诉大众禁止说什么,而是规定他们只能说什么,用什么方式去说。有关部门很快就心领神会,制订了新的规章制度:取消了敏感词汇列表,取而代之的是互联网络健康语言列表,并把这举措推广到了日常生活中的语言屏蔽系统中去。 

  这一次,大众终于处于下风。以往他们与有关部门尽情地在网络与现实中捉着迷藏,而现在他们却被有关部门扼住了咽喉。这样一来,有关部门可以有效率地掌握住言论,因为整个语言的框架都被彻底控制了。在有限的空间内,大众几乎是无计可施。 

  尽管如此,大众还是不屈不挠地将这场战争——或者说游戏——继续下去,他们挑选健康词汇列表中的合法字眼来表达不合法的意思:两个连续的“稳定”意思就是“反对”,“稳定”加“繁荣昌盛”则暗示“屏蔽”。美国政府不得不对这一动向保持着警惕,并日复一日地将更多的词汇从健康词汇列表里删掉,禁止大众使用。 

  “当然,这场战争会持续下去的。只要世界上还存在着两个不同的字或者词组,那么就可以继续自由交流——你知道莫尔斯电码吧?” 

  瓦格纳说到这里,拿起茶杯一饮而尽,满意地打了一个嗝。 

  “可是,这场战争的代价就是语言的失落。表达能力会越来越贫乏,越来越淡而无味,人们会越来越倾向于沉默,这对有关部门反而是好事。”兰斯洛特摆出一副忧虑的表情,有节奏地用指关节敲击着桌面,“这样一来,岂不就等于是大众的自由意识将语言推向死亡的边缘?真讽刺啊。按照这个趋势,有关部门是不会败的,他们会笑到最后。” 

  “不,不,笑这种情感他们是不会了解的。”瓦格纳淡淡地回答。 

  “我倒是觉得,美国是一直处于恐惧的情感之中呢,生怕人们掌握了太多的词汇,表达出太多的思想,变的难以掌握。”阿尔特弥斯说完摆出一副她在上班期间冷若冰霜的呆板脸孔,学着僵硬的腔调喊了一句:“营造健康的网络环境,美国万岁!” 

  杜拉丝、兰斯洛特与瓦格纳都哈哈大笑,唯一没笑的是王二(阿瓦登)。他对于兰斯洛特刚才的那句话始终耿耿于怀:大众与有关部门的对抗,其最终结局就是语言的消亡。那么他们现在这个小小的说话会,也只不过是在一列开向悬崖的列车里关上窗帘,享受坠毁前最后的宁静罢了。 

  不过他没有说出口,因为这太煞风景了。阿瓦登不希望破坏说话会的气氛,这对他很重要。

        (节选完)

标签: 政府 网址 程序 和谐 屏蔽

0

艰难出炉的投票系统。。。

Post by 天悬星河 2010-3-26 2:39 Friday

这两天忙得可真的叫做晚了,

特别是昨天弄到凌晨三点多,都没有调试好。

之所以用这个系统还是因为页面比较简单,

ASP代码比较少,方便移植,

但是移植出来总是出一大堆错误,

直到昨天下午(确切的说是前天)才基本成型。

成型了之后在本地调试又出了一大堆问题,

不是代码的问题就是数据库的问题,

以致真正开始录入数据的时候已经挺晚了。

本来以为昨天弄到凌晨应该已经结束了吧,

结果今天发现成型在那却无法投票,

后来发现是服务器和ASP+Access不兼容的问题。

短期内又无法把它改造成SQL数据库的版本,

后来今天捣鼓了一个中午还是搞不定,

只好临时申请了个免费空间上传上去。

晚上已经开始投票之后,

又有要求增加子页的录入数据、更换照片之类的。。。

一直到今晚9点多才算是真真正正的完成。

呼~~ 一个投票系统的出炉道路竟如此曲折。。。。。。。。。

以致于昨天“上堂嗰阵好想训觉”“成日都喺懵神神哏”

以致于今天“训咗一个下午,一起身揍要落去开会”

所以现在累、醉、睡~~~~

标签: 大学 工作 网址 程序

0

纠结的RP问题

Post by 天悬星河 2010-3-11 3:55 Thursday

 

  放假前就在网上盯了一款单片机学习板盯了好久,可是因为一直不方便,所以一直推到这个学期开学了才买。结果RP的悲剧就这样开始了。

  前几天拿到的板子,之所以选择这款板子就是它好在可以直接只用一个USB口就能胜任供电、程序下载的功能,比起最原始的51单片机学习版优势很大。刚收到货,我拿出来小心翼翼的照着测试程序一步一步测试各个模块功能是否正常。后来弄着弄着就出现问题了,下载不了程序,这仅仅是纠结的开始。在QQ上联系客服,申请让他远程协助来测试,结果莫名其妙的能下了。然后断开远程,我自己进行程序下载操作,结果还是弹出错误。后来再次让他在网上远程协助,又能下了。这难不成就是传说中的RP差?!后来摆弄了几次才发现,是我之前下载程序按得太快了,应该缓几秒钟才接电的。之所以在网上用远程协助可以正常下载,就是因为有网络延迟,我接点是已经等待过那几秒了,所以一到网上远程协助就能成功下载。后来在客服的指导下,下载了个最新版本的STC_ISP才解决了这个问题。

  解决完那个问题挺高兴的,毕竟可以开始用,结果过了一会儿又下载不了程序了,用了之前的方法还是解决不了。没办法,后来还是找了客服,在宿舍不像以前在机器人工作室,很多需要的工具材料都没有,检测了半天检测不出问题,后来只好让他再发一块板子过来。今天新的板子到货了,测试了一下,AD模块有问题。晚上详细测试了一下,惊奇的发现老的那块板子又能正常使用了。RP啊,白白多送了一块板子过来,仔细回想,可能是之前更换89C52的时候没有正确插入造成了无法下程序,结果因为这点小失误,白白多做了那么多的无用功,杯具。

  如今,RP问题应该算是得以解决了。之前RP掉了那么多,根据“RP守恒定律”,这段时间会来个RP大爆发,不知道会发生什么好事呢,希望是等下曼联的比赛能顺利晋级吧。唉,真不该在这么晚的时候写东西,写到后面脑乱了就不知说啥了~~

标签: 网络 程序 C语言

0

美化并加密自己的CMD命令行(并使其支持少许Linux命令)

Post by 天悬星河 2010-2-27 1:56 Saturday

  今天闲来无事,不知怎么的心血来潮,想起来要美化一下自己的CMD命令行窗口。后来回忆起很久很久以前看杂志说过可以顺带给他加密、让CMD支持少许Linux下的命令行(因为是用doskey命令来映射的,所以只能支持少许)

  先来看看效果图吧:

点击查看原图

 

  虽说不是什么特别绚丽,至少让它更符合自己的使用习惯了。接下来就说说怎么美化它吧,其实这个很简单,只要写一个BAT文档放在特殊位置就可以了,不过这样用的时候,网上大部分技术文档建议使用“.cmd”后缀,不要紧了,其实就是bat的语法。

  在Windows的注册表中,有一个地方是管理CMD的,在“[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]”这个地方有一个名为“AutoRun”的的字符串值,里面的内容可以是一个批处理,这样的话每次进入“CMD”就会先运行那个批处理,所以做这些美化加密就从那个批处理入手吧。

  那个批处理原文:

@echo off
cls
echo   -----------------------------------------
echo   ☆ .·°∴° ★·°∴°∴°.☆°★°∴°
echo   °∴ 那怕星际无垠 ☆° .·★°∴°.°°
echo   ∴°.°★ .·°∴°.°∴°.★☆° .·
echo   °.☆° 我也要追到你.★· °.°°.★
echo   .·°∴★°.°∴°.☆° .·°∴°.°
echo   .·°∴°★.并永远爱你.°∴·°°∴☆°
echo   ☆ .·°∴° ☆..·°∴★°天悬星河∴·
echo   ∴°★.☆° .☆..·°★.° .·。∴°
echo   -----------------------------------------
echo   现在时间是:%date% %time% 
echo   -----------------------------------------
color 0a

rem===此处用于转换Linux常用命令===

prompt 天悬星河$B$P$G$S
doskey ls=dir
doskey pwd=chdir
doskey clear=cls
doskey mv=move
doskey rm=del

rem===============================

setlocal 
set pass=0 
set times=2 

echo    为安全起见,CMD命令已加密!                                        
:start 
set /p pass=  进入CMD请输入密码: 
if "%pass%" equ "123456"  goto ok    
echo                        密码错误,请重新输入! 
echo   你还有%times% 次机会 

if %times%==0 goto err 
echo                              状态:用户输入密码  验证失败 
set /A times=%times%-1 
goto start 

if "%pass%" neq "123456"  goto err 
:err 
echo  密 码 错 误 !! 
echo    未经授权擅自闯入者请自重。。。                                        
pause 
exit 
:ok 
echo  密 码 正 确 !! 
echo    欢迎使用CMD天悬星河美化版。。。                                        
title 天悬星河 http://www.candura.us
endlocal 

 

  这里面大部分命令都是大家熟悉的,就不多介绍了,只要把那两个if语句中间双引号里面的部分改成自己密码就行了。说说这里面几个特殊的命令吧。

  title 命令:这个命令是用来修改CMD的窗口标题的,使用方法和 echo 一样,在title命令后面加上你想让标题栏显示的内容即可,我这里让它显示“天悬星河 http://www.candura.us”。

  color 命令:这个是用来设置前景色和背景色的,在color后面通常加两个参数,第一个参数是背景色,第二个参数是文字的颜色。具体为: 0.黑色 1.蓝色 2.绿 3.湖蓝色 4.红 5.紫色 6.黄 7.白色 8.灰色 9.浅蓝色 A.浅绿色 B.浅水绿 C.浅红 D.浅紫色 E.浅黄色 F.亮白色。所以我这里面使用“color 0a”显示的效果就是黑色背景,绿色文字。

  doskey 命令:这个命令就是用来做映射的命令,我就是用它来实现让cmd支持少许Linux命令的。它的使用方法是:doskey 新命令=原命令。比如Linux下显示当前文件夹下内容是用“ls”命令,而在CMD下面是用“dir”,那么就设置成“doskey ls=dir”就行。用这个方法还可以自己设置自己喜欢的命令,只要不重复就行。

  prompt 命令:这个命令对于平常很少见,它是用来更改提示符显示的。CMD默认的命令提示符显示的是“路径+大于号”然后右边是用户输入的命令。用这个可以更改,像我这里就改成了“天悬星河+分隔符+路径+加大于号+空格”。详细使用方式及参数如下:

PROMPT [text]
   text    指定新的命令提示符。
提示符可以由普通字符及下列特定代码组成:
   $A    & (短 and 符号)
   $B    | (管道)
   $C    ( (左括弧)
   $D   当前日期
   $E    Escape 码(ASCII 码 27)
   $F    ) (右括弧)
   $G    > (大于符号)
   $H    Backspace (擦除前一个字符)
   $L    < (小于符号)
   $N   当前驱动器
   $P   当前驱动器及路径
   $Q    = (等号)
   $S      (空格)
   $T   当前时间
   $V    Windows 版本号
   $_   换行
   $$    $ (货币符号)
如果命令扩展被启用,PROMPT 命令会支持下列格式化字符:
   $+   根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符,一个推的层一个字符。
   $M   如果当前驱动器不是网络驱动器,显示跟当前驱动器号或空字符串有关联的远程名。

 

利用这个命令可以更加深入的模仿Linux下面命令行的提示符显示方式,在做美化的时候很有用。

  接下来写好自己的cmd文件之后就可以复制到系统文件夹去了,一般复制到 X:\Windows\ 或者 X:\windows\system32\ (其中X为系统所在盘符)就可以了。然后,进入注册表(开始→运行→输入“regedit”后回车),找到“[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]”这个位置,新建一个“AutoRun”的字符串值,里面填写那个文件的完整路径就行,注意文件夹常用的“\”在这里要写成“\\”,像我的就是“C:\\WINDOWS\\system32\\candura.cmd”。

  做好这些之后再运行CMD看看,是不是截然一新了呢!为了方便修改,我自己写了几个批处理和注册表文件,方便进行安装和卸载,在我的博客有下载,大家要修改只要修改 candura.cmd 里面的内容保存,再运行“安装.bat”就可以自动复制并且导入注册表了,卸载的时候运行“卸载.bat”就行了。

附件下载:
美化CMD.zip 118.62KB  下载次数:0

标签: Linux Windows 编程 程序

0

被C语言杯具掉了!

Post by 天悬星河 2010-1-5 15:54 Tuesday

 

  今天上午我们C语言考试,本来呢,我们班大部分同学都是初次接触C语言编程。所以我以为不会考太难的题目,顶多是从书上的原题做些变化给我们抽来做。于是我复习的时候也就是把所有题目做了一遍,结果今天杯具掉了。。。

  考试的方式是,每个人从老师那里抽一道题,题目有难有易,一切看RP。结果!结果!我抽到这样一道题“以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中”,杯具啊!关键是我们考试不是编一个程序传上去,而是调试好之后把源代码抄到信笺上交上去,光抄就够抄一节课了。

我写出来的源代码,要抄写出来,足足抄了满满的五张纸。

  后来上网查了一下原题,是这样的:“函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中; 请编制函数StrOL( ), 其函数的功能是: 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。”题目是源自09年计算机三级网络技术上机题库《南开100题》上面的。

  我就郁闷啊,普通的考试而已,竟然用这种题目,太操蛋了。。。

标签: 编程 程序 C语言

0

高中时构思的一个程序

Post by 天悬星河 2009-11-5 4:48 Thursday

  昨天上C语言上机课的时候,做完了老师要求的几个题目之后,没什么事情了。突然我想起以前高中的时候构思的一个程序,程序很简单,就是一个解一元二次方程的程序。其实,用编程语言来写一个解一元二次方程是很简单的,我写这个主要是想达到一个能带根号输出的目的。

  以前也见过很多数学软件有解一元二次方程的功能,当然,如果有实数解的话没有什么问题,但是倘若判别式开方后是无理数的话,这些软件往往都是输出一长串的无理数。试想一下,这样一串数字能直接抄到作业本上么?高中那时就是想写个能在解为无理数时保留根号输出答案,好方便写在作业本上,编译到手机上去用就方便许多了。

  昨天就完成了这样一个程序,关键是从书上看到了一个可以解决以前思维被卡住的问题的语句。以前想,要是想保留根号输出,判断是否是无理数是一个大问题。现在想想,其实判断很简单的。对于方程 ax^2+bx+c=0 来说,我们输入的a,b,c都已经被要求为正整数,这样的话判别式开方后若为有理数必定是正整数,若为无理数必定是存在小数部分的。这样想就把是否无理数的判断转换成了是否小数部分为零的判断,这样一下子就方便了很多了。C语言里面是可以强制转换数据类型的,这时候只需要把原本开方的结果和开方后强制转换为整形的结果相比较,看看是否为零就知道此判别式开方是否为零了。

  我在程序中是这样判断的:if ((sqrt(d)-(int)sqrt(d))==0) /*说明可以直接输出*/,其中的d为判别式。之前定义了一个字符型变量“genhao”找一个特殊符号来代替根号,我是用的是14(ASCII)——一个音乐的符号(其实关键是打不出根号本身)。后面输出的时候就根据之前的判断输出无解、一个解、两个解(这其中包括有理数解和无理数解两种方式),至于计算的时候为了方便主函数语句的简短写了几个分函数。

=========================================

整体代码如下:

//可以直接写到作业本上的解一元二次方程器
//新增虚数输出
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "stdlib.h"

//求判别式
int dieta(int a1,int b1,int c1)
{
	int d1;
	d1=(b1*b1-4*a1*c1);
	return (d1);
}

//计算X1的值
double thexa(double a2,double b2,double c2,double d2)
{
	double xa;
	xa=((-b2)+d2)/(2*a2);
	return xa;
}

//计算X2的值
double thexb(double a3,double b3,double c3,double d3)
{
	double xb;
	xb=((-b3)-d3)/(2*a3);
	return xb;
}

int main(void)
{
	int a,b,c,d,q,p,tuichu;
	double x1,x2,sqd;
	char genhao=11;/*定义一个根号的符号*/
open:system("cls");
	tuichu=1;
	printf("设一元二次方程为:ax^2+bx+c=0。\n");
	puts("请输入方程中的a,b,c(请先化简为整数):");
	scanf("%d%d%d",&a,&b,&c);
	system("cls");
	if ((a==0)&&(b==0))
	{
		printf("输入错误!\n");
		goto end;
	}
	if (a==0) /*当a=0时表示一次函数*/
	{
		sqd=-((double)c/(double)b);
		printf("此为一次方程,您输入的算式为“%dx+%d=0”。\n",b,c);
		if (sqd-(int)sqd==0) /*直接输出答案*/
		{
			printf("此方程解为:%.0f。\n",sqd);
		}
		else
		{
			printf("               %d\n",-c);
			printf("此方程解为:X= ---\n");
			printf("                %d\n",b);
		}
		goto end;
	}
		printf("您输入的算式为“%dx^2+%dx+%d=0”。\n",a,b,c);
		d=dieta(a,b,c);
		if (d<0)
		{
			printf("此一元二次方程无实数解,其虚数解为:\n");
			printf("(注:答案中的“i”表示虚数单位,-1=i*i)\n");
			sqd=sqrt(-d);
//通过整形和双精度求根的比较判断是否为无理数
			if ((sqrt(-d)-(int)sqrt(-d))==0) /*说明可以直接输出*/
			{
				p=(-b);
				q=(int)sqrt(-d);
				printf("                %d+%di\n",p,q);
				printf("第一个解为:X1= --------\n");
				printf("                 %d\n",a*2);
				printf("                %d-%di\n",p,q);
				printf("第二个解为:X2= --------\n");
				printf("                 %d\n",a*2);
			}
			else
			{
				printf("(注:答案中的“%c”表示根号)\n",genhao);
				printf("                 %d+%c(%d)i\n",-b,genhao,-d);
				printf("第一个解为:X1= -----------\n");
				printf("                    %d\n",a*2);
				printf("                 %d-%c(%d)i\n",-b,genhao,-d);
				printf("第二个解为:X2= -----------\n");
				printf("                    %d\n",a*2);
			}
		}
		else
		{
			if (d==0)
			{
				x1=(double)(-b)/(double)(2*a);
				printf("此方程只有一个解,解为:%.f。\n",x1);
			}
			else
			{
				sqd=sqrt(d);
//通过整形和双精度求根的比较判断是否为无理数
				if ((sqd-(int)sqd)==0) /*说明可以直接输出*/
				{
					x1=thexa((double)a,(double)b,(double)c,sqd);
					x2=thexb((double)a,(double)b,(double)c,sqd);
					if ((x1-(int)x1==0)&&(x2-(int)x2==0))
					{
						printf("此方程解为 %.f和 %.f。\n",x1,x2);
					}
					else if ((x1-(int)x1!=0)&&(x2-(int)x2==0))
					{
						printf("           %d\n",-b+(int)sqd);
						printf("此方程解为 --- 和 %.f。\n",x2);
						printf("            %d\n",2*a);
					}
					else if ((x1-(int)x1==0)&&(x2-(int)x2!=0))
					{
						printf("                  %d\n",-b-(int)sqd);
						printf("此方程解为 %.f 和 ---。\n",x1);
						printf("                  %d\n",2*a);
					}
					else
					{
						printf("%14d%7d\n",-b+(int)sqd,-b-(int)sqd);
						printf("此方程解为 --- 和 ---。\n",x1);
						printf("%14d%7d\n",2*a,2*a);
					}
				}
				else  /*说明要带根号输出*/
				{
					printf("注:答案中的“%c”表示根号\n",genhao);
					printf("                 %d+%c(%d)\n",-b,genhao,d);
					printf("第一个解为:X1= -----------\n");
					printf("                    %d\n",a*2);
					printf("                 %d-%c(%d)\n",-b,genhao,d);
					printf("第二个解为:X2= -----------\n");
					printf("                    %d\n",a*2);
				}
			}
		}
end:printf("\n按c重新计算,输入其他任意字符退出\n");
	tuichu=getch();
	if (tuichu=='c')
	{
		goto open;
	}
	return 0;
}

========================================

  唉,现在才注意到强制转换的实用性,以前看书自学的时候都一直没有注意这个东西。如果早点想到这个的话,在以前高中的时候就写好,编译到手机上用,那就方便太多了(我承认之前想法有点邪恶)。。。

标签: 编程 程序

0