欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 汇编语音程序设计心得体会

汇编语音程序设计心得体会

时间:2019-12-22 04:49

C\\\\C++程序员需要掌握什么书籍

重点推荐C语言四大圣经:《C语言程序设计》、《C和指针》、《C陷阱与缺陷》、《C作家编程》。

其中C语言的发明者K&R的《C程序设计语言》更是重中之重,此书是C语言的第一秘典。

所有优秀程序员的必经之路。

四大圣经及其他优秀书籍的信息:1.《C语言程序设计》K&R清华大学出版社2.《C和指针》POINTERS ON C Kenneth A.Reek、徐波 人民邮电出版社3.《C陷阱与缺陷》Andrew Koenig、 高巍人民邮电出版社4.《C专家编程》Expert C Programming Deep C Secrets Peter VanDer Linden 人民邮电出版社 (2008-02出版)5.《清华大学计算机系列教材•数据结构(C语言版)(附光盘1张)》吴伟民、 严蔚敏清华大学出版社6.《计算机算法设计与分析(第3版)》王晓东电子工业出版社7.《算法艺术与信息学竞赛•算法竞赛入门经典》刘汝佳清华大学出版社8.《算法导论(原书第2版)》科曼(Cormen T.H.)、等、 潘金贵机械工业出版社 (2006-09出版)9.《编程之美:微软技术面试心得 》《编程之美》小组电子工业出版社10.《编程珠玑(第2版)》Jon Bentley、黄倩、 钱丽艳人民邮电出版社11.《算法艺术与信息学竞赛》刘汝佳清华大学出版社12.《程序员面试宝典(第3版)》欧立奇、刘洋、 段韬电子工业出版社13.《数学之美》(《浪潮之巅》作者吴军最新力作,李开复作序推荐,Google黑板报百万点击)

C语言求平均数问题

c语言实验心得:1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。

2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。

3、常量放到code区,如字库、修正系数。

4、逻辑标志变量可以定义到bdata中。

在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。

这样可以大大降低内存占用空间。

定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。

5、data区内最好放局部变量。

因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。

当然静态局部变量除外,其内存使用方式与全局变量相同;6、确保程序中没有未调用的函数。

在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。

函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。

这一点Keil做得很愚蠢,但也没办法。

7、如果想节省data空间就必须用large模式。

将未定义内存位置的变量全放到xdata区。

当然最好对所有变量都要指定内存类型。

8、使用指针时,要指定指针指向的内存类型。

在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。

如指针p是指向data区,则应定义为: char data *p;。

还可指定指针本身的存放内存类型,如:char data * xdata p;。

其含义是指针p指向data区变量,而其本身存放在xdata区。

以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。

与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。

idata是用类似C中的指针方式访问的。

汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。

这个比较特殊,而且C51好象有对此BUG,建议少用。

但也有他的优点,具体用法属于中级问题,这里不提。

三、有关单片机ALE引脚的问题 单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1\\\/6.每当访问外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲.这句话是不是有毛病.我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我.小弟感激涕零.答:其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE 四、如何将一个INT型数据转换成2个CHAR型数据

经keil优化后,char1=int1\\\/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。

五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写

右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX 六、typedef 和 #define 有何不同?? typedef 和 #define 有何不同》》》 如typedef unsigned char UCHAR ;#define unsigned char UCHAR ;typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了一个新的名字.#define只是一个标号的定义.你举的例子两者没有区别,但是#define还可以这样用#define MAX 100#define FUN(x) 100-(x)#define LABEL等等,这些情况下是不能用typedef定义的 七、请问如何设定KELC51的仿真工作频(时钟) 用右键点击左边的的target 1,然后在xtal一栏输入 八、不同模块怎样共享sbit变量,extern不行? 把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件 九、C51中对于Px.x的访问必须自己定义吗

是的。

如sbit P17 = 0x97;即可定义对P1.7的访问 十、SWITCH( )语句中表达式不可以是位变量对吗

可以用位变量:#include#includevoid main(){bit flag;flag=0;switch(flag){case '0':{printf(0\\\ );break;}case '1':{printf(1\\\ );break;}default:break; }}bit 变量只有两种状态,if 语句足够啦,!!! 十一、const常数声明占不占内存 const 只是用来定义“常量”,所占用空间与你的定义有关,如:const code cstStr[] = {abc};占用代码空间;而如:const char data cstStr[] = {abc};当然占用内存空间。

另外,#define 之定义似乎不占用空间。

十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用

试一试将auxr.1清0,然后在c语言中直接声明xdata类型的变量 十三、BUG of Keil C51 程序中用如下语句:const unsigned char strArr[] = {数学};结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪

凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]={0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。

十四、Keil C51中如何实现代码优化

菜单Project下Option for target Simulator的C51.看到Code optimization了吗

十五、请教c的

和 ~ 符号有甚区别

是逻辑取反,~是按位取反。

十六、c51编程,读端口,还要不要先输出1

我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事

谢了要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。

十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I\\\/O口呢

p3.5完全可以当普通的io使用 十八、C51中 INT 转换为 2个CHAR

各位高手:C51中 INT 转换为 CHAR 如何转换诸如:X = LOW(Z);Y = HIGH(Z);答: x=(char)z;y=(char)(z>>8); 十九、如果我想使2EH的第7位置1的话,用位操作可以吗

现在对位操作指令我一些不太明白请各位多多指教:如 SETB 07H 表示的是20H.7置1,对吗

(我在一本书上是这么看到的)那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢

谢谢

SETB 77Hsetb (2eh-20h)*8+7 20h-2fh每字节有8个可位操作(00h-7fh),其它RAM不可位直接操作 二十、char *addr=0xc000 和char xdata *addr=0xc000有何区别

char *addr=0xc000;char xdata *addr=0xc000;除了在内存中占用的字节不同外,还有别的区别吗?char *addr=0xc000; 是通用定义,指针变量 addr 可指向任何内存空间的值;char xdata *addr=0xc000; 指定该指针变量只能指向 xdata 中的值;后一种定义中该指针变量(addr)将少占用一个存储字节。

uchar xdata *addr=0xc000;指针指向外ram;如果:data uchar xdata *addr=0xc000;指针指向外ram但指针本身存在于内ram(data)中以此类推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;data uchar idata *addr=0xa0;......... 二十一、while(p1_0)的执行时间

假设,P1_0为单片机P1口的第一脚,请问,while(P1_0){P1_0=0;}while(!P1_0){P1_0=1;}以上代码,在KEIL C中,需要多长时间,执行完。

能具体说明while(P1_0)的执行时间吗

仿真运行看看就知道了,我仿真了试了一下,约14个周期 二十二、怎样编写C51的watchdog程序

各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端初始花程序,使他一运行,就设置开门狗

可以在startup.a51中加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51,将他和你的程序连接即可。

新的startup.a51会自动代替系统默认的启动模块。

二十三、keil C51 怎样把修改的startup.a51 加到工程文件中 直接加入即可注意不要改动?STACK,?C_START,?C_STARTUP等符号。

startup.a51直接加入项目,不用修改也可。

可在内面自己修改汇编的一些限制或堆栈指针。

二十四、关于波特率的设置 我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么

如果变了,又为什么

(因为我看书上俩个是一样的),希望大家点拨。

答:当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。

TH1和TL1的值不变. 二十五、如何在C中声明保留这部分RAM区不被C使用

我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:DSEG AT 20HAA: DS 10这样C51就不会占用20H--29H了或者在c51里这样定义:uchar data asm_buff[10] _at_ 0x20; 二十六、问浮点运算问题 我在用C51时发现它对传递浮点参数的个数有限制,请问:1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有限制吗

2)这种传递浮点参数的限制有多少呢

3)float*float的结果是float类型还是double类型?能否直接赋值给float类型的变量

答:由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有限制。

不过KEIL提供了一个编译参数,可以支持更多参数的传递。

具体的内容见KEIL的PDF文档。

我建议你把多个要传递的参数定义到指针或结构体中去,传递参数通过指针或结构进行,这样好一些。

第3个问题回答是YES,你自己试试不就知道了。

二十七、如何在某一个地址定义ram 用_at_ 命令,这样可以定位灵活一点的地址uchar xdata dis_buff[16] _at_ 0x6020 ;\\\/\\\/定位RAM将dis_buff[16]定位在0x6020开始的16个字节 二十八、keil c中,用什么函数可以得到奇偶校验位

