基于lpc922单片机的电子钟温度计设计(3)

2020-02-21 13:37

附录一:系统电路图

11

附录二:硬件电路程序

#include #include #include

#define uchar unsigned char #define uint unsigned int

//实际硬件电路源代码

uchar code TABLE2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极 uint lastday,temp,i,alarmcount,judgealarm,judgetemp,judgeupdate,update; uint second,minute,hour,week,day,month,year;//十六进制

uint Dsecond,Dminute,Dhour,Dweek,Dday,Dmonth,Dyear;//十进制 uint savesecond=100,saveminute=100,savehour=100; //闹钟存储时间 uchar BCD[]={0,0,0,0},swap[]={1,1,1,1,1,1,1};

sbit tempnum=P0^7; sbit TIMERST=P1^0; sbit TIMEIO=P1^1; sbit TIMECLK=P1^2; sbit D4=P1^3; sbit D5=P1^4;

sbit key_sure=P1^5;//调时或确认键 sbit key_inc=P1^6;//调时加键 sbit key_dec=P1^7;//调时减键 sbit sck=P3^0;

sbit alarmclock=P3^1; sbit cs=P3^3;

sbit showtemp=P3^4; sbit showymd=P3^5; sbit clock=P3^6; sbit sio=P3^7;

unsigned char cort=0;//判断第几次按下确认键 bit first_sure=0; //第一次按下确认键 bit second_sure=0;//第二次按下确认键 bit third_sure=0; //第三次按下确认键 bit fourth_sure=0;//第四次按下确认键 bit fifth_sure=0; //第五次按下确认键 bit sixth_sure=0; //第六次按下确认键 bit seventh_sure=0;//第七次按下确认键

//////////////////////////////////////////////////////////////////*温度处理函数*/ int lm71()

12

{

unsigned char data i; int data j,k;

sio=1; cs=0; i=16;

while(i!=0) {

j=j<<1; //将温度值的高位往左移 sck=0;

k=sio; //读温度值的每一位(共16位) j=j|k; //累加温度值的每一位 sck=1; i--; } cs=1; return j; }

//////////////////////////////////////////////////////////////////////////DS1302时间处理函数 //DS1302读写C51源程序

//------------------------------------------------ //打开DS1302

void TimeSpiOpen(void) {

TIMECLK = 0;

TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMERST = 1;//使能DS1302 }

//关闭DS1302

void TimeSpiClose(void) {

TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMECLK = 1; }

//读写DS1302

unsigned char TimeSpiReadWrite(unsigned char val) {

unsigned char data i,j,k;

j= val; //取8位数据 for (i = 8;i > 0; i--) {

TIMECLK = 0; //时钟下降沿输入数据(DS1302读)

13

k=k>>1;

if(TIMEIO) //接收串行数据到CY {

k=k|0x80; }

TIMEIO = j&0x01; //发送串行数据 j=j>>1;

TIMECLK = 1; //时钟上升沿打入数据(DS1302写) TIMEIO = 1; //释放数据总线 }

return k; }

//读DS1302时钟字节

unsigned char TimeByteRead(unsigned char address) {

unsigned char data i;

TimeSpiOpen();//打开DS1302

TimeSpiReadWrite(address);//写入DS1302命令 i = TimeSpiReadWrite(0xff);//读入DS1302数据 TimeSpiClose();//关闭DS1302 return i;//返回数据 }

//写DS1302时钟字节

void TimeByteWrite(unsigned char address, unsigned char val) {

TimeSpiOpen();//打开DS1302

TimeSpiReadWrite(address);//写地址 TimeSpiReadWrite(val);//写数据 TimeSpiClose();//关闭DS1302 }

//使能DS1302写保护

void TimeWriteEnable(void) {

TimeByteWrite(0x07, 0x80); //使能DS1302写保护 }

//开放DS1302写保护

void TimeWrieDisbale(void) {

TimeByteWrite(0x07, 0); //开放DS1302写保护 }

//DS1302工作开始

void TimeWorkStart(void)

14

{

unsigned char val;

val = TimeByteRead(0x81);//读秒数据 val &= 0x7f;//打开晶振

TimeWrieDisbale();//开放DS1302写保护 TimeByteWrite(0x80, val);//打开晶振

TimeByteWrite(0x90, 0xa5);//打开充电二极管 TimeWriteEnable();//使能DS1302写保护 }

//DS1302时间初始化 /*void DS1302Inital(void) {

TimeByteWrite(0x80,0x12); //秒 TimeByteWrite(0x82,0x58); //分 TimeByteWrite(0x84,0x23); //时 TimeByteWrite(0x8a,0x07); //星期 TimeByteWrite(0x86,0x30); //日 TimeByteWrite(0x88,0x04); //月 TimeByteWrite(0x8c,0x10); //年 } */

/////////////////////////////////////////////////////////////////////////////显示函数群 /******************************************* 返回值:BCD数组

*******************************************/ //十六进制转化为BCD码

uchar XCOUNT_INT_BCD(uint temp) { uint div; div=16; BCD[1]=temp/16; BCD[0]=temp; return BCD; }

//十进制转化为BCD码

uchar DCOUNT_INT_BCD(uint temp) { uint div; uchar i; div=1000;

for(i=0;i<=3;i++) { BCD[3-i]=temp/div; temp%=div; div/=10;

15


基于lpc922单片机的电子钟温度计设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:迷人的阅读读书笔记

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: