微机原理课程设计_第1页
微机原理课程设计_第2页
微机原理课程设计_第3页
微机原理课程设计_第4页
微机原理课程设计_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录:1、 设计的目的和意义2、 主要功能3、 硬件电路设计4、 软件设计5、 部分代码6、 课程设计体会7、 参考文献一、课程设计的目的和意义1、设计的目的1) 了解设计要求2) 独立完成设计任务 3) 绘制系统硬件总框图4) 绘制系统原理电路图5) 制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;6) 制定编写调试方案,编写用户操作使用说明书7) 写出设计工作小结。对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研修方向。2、 意义现代的电子时钟

2、是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于1秒的定义,通过计数方式进行满60秒分钟进1,满60分小时进1,满24小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。二、主要功能 电子钟设计一个简单的单片机编程设计,要求电子钟软件程序必须具备测

3、温、时钟和音乐功能。三、硬件电路设计1、部分原件使用说明中文名1602字符液晶VSS一般接地VDD接电源BLA背光电源正极BLK背光电源负极显示16x02即32个字符(1)简介1602 字符型 LCD 模块的应用非常广泛,而各种液晶厂家均有提供几乎都是同样规格的 1602 模块或 兼容模块,尽管各厂家的对其各自的产品命名不尽相同;1602 字符型 LCD 模块最初采用的 LCD 控制器采 用的是 HD44780,在各厂家生产的 1602 模块当中,基本上也都采用了与之兼容的控制 IC,所以从特性上 基本上是一样的;当然,很多厂商提供了不同的字符颜色、背光色之类的显示模块。 (2) 操作1602

4、 液晶的基本的操作分为以下四种: 状态字读操作:输入 RS=低、RW=高、EP=高; 输出:DB07 读出为状态字; 数据读出操作:输入 RS=高、RW=高、EP=高; 输出:DB07 读出为数据; 指令写入操作:输入 RS=低、RW=低、EP=上升沿; 输出:无; 数据写入操作:输入 RS=高、RW=低、EP=上升沿; 输出:无。(3) 指令/*显示模式指令*/#define LCD_Display_mode 0X38 /设置16x2显示 5x7点阵 8位数据接口/*显示开/关及光标设置*/#define LCD_shows0 0X0C /开显示 不显示光标 光标不闪烁#define LCD

5、_shows2 0X0E /开显示 显示光标 光标不闪烁#define LCD_shows1 0X0F /开显示 显示光标 光标 闪烁#define LCD_shows3 0X08 /关显示 不显示光标 光标不闪烁/*指针设置*/#define LCD_cursor1 0X04 /写一个字符 地址指针减1#define LCD_cursor2 0X05 /写一个字符 地址指针减1 并屏幕右移#define LCD_cursor3 0X06 /写一个字符 地址指针加1#define LCD_cursor4 0X07 /写一个字符 地址指针加1 并屏幕左移/*清屏指令*/#define LCD_c

6、lear 0x01 /清屏指令 数据指针清零 所有显示清零/*忙状态字*/#define LCD_WAY 0x80 /状态字/*宏定义显示起始地址*/#define LCD_ADDH 0X80 /第一行地址0x80-0xA7#define LCD_ADDL 0XC0 /第二行地址0xC0-0xE7/*IO口定义*/#define LCD1602_DATA P0 /宏定义8位数据线IO为P0口 D0D7=P00P07 8位数据线 D0=P00;sbit LCD1602_RS=P25; /数据/命令选择端(H/L)sbit LCD1602_RW=P26; /读/写选择端(H/L)sbit LCD1

7、602_E =P27; /使能信号/*函数声明*/void LCD1602_init(); /液晶初始化函数void LCD1602_writecd(bit lcd_rs, uchar LCD1602_d);/写命令/数据 函数bit lcd_rs是数据还是命令 uchar LCD1602_d要写入的数据uchar LCD1602_readway(); /读忙状态函数 由写入和读取函数调用uchar LCD1602_readata(); /读数据函数void LCD_DELAY(uchar LCD_delay); /*液晶初始化函数*/void LCD1602_init() /液晶初始化函数