例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。

#include unsigned char parity(unsigned char x){x^=x;if(P)return(1);else return(0);}unsigned char parity2(unsigned int x){#pragma asmmov a,r7xrl ar6,a#pragma endasmif(P)return(1);else return(0);}

大学计算机信息技术课程的上课和授课感想

1、建立今后后要致力于软件开发的意识(短期过程) 这是一个洗脑的过程,要让学生对学计算机能做什么的迷茫状态到坚信我毕业后可做一名优秀的软件工程师的小小志向,激发起学生对软件研发的激情,至少要有三分钟的热血。

因为学好计算机,关键是学生的自学,计算机类的书太多、更新太快,只有不断自学、博览群书才能学好、做好这份工作(至少在学生时期需要这么做)。

2、基础知识的培养(长期过程) 软件研发的学习必须从基础一点一点开始,不可能一开始就学习如何开发市场上哪些常见的软件产品(如多媒体播放程序、QQ这类网络编程、管理信息系统)。

a) 要从C语言开发,从顺序结构、选择结构、循环结构三大基本程序结构、函数、数组、字符串、链表、排序、文件开始,逐步到C++、Java、Delphi的面向对象编程,接受类、面向对象的概念(虽然解决的问题与在C语言中的相同)。

b)从DOS这类字符界面程序开始,逐步到windows这类窗口界面。

c)数据结构,知道常见的算法d)数据库,掌握SQL、理解第三范式,能设计、建立数据库,学会Access(单机版常用)、SQLServer(中型)两个DBMS。

e)HTML,静态网页设计,了解网页三剑客Dreamweaver 、Fireworks、 flash这类开发工具。

像操作系统、软件工程、网络、电路、计算机组成原理、汇编语言、离散数学、编译原理、微机接口这些基础课,根据学生情况略有侧重,要全面发展,就要打好全面的地基。

3、几个常见软件开发方向(短期过程) 在学生学习完基础知识后,会有一个迷茫,感觉学习了这么多知识仍然开发不出来市场上常见的软件。

在这个时候,要向学生介绍软件开发的几个方向,主要由数据库开发、图像多媒体开发、网络编程、串口通信、单片机、网络游戏。

a) 数据库开发即管理信息系统,又分为C\\\/S、B\\\/S两种结构,前者为客户端软件开发,主要开发工具Delphi、VB、VF、VC、 C++ Builder;后者为动态网页设计,在HTML基础上再结合Jsp、Asp、Php,进行网站设计。

b)图像多媒体开发,主要是各种格式的图像的显示与编辑,视频的播放控制(播放器)。

c)网络编程采用Socket进行TCP、UDP网络编程,进行网络聊天、文件传输等程序的开发,可以采用Delphi、VB、VC、C++ Builder。

d)串口通信e)单片机f)网络游戏 经过对几个常见方向的了解,学生找到自己的兴趣,再次点燃成为软件工程师的激情。

4、在某一个研发方向进行深入学习(长期过程)a) 数据库开发,根据C\\\/S、B\\\/S分两种。

C\\\/S结构:先定位好开发环境,后台数据库+前台开发工具。

数据库环境主要是SQLServer2000,其次要了解MySQL这个开源数据库管理系统,因为它可运行在Windows 和 Linux环境。

前台Client客户端开发工具可以是Delphi或VB或VF或VC、C++ Builder等。

B\\\/S结构:在后台数据库方面与C\\\/S结构相同。

在网页设计分三部分:网页三剑客Dreamweaver 、Fireworks、 flash,动态网页设计开发语言Asp、Jsp、Php,网页服务器可用Microsoft IIS(Internet Information Server)或Tomcat或Apache等。

b)图像多媒体方面 了解BMP、JPEG、Gif等图像的存储方法及加载、显示方法,了解mp3、avi、rm等音频、视频的播放方面的问题。

c)网络编程 在Delphi、VB、VC、C++ Builder开发环境下,采用Socket编程技术开发网络聊天、文件传输、语音、视频的传输,仿QQ功能。

