/*--------- 8051内核特殊功能寄存器 -------------*/ sfr ACC = 0xE0; //累加器 sfr B = 0xF0; //B 寄存器 sfr PSW = 0xD0; //程序状态字寄存器 sbit CY = PSW^7; //进位标志位 sbit AC = PSW^6; //辅助进位标志位 sbit F0 = PSW^5; //用户标志位0 sbit RS1 = PSW^4; //工作寄存器组选择控制位 sbit RS0 = PSW^3; //工作寄存器组选择控制位 sbit OV = PSW^2; //溢出标志位 sbit F1 = PSW^1; //用户标志位1 sbit P = PSW^0; //奇偶标志位 sfr SP = 0x81; //堆栈指针寄存器 sfr DPL = 0x82; //数据指针0低字节 sfr DPH = 0x83; //数据指针0高字节 /*------------ 系统管理特殊功能寄存器 -------------*/ sfr PCON = 0x87; //电源控制寄存器 sfr AUXR = 0x8E; //辅助寄存器 sfr AUXR1 = 0xA2; //辅助寄存器1 sfr WAKE_CLKO = 0x8F; //时钟输出和唤醒控制寄存器 sfr CLK_DIV = 0x97; //时钟分频控制寄存器 sfr BUS_SPEED = 0xA1; //总线速度控制寄存器 /*----------- 中断控制特殊功能寄存器 --------------*/ sfr IE = 0xA8; //中断允许寄存器 sbit EA = IE^7; //总中断允许位 sbit ELVD = IE^6; //低电压检测中断控制位 8051
上传时间: 2013-10-30
上传用户:yxgi5
附件为: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
#include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uint a,b,c,d=0; void delay(c) { for for(a=0;a<c;a++) for(b=0;b<12;b++); }; uchar tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
上传时间: 2013-10-21
上传用户:13788529953
摘要:介绍一种基于单片机的温室温度自动控制系统。热敏电阻采集温室内的温度,单片机控制温度在液晶屏上实时显示,利用上位机进行实时监控,通过串行通信将采集到的数据送至上位机,应用系统自带的超级终端软件实现温室温度在上位机中的实时显示。关键词:P89V51RD2单片机;温度检测;液晶显示器
上传时间: 2014-12-27
上传用户:拔丝土豆
本文介绍RS一485电气特性和简单的结构方式。以及采用RS485自定义实现 串行通信协议,并介绍单片机RS一485多机通讯的方法和技巧。
上传时间: 2013-10-15
上传用户:我们的船长
电子产品开发的过程正发生着根本性的变化。此变化极有可能与二十多年前低成本微处理器出现后所带来的变化同样显著。既可以将整个系统 — 硬件和软件嵌入到低成本、高容量的可编程器件(FPGA),这就带来了一种对设计过程非常不同的看法。把握这个变化创造的机遇,解决变化带来的问题是我们必须面对的挑战。
标签: 电子产品
上传时间: 2014-01-26
上传用户:icarus
《微机原理及应用》课程教案目 录 下载WORD文档前 言 下载WORD文档第一章 51系列单片机概述 下载WORD文档 第一节 概述 第二节 51系列单片机分类 思考题与习题 第二章 MCS-51系列单片机组成及工作原理 下载WORD文档 第一节 MCS-51系列单片机组成 第二节 8051的内部数据存储器(内部RAM) 第三节 8051的内部程序存储器(内部ROM) 第四节 MCS-51系列单片机典型芯片的外部引脚功能 第五节 并行输入/输出口 第六节 CPU的时钟电路和时序定时单位 第七节 单片机指令执行的过程 思考题与习题 第三章 指令系统 下载WORD文档 第一节 指令格式和寻址方式 第二节 指令系统 思考题与习题 第四章 算法与结构程序设计 下载WORD文档 第一节 算法 第二节 程序基本结构 第三节 结构化程序设计 第四节 汇编语言程序设计举例 思考题与习题 第五章 中断 下载WORD文档 第一节 中断技术概述 第二节 8051中断系统 第三节 中断控制 第四节 中断响应 第五节 中断系统应用举例 思考题与习题 第六章 定时器/计数器 下载WORD文档 第一节 概述 第二节 定时器/计数器基本结构 工作方式及应用 思考题与习题 第七章 8051单片机系统扩展与接口技术 下载WORD文档 第一节 8051单片机系统扩展概述 第二节 单片机外部存储器扩展 第三节 单片机输入/输出(I/O)口扩展 第四节 LED显示器接口电路及显示程序 第五节 单片机键盘接口技术 第六节 单片机与数模(D/A)及模数(A/D)转换器的接口及应用 思考题与习题 第八章 8051单片机的异步串行通信技术 下载WORD文档 第一节 概述 第二节 8051串行口基本结构 第三节 8051串行通信工作方式及应用 第四节 多机通信原理 下载WORD文档 思考题与习题 第九章 单片机应用举例 下载WORD文档 第一节 单片机数据采集系统 第二节 电机转速测量 第三节 步进电机控制系统 第四节 机器人三觉机械手信号处理及控制算法 思考题与习题 第十章 单片机与字符式液晶显示模块连接技术 下载WORD文档 第一节 字符式液晶显示模块简介 第二节 模块指令系统 第三节 模块与8051单片机的接口 第四节 模块字符显示举例 第五节 自定义字符显示 思考题与习题 附录一 计算机数的运算基础 下载WORD文档 第一节 进位计数制及相互转换 第二节 计算机中数和字符的表示附录二 美国标准信息交换码(ASCII)字符表附录三 MCS-51指令表 下载WORD文档
上传时间: 2014-04-16
上传用户:hhkpj
为了解决一些远程单片机设备不方便升级内部程序的困难,本文提出了利用单片机系统中现有的数据获取方式来升级单片机内部程序的方法。本文利用凌阳16 位单片机可以自读写片内程序空间的特性,通过在片内驻留BootLoader 程序的方式实现了凌阳16 位单片机片内程序的在需要时的远程升级。单片机获取数据的方式可以有很多,本文选取通过串口获取数据进行程序升级为例,并选取常见的凌阳单片机SPCE061A 为例介绍了此方法的设计思路以及实现过程。单片机的应用非常广泛,在某些情况下,单片机内部程序的升级在所难免,但是往往需要对单片机产品进行收回才能实现,这样在一些远程设备的程序升级问题上就显得非常不方便。但是有些远程设备本身留有远程通讯的方式:例如某些远程数据传输模块,为了把数据上报总会留有通讯的接口,比如422、485 甚至GPRS 或者局域网接口;又或者某些车载定位设备,为了和监控中心通讯会留有GSM、CDMA 或者GPRS 等通讯方式。在这种情况下就可以利用其现有的通讯方式对其内部单片机程序进行升级而不需要收回产品。本文的主要内容就是来研究这种远程升级单片机程序的方法。由于近年来凌阳科技的单片机,尤其是 16 位单片机,得到了越来越多的推广,其应用领域越来越广泛。本文选取一种常见的凌阳科技的16 位单片机SPCE061A 为例,来介绍单片机程序远程升级的方法。SPCE061A 里内嵌了32K 字的闪存(FLASH),即可以作为程序存储空间又可以存储数据,并且有自读写任意闪存地址的能力,本文利用这一功能,提出了通过在单片机中驻留BootLoader 程序的方法,来实现单片机程序的远程升级。远程升级的实现,需要单片机自身的响应同时还需要远程服务器提供升级所需的代码。下文将通过这两个方面来分别介绍。
上传时间: 2013-10-31
上传用户:yxgi5
文中提出了一种基于ADSP-BF533硬件平台的数字音频均衡器设计,其音频处理算法包括谱分析和均衡算法。经过测试表明,该系统可达到理想的音频均衡效果,用户可对各种音效进行选择和自定义音效。
上传时间: 2014-12-28
上传用户:yzhl1988
以Altera公司的Quartus Ⅱ 7.2作为开发工具,研究了基于FPGA的DDS IP核设计,并给出基于Signal Tap II嵌入式逻辑分析仪的仿真测试结果。将设计的DDS IP核封装成为SOPC Builder自定义的组件,结合32位嵌入式CPU软核Nios II,构成可编程片上系统(SOPC),利用极少的硬件资源实现了可重构信号源。该系统基本功能都在FPGA芯片内完成,利用 SOPC技术,在一片 FPGA 芯片上实现了整个信号源的硬件开发平台,达到既简化电路设计、又提高系统稳定性和可靠性的目的。
上传时间: 2013-11-06
上传用户:songkun