8、LCD_DELAY(LCD_15MS); /延时15MS 初始化LCD1602_writecd(LCD1602_COM,LCD_Display_mode);/写指令38H 设置16x2显示 5x7点阵 8位数据接口LCD1602_writecd(LCD1602_COM,LCD_shows0); /开显示 不显示光标 光标不闪烁LCD1602_writecd(LCD1602_COM,LCD_cursor1); /检查忙状态LCD1602_writecd(LCD1602_COM,LCD_clear); /写指令01H:显示清屏/*液晶写命令/数据函数*/void LCD1602_writecd(b

9、it lcd_rs, uchar LCD1602_cd)/写命令/数据 函数 uchar LCD1602_NUM; /定义变量用来液晶无忙回答的退出死循环LCD1602_NUM=255; /忙状态检测次数while(LCD1602_readway() /检查忙状态LCD1602_NUM-; /检测次数自减if(LCD1602_NUM=0) /判断检测次数等于0break; /退出循环判断忙LCD1602_RW = LCD1602_L; /读/写选择端(H/L)LCD1602_RS = lcd_rs; /数据/命令选择端(H/L)LCD1602_DATA= LCD1602_cd; /IO口赋值L

10、CD1602_E = LCD1602_H; /拉高使能信号开始传输数据LCD1602_E = LCD1602_L; /拉低使能信号锁存数据LCD1602_DATA= 0xff; /IO口数据清除/*忙状态读取函数*/uchar LCD1602_readway()/读状态函数由写入和读取函数调用 uchar LCD1602_way; /状态字变量LCD1602_DATA=0xff; /IO口数据清除LCD1602_RS = LCD1602_COM; /数据/命令选择端(H/L) 命令LCD1602_RW = LCD1602_H; /读/写选择端(H/L)LCD1602_E = LCD1602_H

11、; /拉高使能信号开始接收状态LCD1602_way =LCD1602_DATA; /读取状态LCD1602_E = LCD1602_L; /拉低使能信号锁存数据LCD1602_way =LCD1602_way&LCD_WAY;/取忙状态字return(LCD1602_way); /返回状态字/*液晶读数据函数*/uchar LCD1602_readata()/读数据函数 uchar LCD1602_data; /数据暂存变量while(LCD1602_readway(); /检查忙状态 -LCD1602_DATA=0xff; /IO口数据清除LCD1602_RS = LCD1602_DAT;

12、 /数据/命令选择端(H/L) 数据LCD1602_RW = LCD1602_H; /读/写选择端(H/L)LCD1602_E = LCD1602_H; /拉高使能信号开始接收状态LCD1602_data= LCD1602_DATA; /读取状态LCD1602_E = LCD1602_L; /拉低使能信号锁存数据return(LCD1602_data); /返回数据/*延时函数*/void LCD_DELAY(uchar LCD_delay)/ uchar lcd_del;while(LCD_delay-) /自减lcd_del=100;while(lcd_del-);中文名DS1302外文名

13、DS1302公司DALLAS公司国家美国类型时钟芯片(1) 简介DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。(2) 操作控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则

14、不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数 据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,位1表示进行读操作,控制字节总是从最低位开始输出。(3) 结论DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据 的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具 体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用

15、单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。外文名DS18B20体积小硬件开销低抗干扰能力强工作电压3V5.5V超低功耗静态功耗3uA(1) 简介DS1820数字温度计提供9位温度读数,指示器件的温度。信息经过单线接口送入DS1820或从DS1820送出,因此从中央处理器到DS1820仅需连接一条线(和地)。读、写和完成温度变换所需的电源可以有数据线本身提供,而不需要外部电源。因为每个DS1820有唯一的系列号(silicon serial

16、number),因此多个DS1820可以存在于同一条单线总线上。这允许在许多不同的地方放置温度灵敏器件。此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测,以及过程监视和控制中的温度检测。(2) 操作根据定义,单线总线只有一根线;这一点是重要的,即线上的第一个器件能在适当的时间驱动该总线。为了做到这一点,第一个连接到单线总线上的器件必须具有漏极开路或三态输出。DS1820的单线接口(I/O引脚是漏极开路的)。多站(multidrop)总线由单线总线和多个与之相连的从属器件组成。单线总线要求近似于5K的上拉电阻。单线总线的空闲状态是高电平。不管任何原因,如果执行需要被挂起,那么

17、,若要重新恢复执行,总线必须保持在空闲状态。如果不满足这一点且总线保持在低电平时间大于480us,那么总线上的所有器件均被复位。存在脉冲(presence pulse)使总线主机知道DS1820在总线上并已准备好工作。(3) 结论独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 C至+125 。华氏相当于是-67 F到257华氏度 -10 C至+85 C范围内精度为0.5 C温度传感器可编程的分辨率为912位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失

18、性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数)。由于DS18B20是一条口线通信,所以中央微处理器与 DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包 括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM 设定,否则记忆

19、和控制功能将无法使用。主要首先提供以下功能命令之一: 1 )读ROM, 2 )ROM匹配, 3 )搜索ROM, 4 )跳过ROM, 5 )报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多 少,什么样的设备。若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的 存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储 器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报