数据结构定义一个栈并实现入栈和出栈操作的程序c语言完整版

LED点阵显示屏摘要 LED大屏幕显示系统,以AT89S52单片机为核心,由键盘显示、温度采集、串口通信、LED大屏幕显示等功能模块组成。

本系统的灰阶控制功能由软件来实现,吸收了硬件软件化的思想,本系统不仅可以实现题目要求的基本功能,同时发挥部分也得到完全的实现,最主要的是LED显示屏的内容可以通过PC机进行实时修改,而且有一定的创新功能。

关键字:单片机 LED大屏幕 滚屏显示 PC机控制1.任务设计并制作一台简易LED电子显示屏,16行*16列*16灰阶点阵显示,原理示意图如下:PC机LED灰阶电子显示屏原理框图2.要求(1)基本要求:设计并制作LED电子显示屏和控制器。

1) 自制一台简易16行*16列*16灰阶点阵显示的LED电子显示屏;2) 自制显示屏控制器,扩展键盘和相应的接口实现多功能显示控制,显示屏显示16灰阶图像(可以是渐变灰阶条纹)、数字和字母亮度适中,应无闪烁。

3) 显示屏通过按键切换显示图像、数字和字母;4) 显示屏能显示3组特定图像、数字或者英文字母组成的句子,通过按键切换显示内容;5) 能显示2组特定汉字组成的句子,通过按键切换显示内容。

(2)发挥部分:1) 自制一台简易16行*32列*灰阶点阵显示的LED电子显示屏;2) LED显示屏亮度连续可调。

3) 实现信息的左右滚屏显示,预存信息的定时循环显示;4) 实现实时时间的显示,显示屏数字显示: 时∶分∶秒(例如 18∶38∶59);5) 增大到10组(每组汉字8个或16个数字和字符)预存信息,信息具有掉电保护;6)实现和PC机通讯,通过PC机串口直接对显示信息进行更新(须做PC机客户程序);7)其他发挥功能。

3.说明(1)显示格式和显示信息可以自定义。

(2)电子显示屏LED显示灯只允许使用8*8 LED点阵显示模块。

(3) 显示屏的显示控制方案和控制器的选择方案任选。

(4) 不允许使用LED集成驱动模块和集成灰阶产生模块,可用CPLD或FPGA。

2、方案论证2.1 显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:方案一:静态显示,将一帧图像中的每一个二极管的状态分别用0 和1 表示,若为0 ,则表示L ED 无电流,即暗状态;若为1 则表示二极管被点亮。

若给每一个发光二极管一个驱动电路,一幅画面输入以后,所有L ED 的状态保持到下一幅画。

对于静态显示方式方式,所需的译码驱动装置很多,引线多而复杂,成本高,且可靠性也较低。

方案二:动态显示,对一幅画面进行分割,对组成画面的各部分分别显示,是动态显示方式。

动态显示方式方式,可以避免静态显示的问题。

但设计上如果处理不当,易造成亮度低,闪烁问题。

因此合理的设计既应保证驱动电路易实现,又要保证图像稳定,无闪烁。

动态显示采用多路复用技术的动态扫描显示方式, 复用的程度不是无限增加的, 因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短, 发光的亮度等因素. 我们通过实验发现, 当扫描刷新频率(发光二极管的停闪频率) 为50Hz, 发光二极管导通时间≥1m s 时, 显示亮度较好, 无闪烁感.。

鉴于上述原因, 我们采用方案二2.2.数字时钟数字时钟是本设计的重要的部分。

根据需要,可利用两种方案实现。

方案一:本方案完全用软件实现数字时钟。

原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。

该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。

且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

方案二:本方案采用Dallas公司的专用时钟芯片DS。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms\\\/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

基于时钟芯片的上述优点,本设计采用方案二完成数字时钟的功能。

2.3 温度采集部分能进行温度测量是本设计的创新部分,由于现在用品追求多样化,多功能化,所以我们决定给系统加上温度测量显示模块,方便人们的生活,使该设计具有人性化。

方案一:采用热敏电阻,可满足 40 摄氏度至 90 摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于 1 摄氏度的信号是不适用的。

方案二:采用温度传感器DS18B20。

