附件为:LCD12864显示汉字和数字的程序与电路 /* 自定义延时子函数 */ void delayms(uchar z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /* 判断LCD忙信号状态 */ void buys() { int dat; RW=1; RS=0; do { P0=0x00; E=1; dat=P0; E=0; dat=0x80 & dat; } while(!(dat==0x00)); } /* LCD写指令函数 */ void w_com(uchar com) { //buys(); RW=0; RS=0; E=1; P0=com; E=0; } /* LCD写数据函数 */ void w_date(uchar date) { //buys(); RW=0; RS=1; E=1; P0=date; E=0; } /* LCD选屏函数 */ void select_screen(uchar screen) { switch(screen) { case 0: //选择全屏 CS1=0; CS2=0; break; case 1: //选择左屏 CS1=0; CS2=1; break; case 2: //选择右屏 CS1=1; CS2=0; break; /* case 3: //选择右屏 CS1=1; CS2=1; break; */ } } /* LCDx向上滚屏显示 */ void lcd_rol() { int x; for(x=0;x<64;x++) { select_screen(0); w_com(0xc0+x); delayms(500); } } /* LCD清屏函数:清屏从第一页的第一列开始,总共8页,64列 */ void clear_screen(screen) { int x,y; select_screen(screen); //screen:0-选择全屏,1-选择左半屏,2-选择右半屏 for(x=0xb8;x<0xc0;x++) //从0xb8-0xbf,共8页 { w_com(x); w_com(0x40); //列的初始地址是0x40 for(y=0;y<64;y++) { w_date(0x00); } } } /* LCD显示汉字字库函数 */ void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-3,mun:显示第几个汉字的参数 int a; mun=mun*32; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } } /* LCD显示字符字库函数 */ void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } } /* LCD显示数字字库函数 */ void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } } /* LCD初始化函数 */ void lcd_init() { w_com(0x3f); //LCD开显示 w_com(0xc0); //LCD行初始地址,共64行 w_com(0xb8); //LCD页初始地址,共8页 w_com(0x40); //LCD列初始地址,共64列 } /* LCD显示主函数 */ void main() { //第一行 int x; lcd_init(); //LCD初始化 clear_screen(0); //LCD清屏幕 lcd_display_shuzi(1,0,4,5); //LCD显示数字 lcd_display_shuzi(1,0,5,1); //LCD显示数字 lcd_display_hanzi(1,0,3,0); //LCD显示汉字 lcd_display_hanzi(2,0,0,1); //LCD显示汉字 //LCD字符汉字 lcd_display_hanzi(2,0,1,2); //LCD显示汉字 //第二行 lcd_display_zifuk(1,1,2,0); //LCD显示字符 lcd_display_zifuk(1,1,3,0); //LCD显示字符 lcd_display_zifuk(1,1,4,0); //LCD显示字符 lcd_display_zifuk(1,1,5,4); //LCD显示字符 lcd_display_shuzi(1,1,6,8); //LCD显示字符 lcd_display_shuzi(1,1,7,9); //LCD显示字符 lcd_display_shuzi(2,1,0,5); //LCD显示字符 lcd_display_shuzi(2,1,1,1); //LCD显示字符 lcd_display_zifuk(2,1,2,4); lcd_display_zifuk(2,1,3,1); lcd_display_zifuk(2,1,4,2); lcd_display_zifuk(2,1,5,3); //第三行 for(x=0;x<4;x++) { lcd_display_hanzi(1,2,x,3+x); //LCD显示汉字 } for(x=0;x<4;x++) { lcd_display_hanzi(2,2,x,7+x); //LCD显示汉字 } //第四行 for(x=0;x<4;x++) { lcd_display_zifuk(1,3,x,5+x); //LCD显示汉字 } lcd_display_shuzi(1,3,4,7); lcd_display_shuzi(1,3,5,5); lcd_display_shuzi(1,3,6,5); lcd_display_zifuk(1,3,7,9); lcd_display_shuzi(2,3,0,8); lcd_display_shuzi(2,3,1,9); lcd_display_shuzi(2,3,2,9); lcd_display_shuzi(2,3,3,5); lcd_display_shuzi(2,3,4,6); lcd_display_shuzi(2,3,5,8); lcd_display_shuzi(2,3,6,9); lcd_display_shuzi(2,3,7,2); while(1); /* while(1) { // LCD向上滚屏显示 lcd_rol(); } */ }
上传时间: 2013-11-08
上传用户:aeiouetla
C函数速查手册 出版社:人民邮电出版社 《C函数速查手册》中所讲的C语言函数按照功能顺序和字母顺序进行排序,读者既可以按照功能顺序查找,也可以按照字母顺序学习。《C函数速查手册》不仅适合于C语言初学者学习使用,而且也可以作为中、高级C语言开发人员的参考手册。 目录 第1章 数学函数 1.1 _clear87函数:清除浮点状态字 1.2 _status87函数:取浮点状态字 1.3 abs函数:求整数的绝对值 1.4 acos、acosl函数:反余弦函数 1.5 asin、asinl函数:反正弦函数 1.6 atan函数:反正切函数 1.7 atan2、atan2l函数:计算Y/X的反正切值 1.8 cabs函数:计算复数的模 1.9 ceil函数:向上取整 1.10 cos函数:余弦函数 1.11 cosh函数:双曲余弦函数 1.12 div函数:求两个整数相除的商和余数 1.13 exp函数:指数函数 1.14 fabs函数:求浮点数的绝对值 1.15 floor函数:向下取整 1.16 fmod函数:计算x对y的模 1.17 frexp函数:将浮点数分为底数与指数 1.18 hypot函数:计算直角三角形的斜边 1.19 labs函数:取长整数的绝对值 1.20 ldexp、ldexpl函数:幂计算 1.21 ldiv函数:两个长整型数相除 1.22 log、logl函数:计算自然对数 1.23 log10、log10l函数:计算常用对数 1.24 max函数:求两个数中的最大者 1.25 min函数:求两个数中的最小者 1.26 modf、modfl函数:分割数为整数部分和小数部分 1.27 poly函数:计算多项式 1.28 pow函数:指数函数 1.29 pow10函数:指数函数 1.30 rand函数:随机数发生器 1.31 random函数:随机数发生器 1.32 randomize函数:初始化随机数发生器 1.33 sin函数:正弦函数 1.34 sinh函数:双曲正弦函数 1.35 sqrt函数:计算平方根 1.36 srand函数:初始化随机数发生器 1.37 tan、tanl函数:正切函数 1.38 tanh、tanhl函数:双曲正切函数 第2章 字符串函数 2.1 atof函数:把字符串转换成浮点数 2.2 atoi函数:将字符串转换成整型数 2.3 atol函数:将字符串转换成长整型数 2.4 ecvt函数:将浮点数转换为字符串 2.5 fcvt函数:将浮点数转换为字符串 2.6 gcvt函数:将浮点数转换成字符串 2.7 itoa函数:将整数值转换为字符串 2.8 isalnum函数:字母、数字判断函数 2.9 isalpha函数:字母判断函数 2.10 isascii函数:整数值的字符分类 2.11 iscntrl函数:控制字符判断函数 2.12 isdigit函数:数字判断函数 2.13 isgraph函数:打印字符判断 2.14 islower函数:小写字母判断函数 2.15 isprint函数:可打印字符判断函数 2.16 isptmct函数:标点符号判断函数 2.17 isspace函数:空格等判断函数 2.18 isupper函数:大写字母判断函数 2.19 isxdigit函数:十六进制数字判断函数 2.20 ltoa函数:将长整值转换为字符串 2.21 mbstowcs函数:将多字节字符序列转换成相应的宽字符序列 2.22 mbtowc函数:将多字节字符转换成相应的宽字符 2.23 stpcpy函数:复制字符串 2.24 strcat函数:拼接字符串 2.25 strchr函数:查找给定字符 2.26 strcmp函数:比较字符串 2.27 strcmpi函数:比较字符串 2.28 strcpy函数:复制字符串 2.29 strcspn函数:查找不包含指定字符集子串的段 2.30 strdup函数:将字符串复制到新建的位置 2.31 stricmp函数:比较字符串 2.32 strlen函数:获取字符长度
上传时间: 2014-12-25
上传用户:水口鸿胜电器
用单片机制作的高精度数显计数器 单片机C51计数器 要求:编写一个计数器程序,将T0作为计数器来使用,对外部信号计数,将所计数字显示在数码管上。 该部分的硬件电路如图所示,U1的P0口和P2口的部份引脚构成了6位LED数码管驱动电路,数码管采用共阳型,使用PNP型三极管作为片选端的驱动,所有三极管的发射极连在一起,接到正电源端,它们的基极则分别连到P2.0…P2.5,当P2.0…P2.5中某引脚输是低电平时,三极管导通,给相应的数码管供电,该位数码管点亮哪些笔段,则取决于笔段引脚是高或低电平。图中看出,所有6位数码管的笔段连在一起,通过限流电阻后接到P0口,因此,哪些笔段亮就取决于P0口的8根线的状态。 里面包含了:单片机C51计数器、计算器流程图、工作原理,
上传时间: 2013-11-16
上传用户:myworkpost
P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。再看图的右边,标号 为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。
上传时间: 2014-01-13
上传用户:fandeshun
//CM3 有 最多240个中断(通常外部中断写作IRQs),就是 软件上说的 IRQ CHANAELx(中断通道号x) 每个中断有自己的可编程的中断优先级【 有唯一对应的 中断优先级寄存器 】. 由于CM3支持 硬件中断嵌套,所以可以有 256 级的可编程优先级 和 256级中断嵌套【 书上称:抢占(preempt) 优先级】 所以大家可以设: IRQ CHANAEL 0 通道 = 2 中断优先级WWDG 窗口定时器中断 IRQ CHANAEL 1 通道 = 0 中断优先级PVD 联到EXTI的电源电压检测(PVD)中断 IRQ CHANAEL 3 通道 = 255 中断优先级RTC 实时时钟(RTC)全局中断 IRQ CHANAEL 6 通道 = 10 中断优先级EXTI0 EXTI线0中断 ..... IRQ CHANAEL 239 通道 = (0<x<255) 中断优先级..
上传时间: 2013-10-28
上传用户:redherr
MSP430系列C编译器编程指南第1章 安装和文档关系图本章说明如何安装和运行IAR 产品的命令行和Windwos Workbench 版本并给出与产品一起提供的用户指南的概述请注意某此产品只有命令行版本且根据用户正在使用的产品或平台资料可能稍有不同1.1 命令行版本本节叙述怎样安装和运得IAR 系统工具的命令版本1.1.1 用户需要什么 DOS 4.X 或更高版本此产品也和运行在Windows95, Windows NT 3.51 或更高版本或Windows 3.1 X 下的DOS 窗口相兼容 至少 10M 字节的自由磁盘空间 最少有 4M 字节的RAM 可供IAR 应用程序使用
上传时间: 2013-11-22
上传用户:agent
C51原理及相关基础入门知识 第一章:C51 流程控制语句一、分类条件语句、循环语句和开关语句。下面将对这些语句作详细介绍。(1) 条件语句条件语句的一般形式为:if(表达式)语句 1;else语句 2;上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语句1 从语句2 后开始继续向下执行; 如果表达式的值为 0(FALSE)即假, 则跳过语句1 而执行语句2。所谓表达式是指关系表达式和逻辑表达式的结合式。注意:1. 条件执行语句中"else 语句2;"部分是选择项, 可以缺省, 此时条件语句变成:if(表达式) 语句1;表示若表达式的值为非 0 则执行语句1 , 否则跳过语句1 继续执行。2. 如果语句1 或语句2 有多于一条语句要执行时, 必须使用"{"和"}" 把这些语句包括在其中, 此时条件语句形式为:if(表达式){语句体 1;}else{语句体 2;}3. 条件语句可以嵌套, 这种情况经常碰到, 但条件嵌套语句容易出错, 其原因主要是不知道哪个if 对应哪个else。例如:if(x>20||x<-10)if(y<=100&&y>x)printf("Good");elseprintf("Bad");对于上述情况,规定: else 语句与最近的一个if 语句匹配, 上例中的 else 与 if(y<=100&&y>x) 相匹配。为了使 else 与if(x>20||x<-10) 相匹配, 必须用花括号。如下所示:if(x>20||x<-10){if(y<=100&&y>x)printf("Good");}
上传时间: 2013-10-24
上传用户:Sophie
NE1617A是一款高精度双通道数字温度监控器。其可以测量本地温度及远程温度。远程温度传感器可以使用分立NPN/PNP三极管(以二极管方式连接),如2N3904/2N3906。或者选用一些内嵌PNP结构(连接成二极管形式)的芯片,如INTEL的微处理器。
上传时间: 2013-11-17
上传用户:199311
PIC单片机实用教程基础篇+提高篇 PIC单片机(Peripheral Interface Controller)是一种用来开发的去控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。 PIC 单片机是一个小的计算机 PIC单片机有计算功能和记忆内存像CPU并由软件控制允行。然而,处理能力—存储器容量却很有限,这取决于PIC的类型。但是它们的最高操作频率大约都在20MHz左右,存储器容量用做写程序的大约1K—4K字节。 时钟频率与扫描程序的时间和执行程序指令的时间有关系。但不能仅以时钟频率来判断程序处理能力,它还随处理装置的体系结构改变(1*)。如果是同样的体系结构,时钟频率较高的处理能力会较强。 这里用字来解释程序容量。用一个指令(2*)表示一个字。通常用字节(3*)来表示存储器(4*)容量。一个字节有8位,每位由1或0组成。PIC16F84A单片机 的指令由14位构成。当把1K个子转换成位为:1 x 1,024 x 14 = 14,336位。再转换为字节为:14,336/(8 x 1,024) = 1.75K。在计算存储器的容量时,我们规定 1G 字节 = 1,024M 字节, 1M 字节 = 1,024K 字节, 1K 字节= 1,024 字节. 它们不是以1000为倍数,因为这是用二进制计算的缘故。 1*计算机的物理结构,包括组织结构、容量、该计算机的CPU、存储器以及输入输出设备间的互连。经常特指CPU的组织结构,包括它的寄存器、标志、总线、算术逻辑部件、指令译码与执行机制以及定时和控制部件。 2*指出某种操作并标识其操作数(如果有操作数的话)的一种语言构造 3*作为一个单位来操作(运算)的一个二进制字符串,通常比计算机的一个字短。 4*处理机内的所有可寻址存储空间以及用于执行指令的其它内存储器。 在计算存储器的容量时,我们规定 1G 字节 = 1,024M 字节, 1M 字节 = 1,024K 字节, 1K 字节= 1,024 字节. 它们不是以1000为倍数,因为这是用二进制计算的缘故。 用PIC单片机使电路做的很小巧变得可能。 因为PIC单片机可以把计算部分、内存、输入和输出等都做在一个芯片内。所以她工作起来效率很高、功能也自由定义还可以灵活的适应不同的控制要求,而不必去更换不同的IC。这样电路才有可能做的很小巧。
上传时间: 2013-10-15
上传用户:sxdtlqqjl
关于PCB封装的资料收集整理. 大的来说,元件有插装和贴装.零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念.因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元件,再过锡炉或喷锡(也可手焊),成本较高,较新的设计都是采用体积小的表面贴片式元件(SMD)这种元件不必钻孔,用钢膜将半熔状锡膏倒入电路板,再把SMD 元件放上,即可焊接在电路板上了。晶体管是我们常用的的元件之一,在DEVICE。LIB库中,简简单单的只有NPN与PNP之分,但实际上,如果它是NPN的2N3055那它有可能是铁壳子的TO—3,如果它是NPN的2N3054,则有可能是铁壳的TO-66或TO-5,而学用的CS9013,有TO-92A,TO-92B,还有TO-5,TO-46,TO-52等等,千变万化。还有一个就是电阻,在DEVICE 库中,它也是简单地把它们称为RES1 和RES2,不管它是100Ω 还是470KΩ都一样,对电路板而言,它与欧姆数根本不相关,完全是按该电阻的功率数来决定的我们选用的1/4W 和甚至1/2W 的电阻,都可以用AXIAL0.3 元件封装,而功率数大一点的话,可用AXIAL0.4,AXIAL0.5等等。现将常用的元件封装整理如下:电阻类及无极性双端元件:AXIAL0.3-AXIAL1.0无极性电容:RAD0.1-RAD0.4有极性电容:RB.2/.4-RB.5/1.0二极管:DIODE0.4及DIODE0.7石英晶体振荡器:XTAL1晶体管、FET、UJT:TO-xxx(TO-3,TO-5)可变电阻(POT1、POT2):VR1-VR5这些常用的元件封装,大家最好能把它背下来,这些元件封装,大家可以把它拆分成两部分来记如电阻AXIAL0.3 可拆成AXIAL 和0.3,AXIAL 翻译成中文就是轴状的,0.3 则是该电阻在印刷电路板上的焊盘间的距离也就是300mil(因为在电机领域里,是以英制单位为主的。同样的,对于无极性的电容,RAD0.1-RAD0.4也是一样;对有极性的电容如电解电容,其封装为RB.2/.4,RB.3/.6 等,其中“.2”为焊盘间距,“.4”为电容圆筒的外径。对于晶体管,那就直接看它的外形及功率,大功率的晶体管,就用TO—3,中功率的晶体管,如果是扁平的,就用TO-220,如果是金属壳的,就用TO-66,小功率的晶体管,就用TO-5,TO-46,TO-92A等都可以,反正它的管脚也长,弯一下也可以。对于常用的集成IC电路,有DIPxx,就是双列直插的元件封装,DIP8就是双排,每排有4个引脚,两排间距离是300mil,焊盘间的距离是100mil。SIPxx 就是单排的封装。等等。值得我们注意的是晶体管与可变电阻,它们的包装才是最令人头痛的,同样的包装,其管脚可不一定一样。例如,对于TO-92B之类的包装,通常是1 脚为E(发射极),而2 脚有可能是B 极(基极),也可能是C(集电极);同样的,3脚有可能是C,也有可能是B,具体是那个,只有拿到了元件才能确定。因此,电路软件不敢硬性定义焊盘名称(管脚名称),同样的,场效应管,MOS 管也可以用跟晶体管一样的封装,它可以通用于三个引脚的元件。Q1-B,在PCB 里,加载这种网络表的时候,就会找不到节点(对不上)。在可变电阻
上传时间: 2013-11-03
上传用户:daguogai