20、警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令 以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。中文名stc89c51工作电压3.4V-5.5V工作频率范围0-35MHz计数器2个16位引脚40(1)简介STC89C51RC/RD+系列单片机是STC推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择,HD版本和90C版本内部集成MAX810专用复位电路。(2) 操作STC89C51RC/RD+系列单片机所有

21、I/O口均(新增P4口)有三种工作类型:准双向口/弱上拉(标准8051输出模式)、仅为输入(高阻)或开漏输出功能。STC89C51RC/RD+系列单片机的P1/P2/P3/P4上复位后为准双向口/弱上拉(传统8051的I/O口)模式,P0口上电复位后是开漏输出。P0口作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加10K-4.7K上拉电阻。STC89C51RC/RD+的5V单片机的P0口的灌电流最大为12mA,其他I/O口的灌电流最大为6mA。STC89LE51RC/RD+的3V单片机的P0口的灌电流最大为8mA,其他I/O口的灌电流最大为4mA。(3) 结论STC89C51RC是采用

22、8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810

23、 专用复位电路。2、流程图3、原理图多功能时钟 元件清单器件名称数量在原理图中的标号1k 电阻3R5, R7, R94.7K 电阻1R110K 电阻5R4, R6, R8, R10, R1110k 排阻1R310uF 电解电容1C112M 晶振1Y232.768K 晶振1Y133p 电容2C2, C38550 三极管1Q1AT89C51 单片机1U3蜂鸣器1LS1电源开关1S2电源端子1J1DS1302 时钟芯片1U2DS18B20 温度传感器1U4LCD1602 字符液晶1U1指示灯 3D1, D2, D310K 电位器1R2无锁轻触开关5S1, S3, S4, S5, S64、PCB图纸5

24、、仿真图4、 软件设计1、部分代码#include #include #include /* 液晶引脚定义 */#define LCD_DB P0sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /* 温度传感器引脚定义 */sbit DSA=P13; /* 时钟芯片引脚定义 */sbit IO=P10;sbit SCLK=P11;sbit RST=P12;/* 独立按键引脚定义 */sbit KeyOne = P32;sbit KeyThree = P33; sbit KeyTwo = P34;sbit KeyFour = P35;/* 第0

25、位 第八位 位操作 */sbit ACC0=ACC0;sbit ACC7=ACC7;/* 报警指示引脚定义 */sbit Red = P36;sbit Green = P37;sbit Beep = P14;/* 时钟芯片寄存器定义 */#define write_second 0x80#define write_minute 0x82#define write_hour 0x84#define write_day 0x86#define write_month 0x88#define write_week 0x8a#define write_year 0x8c/* 按键状态 */enum K

26、EYSTART/* 按键键值 */enum KEYCONFIG/* 逻辑变量定义 */unsigned char miao=0,shi=0,fen=0,ri=0,yue=0,nian=0,week=0;extern unsigned char miao,shi,fen,ri,yue,nian,week;unsigned int TempVal=0,AlarmFlag=0;unsigned char YearData=0,MonthData=0,DayData=0,WeekData=0,HourData=0,MinuteData=0,AlarmH=0,AlarmM=0;/* n*10微妙延时 *

27、/void delay_n10us(unsigned int n) /* 写命令函数 */void LCD_write_command(unsigned char dat)/* 写数据函数 */void LCD_write_data(unsigned char dat)/* 写字符函数 X:015 Y:1,2 */void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)/* 写一串字符 X:015 Y:1,2 */void LCD_disp_str(unsigned char x,unsigned char y,

28、unsigned char *str)/* 液晶初始化 */void LCD_init(void)/* 温度传感器最小单位延时 */void delayA(unsigned int Delay)/* 温度传感器复位操作 */void dsresetA(void) /* 读温度传感器一位数据信息 */bit tmpreadbitA(void) /* 读温度传感器八位数据信息 */unsigned char tmpreadA(void) /* 写温度传感器八位数据信息 */void tmpwritebyteA(unsigned char dat) /* 温度转换 */void tmpchangeA

29、(void) /* 读取温度寄存器转换数据 */unsigned int gettmpA(void) /* 写时钟芯片八位数据信息 */void write_byte(unsigned char dat)/* 读时钟芯片八位数据信息 */unsigned char read_byte()/* 在时钟芯片指定位置写指定数据 */void write_1302(unsigned char add,unsigned char dat)/* 读取时钟芯片指定地址的数据信息 */unsigned char read_1302(unsigned char add)/* 时钟芯片数据转换 */unsigne