DS18B20可以满足从-55摄氏度到+摄氏度测量范围,且DS18B20测量精度高,增值量为0.5摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。

基于DS18b20的以上优点,我们决定选取DS18b20来测量温度。

2.4 显示接口芯片的选择方案一:采取并口输入,占用大量I\\\/O口资源方案二:选取串口输入,使用较少。

所以我们选用串口输入。

串口输入我们可以选用芯片有74HC、74LS、TPIC6B。

但是74HC和74LS两种芯片必须加驱动才能驱动LED,而TI 公司的DMOS 器件TPIC6B , 除具有TTL 和CMOS 器件中移位寄存器 的逻辑功能外, 其最大的特点是驱动功率大, 可直接用作LED的驱动。

综合以上比较,我们选取TPIC6B来驱动LED点阵。

2.5 串口通讯芯片的选择AT89S52串行口采用的是TTL电平,因此必须的有电平转换电路,可以选择,,MAXA.方案一:采用或芯片实现电平转换,但在使用中发现这两种芯片可靠性不高,且需要正负12V电源,使用麻烦。

方案二:采用单电源电平转换芯片MAXA可以使电路变得简单,可靠。

基于以上分析,我们选用方案二,选用芯片MAXA2.6 电源模块方案一:采用干电池作为LED点阵系统的电源,由于点阵系统耗电量较大,使用干电池需经常换电池,不符合节约型社会的要求。

点阵系统要悬挂在墙上,电池总量大,使用会有较大安全隐患。

方案二:采用W\\\/5V直流稳压电源作为系统电源,不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠基于以上分析,我们决定采用方案二3、总体方案3.1 工作原理:利用单片机AT89S52单片机作为本系统的中控模块。

单片机可把由DS18B20、DS读来的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历的显示。

点阵LED电子显示屏显示器为主要的显示模块,把单片机传来的数据显示出来,并且可以实现滚动显示。

在显示电路中,主要靠按键来实现各种显示要求的选择与切换。

3.2 总体设计设计总体框图如图14、系统硬件设计(单元电路设计及分析)4.1 AT89S52单片机最小系统最小系统包括晶体振荡电路、复位开关和电源部分。

图2为AT89S52单片机的最小系统。

4.2 温度测量模块图3 DS18B20测量电路温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55℃~℃,可编程为9位~12位A\\\/D转换精度,测温分辨率达到0.℃,采用寄生电源工作方式, CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。

接口电路如图3所示。

4.3 时钟模块时钟模块采用DS芯片,DS 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟\\\/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信实时时钟\\\/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM\\\/PM 指示决定采用24 或12 小时格式DS 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I\\\/O 数据线3 SCLK串行时钟时钟\\\/RAM 的读\\\/写数据以一个字节或多达31 个字节的字符组方式通信DS 工作时功耗很低保持数据和时钟信息时功率小于1mW,其接线电路如图4图4 时钟电路4.4 键盘模块键盘、状态显示模块:为了使软件编程简单,本设计利用可编程芯片。

接法如表1所示。

PA口接按键,PC口则用于控制状态显示所用LED点阵。

每个按键都通过一个10K的上拉电阻接电源+Vcc,按键的另一端接地。

当有键按下时,与该键相连的PA口的相应位变为低电平,单片机检测到该变化后即转到相应的键处理程序,同时在程序中点亮LED点阵。

模块电路如图54.5 LED显示模块点阵数据串行输入, 器件为 移位寄存器TPIC6B, 门控和扫描信号常以16 点阵为一行进行并行处理。

在点阵显示中以4×8个L ED 点阵构成一个L ED 显示单元, 采用行共阳列共阴的编排方式。

其驱动分为行列两部分, 分别来自于行、列移位寄存器, 行数据是扫描数据, 16 行中每次只有一行被驱动, 采用逐行扫描方式, 列数据则为汉字的点阵码。

对于字符和图形显示也可以用点阵处理, 其显示原理和方法相同.电路如图6图6 LED显示电路4.6灰阶控制4.6.1 阶灰度控制方法对于LED 发光灯, 灰度控制方法主要有驱动电流控制法和驱动脉冲占空比控制法。