30、d char BCD_Decimal(unsigned char bcd)/* 时钟芯片初始化操作 */void ds1302_init() /* 设置时钟芯片参数信息 */void Set_RTC(unsigned char address,unsigned char temp) /* 提取时钟芯片时间信息 */void GetTime(void)/* 按键小抖动操作 */void DelayKey(void)/* 读取按键键值 */unsigned char KeyProcess(void)/* 定时器配置 */void init() /定时器、计数器设置函数/* 外围硬件初始化 */vo

31、id HandInit(void)/* 年月日信息显示 */void show_Data(void)/* 时分秒温度信息显示 */void Show_Time(void)/* 设置年参数 */void Set_Year(void)/* 设置月参数 */void SetMonth(void)/* 设置日参数 */void SetDay(void)/* 设置周期参数 */void SetWeek(void)/* 设置小时参数 */void SetHour(void)/* 设置分钟参数 */void SetMinute(void)/* 设置闹钟小时参数 */void SetAlarH(void)/*

32、 设置闹钟分钟参数 */void SetAlarM(void)/* 逻辑信息处理 */void Process(void) /* 取得并显示日历和时间 */void timer0() interrupt 1 /* 主函数 */void main(void)5、 课程设计体会通过本次实验,让我对STC89C51RC/RD+系列单片机有了更好的了解,懂得如何去使用定时器计数器,中断,串行口,数码管显示,按键等知识,让自己对单片机产生了更大的兴趣。能够完全实现数字钟的功能,让自己所学的东西应用到实践中,感觉到了单片机的重要性。能够通过单片机,完成各种成品的设计。通过本次设计,我们系统的了解了实时时钟

33、的设计流程,尤其是硬、软件的设计方法,掌握了键盘显示电路的基本功能及编程方法,掌握了键盘电路和显示电路的一般原理,也进一步掌握了定时器的使用和中断处理器程序的编程方法。开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。在调试电路的过程中也积累了一些宝贵的经验,比如说,在I/O口要保证标准的高电平”1”的产生,一般要上拉电阻5.1k,在一些需要高电平的地方,不能用悬空来模拟,必须严格的按照“+5v”来连接,特别是调试过程中的分部分进行很重要。此次单片机课程设计,从理论到实践,学到了很多的东西。同时不仅巩固了以前所学过的知识,而且还学到了很多在

34、书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。单片机课程设计虽然结束了,但通过设计所学到的东西将长久存在。相信这次设计带给我们的严谨的学习态度和一丝不苟的科学作风将会给我们未来的工作和学习打下一个更坚实的基础单片机课程设计,是对单片机知识的验证,可以帮助我们理解巩固所学知识,激

35、发我们对单片机课程的兴趣,更锻炼了我们独立思考、开拓创新的能力。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。最后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改

36、进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。还有要感谢指导老师在我们遇到困难时,给予我们的建议与鼓励。6、 参考文献(1) 何立民.单片机应用技术大全.北京:北京航空航天大学出版社, 1994(2) 潘永雄.新编单片机原理与应用M,西安:西安电子科技大学出版社,2003.2.(3) 彭小军.用单片机实现电子时钟J.新余高专学报,2004年4月第9卷第2期(4) 邱大雄.单片机基础

37、.北京:原子能出版社,1992:53-58 (5) 彭小军.用单片机实现电子时钟J.新余高专学报,2004年4月第9卷第2期附录:全程序代码#include #include #include /* 液晶引脚定义 */#define LCD_DB P0sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /* 温度传感器引脚定义 */sbit DSA=P13; /* 时钟芯片引脚定义 */sbit IO=P10;sbit SCLK=P11;sbit RST=P12;/* 独立按键引脚定义 */sbit KeyOne = P32;sbit KeyTh

38、ree = P33; sbit KeyTwo = P34;sbit KeyFour = P35;/* 第0位 第八位 位操作 */sbit ACC0=ACC0;sbit ACC7=ACC7;/* 报警指示引脚定义 */sbit Red = P36;sbit Green = P37;sbit Beep = P14;/* 时钟芯片寄存器定义 */#define write_second 0x80#define write_minute 0x82#define write_hour 0x84#define write_day 0x86#define write_month 0x88#define w

39、rite_week 0x8a#define write_year 0x8c/* 按键状态 */enum KEYSTARTKEYDOWN,KEYUP,;/* 按键键值 */enum KEYCONFIGKEYINIT,KEYYEAR,KEYMONTH,KEYDAY,KEYWEEK,KEYHOUR,KEYMINTH,KEYALARH,KEYALARM,;/* 逻辑变量定义 */unsigned char miao=0,shi=0,fen=0,ri=0,yue=0,nian=0,week=0;extern unsigned char miao,shi,fen,ri,yue,nian,week;unsi