占空比控制法是在一定的显示重复扫描频率下, LED 器件的亮度可由发光时间Tu 与扫描周期T 的比Tu\\\/T 进行控制。

在相同的LED 正向电流作用下, Tu 越长发光能量越大, 只要周期性扫描的速度足够快的话, 人眼发觉不了1 个周期内不发光的部分, 只是感觉LED 的亮度更高。

本设计采用占空比控制法。

4.6.2 图像扫描方法在图像扫描显示过程中, 每次传输和显示的只是带有8 bit 灰度级的某一列数据的1 bit, 这样传输并显示8次, 就可以反映出8 bit 的灰度级。

具体方法为:首先扫描显示16 行各列8 bit 灰度值的D0 比特, 其次扫描显示16行各列的D1比特, 依此类推, 直到显示16 行各列灰度值的D7 bit。

各部分按顺序重复上述过程, 直到整屏扫描显示完, 对于16 行各列1 bit 的扫描细节过程为: 从第一行开始, 首先送这一行各列D0 位灰度值数据到各列移位寄存器锁存器, 然后, 送第2 行各列的D0 位数据, 同时显示第1 行数据。

依次类推, 直到显示第16 行各列的D0位数据, 同时开始第1 行的D1 位数据。

重复8 次扫描显示16 行。

每比特扫描时间如下图2所示,整个扫描过程可以如图3所示。

方案一、通过FPGA来实现灰阶控制, 是在FPGA 设计工具中利用译码器产生一系列OE 脉宽的具体电路图。

E2…E10 来自计数器; H1, H2, H4, H8, H16, H32, H64, H,H 为译码器译出的不同脉宽的OE 信号源。

H1为一个时钟周期, H2 为半个时钟周期, 以此类推,H 为1\\\/ 个时钟周期[2]。

这一系列脉冲需要进入数据选择器进行分时输出, 最终输出的只有OE一条线。

表1 是OE 脉冲分配表。

因为H1 最宽, H1 输出时LED 最亮, 所以在这里不是将H1连续输出, 而是分散开, 其目的是提高显示屏的扫描频率, 降低频闪, 使屏幕图像看上去更加稳定。

方案二、通过单片机软件扫描来实现LED不同灰阶的现实,从而达到显示图像的效果。

由于缺少FPGA的开发工具,所以采用方案二。

4.7亮度连续可调控制方案一 通过在软件中调节刷新频率。

刷新频率高的时候,连续点亮的时间短,显示屏亮度低,当刷新频率调低时,连续点亮的时间延长,显示屏变亮。

因此通过调节占空比来实现显示屏亮度的调整。

但是由于软件调节亮度变化不连续.不能实现连续的亮度调节。

并且会出现闪烁。

调节的效果不明显,故不采用此方案。

方案二 通过调节电位器来改变电压,实现亮度的调节。

调节电位器实现线形电压调整,从而控制三极管使显示屏压降发生改变。

从而达到连续调节亮度的目的。

电位器的调节范围较大,因此用此方法来调节。

4.8电源选择W\\\/5V的直流稳压电源更加安全,电路图如图7图7 电源电路4.9 PC机通讯4.9.1硬件连接设计MAX是标准的串口通信接口,对于一般的双向通讯,只需要使用串行输入口RXD(第3脚)、串行输出TXD(第2脚)和地线(第7脚)。

MAX逻辑电平的规定如表2.图8 串口通讯4.9.2软件设计通过VC++在PC机上编写一个上位机软件实现对单片机的控制,实现LED显示内容和现实方式的控制。

4.10整体电路系统整体电路如下:图9 整体电路5、系统软件设计5.1主程序5.2显示子程序流程5.3 显示时间子程序流程5.4 与PC串口通讯程序5.5温度测量流程图实在不行换一个 或者在硬之城上面找找这个型号的资料

c语言。

编写程序。

把任意一个十进制整数转化为二进制数。

并输出

#includevoid main(){int a;char s[20]; int i=0,rem;printf(入整:\\\ ); scanf(%d,&a); do{rem=a%2; a=a\\\/2;s[i]=rem;i++;}while(a!=0);printf(的二:); while(i>0)printf(%d,s[--i]); printf(\\\ );}

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片