40、gned int TempVal=0,AlarmFlag=0;unsigned char YearData=0,MonthData=0,DayData=0,WeekData=0,HourData=0,MinuteData=0,AlarmH=0,AlarmM=0;/* n*10微妙延时 */void delay_n10us(unsigned int n) unsigned int i=0; for(i=n;i0;i-) _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); /* 写命令函数 */void LCD_write_command(unsign

41、ed char dat)delay_n10us(10);LCD_RS=0; LCD_RW=0; LCD_E=1; LCD_DB=dat;delay_n10us(10); LCD_E=0;delay_n10us(10); /* 写数据函数 */void LCD_write_data(unsigned char dat)delay_n10us(10);LCD_RS=1; LCD_RW=0; LCD_E=1; LCD_DB=dat;delay_n10us(10);LCD_E=0;delay_n10us(10);/* 写字符函数 X:015 Y:1,2 */void LCD_disp_char(uns

42、igned char x,unsigned char y,unsigned char dat)unsigned char address=0;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/* 写一串字符 X:015 Y:1,2 */void LCD_disp_str(unsigned char x,unsigned char y,unsigned char *str)unsigned char address=0;if(y=1)address=0x80+x;els

43、eaddress=0xc0+x;LCD_write_command(address);while(*str!=0) LCD_write_data(*str); str+;/* 液晶初始化 */void LCD_init(void)delay_n10us(10);LCD_write_command(0x38);delay_n10us(10);LCD_write_command(0x0c);delay_n10us(10);LCD_write_command(0x06);delay_n10us(10);LCD_write_command(0x01);delay_n10us(100); /* 温度传感

44、器最小单位延时 */void delayA(unsigned int Delay)unsigned int i=0,j=0;for(i=Delay;i0;i-)for(j=120;j0;j-);/* 温度传感器复位操作 */void dsresetA(void) unsigned int i=0; DSA=0; i=103; while(i0)i-; DSA=1; i=4; while(i0)i-;/* 读温度传感器一位数据信息 */bit tmpreadbitA(void) unsigned int i=0; bit dat=0; DSA=0; i+; DSA=1; i+; i+; dat=

45、DSA; i=8; while(i0)i-; return (dat);/* 读温度传感器八位数据信息 */unsigned char tmpreadA(void) unsigned char i=0,j=0,dat=0; for(i=1;i=8;i+) j=tmpreadbitA(); dat=(j1); return(dat);/* 写温度传感器八位数据信息 */void tmpwritebyteA(unsigned char dat) unsigned int i=0; unsigned char j=0; bit testb=0; for(j=1;j1; if(testb) /writ

46、e 1 DSA=0; i+; i+; DSA=1; i=8; while(i0)i-; else DSA=0; /write 0 i=8; while(i0)i-; DSA=1; i+; i+; /* 温度转换 */void tmpchangeA(void) dsresetA(); delayA(1); tmpwritebyteA(0xcc); tmpwritebyteA(0x44); /* 读取温度寄存器转换数据 */unsigned int gettmpA(void) float tt=0; unsigned char a=0,b=0;unsigned int tempA=0; dsres

47、etA(); delayA(1); tmpwritebyteA(0xcc); tmpwritebyteA(0xbe); a=tmpreadA(); b=tmpreadA(); tempA=b; tempA0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;/* 读时钟芯片八位数据信息 */unsigned char read_byte()unsigned char a=0;RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);/* 在时钟芯片指定位置写指定数据 */void write_1302(un

48、signed char add,unsigned char dat)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;/* 读取时钟芯片指定地址的数据信息 */unsigned char read_1302(unsigned char add)unsigned char temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);/* 时钟芯片数据转换 */unsigned char BCD_Decimal(un

49、signed char bcd) unsigned char Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);/* 时钟芯片初始化操作 */void ds1302_init() RST=0;SCLK=0;write_1302(0x8e,0x00); write_1302(0x8e,0x80); /* 设置时钟芯片参数信息 */void Set_RTC(unsigned char address,unsigned char temp) unsigned char tmp=0; tmp=temp/10;temp=temp%10;temp=temp+tmp*16;write_1302(0x8E,0X00);write_1302(address,temp&0x7f); write_1302(0x8E,0x80);/* 提取时钟芯片时间信息 */void GetTime(void)miao = BCD_Decimal(read_1302(0x81);fen = BCD_Decimal(read_1302(0x83);shi = BCD_Decimal(read_1302(0x85);ri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论