单片机C语言模块化编程数码管显示电子万年历篇_第1页
单片机C语言模块化编程数码管显示电子万年历篇_第2页
单片机C语言模块化编程数码管显示电子万年历篇_第3页
单片机C语言模块化编程数码管显示电子万年历篇_第4页
单片机C语言模块化编程数码管显示电子万年历篇_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

单片机C语言模块化编程之数码管显示电子万年历篇单片机C语言模块化编程之数码管显示电子万年历篇单片机C语言模块化编程之数码管显示电子万年历篇数码管显示模块化显示电子万年历数码管共阳极7407驱动共阴极max7221/7419驱动Ds1302实不时间显示Ds18b20温度显示芯片/**/#ifndef_DELAY_H#define_DELAY_H_#defineuintunsignedint#defineucharunsignedcharvoiddelay(uintxms);0fCSB..CLK..sbitCSB=P2^1;sbitCLK=P2^2;sbitDIN1=P2^3;sbitCSB1=P2^4;sbitCLK1=P2^5;externvoidwrite(unsignedcharaddr,unsignedchardat);//max7221写数据,变换数据函数,num的值为1,或许2,当num为1时,片选的是第一块Max7221,同理亦然。externvoidwrite1(ucharaddr,uchardat);1externvoidinit();//max7221初始化externvoidinit1();#endif/**/#include""#include<>voidwrite(ucharaddr,uchardat)//写数据,写地点函数{uchari;CSB=0;for(i=0;i<8;i++){CLK=0;addr<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}for(i=0;i<8;i++){CLK=0;dat<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}CSB=1;}voidwrite1(ucharaddr,uchardat){uchari;CSB1=0;for(i=0;i<8;i++){2CLK1=0;addr<<=1;DIN1=CY;CLK1=1;_nop_();_nop_();CLK1=0;}for(i=0;i<8;i++){CLK1=0;dat<<=1;DIN1=CY;CLK1=1;_nop_();_nop_();CLK1=0;}CSB1=1;}voidinit(){write(0x09,0xff);//编码模式地点0x09,0x00-0xff,为1的则位选通write(0x0a,0x07);//亮度地点0x0a,0x00-0x0f,0x0f时最亮write(0x0b,0x07);//扫描数码管个数地点0x0c,最多扫描8只数码管write(0x0c,0x01);//工作模式地点0x0c0x00:封闭;0x01:正常}voidinit1(){write1(0x09,0xff);write1(0x0a,0x07);write1(0x0b,0x07);write1(0x0c,0x01);}/**/#ifndef_DS18B20_H#define_DS18B20_H3#include<>#include""#include<>#defineNOP(){_nop_(),_nop_(),_nop_(),_nop_()}sbitDQ=P1^3;//DS18B20控制线,单线模式。externbitng;//正负数标记位,ng=0,为正数,反之为负数,正数负数的办理方法不一样样,externbitDS18B20_IS_OK;//为1时表示目前读取温度正常,不然读取失败。externucharDisplay_Digit[4];//读取的温度值变换后存在这个数组中externvoidRead_Temperature();//读取目前温度值externvoidProcess_Temperature();//办理目前获取的温度值,正数,负数等。#endif/**/#include""//温度字符ucharcodeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};//温度小数比较表ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};ucharCurrentT=0;//目前读取的温度整数部分ucharTemp_Value[]={0x00,0x00};//从DS18B20读取的温度值bitng=0;//正负数标记位,ng=0,为正数,反之为负数,正数负数的办理方法不一样样,bitDS18B20_IS_OK=1;//为1时表示目前读取温度正常,不然读取失败。ucharDisplay_Digit[4]={0,0,0,0};//读取的温度值变换后存在这个数组中//-------------------------------------------------------//初始化DS18B20//-------------------------------------------------------ucharInit_DS18B20(){ucharstatus;DQ=1;delayms(8);DQ=0;delayms(90);DQ=1;delayms(8);status=DQ;delayms(100);DQ=1;returnstatus;}4//-------------------------------------------------------//读一字节//-------------------------------------------------------ucharReadOneByte(){uchari,dat=0;DQ=1;_nop_();for(i=0;i<8;i++){DQ=0;dat>>=1;DQ=1;_nop_();_nop_();if(DQ)dat|=0x80;delayms(30);DQ=1;}returndat;}//-------------------------------------------------------写一字节//-------------------------------------------------------voidWriteOneByte(uchardat){uchari;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delayms(5);DQ=1;dat>>=1;}}//----------------------------------------------------------------//读取温度值//----------------------------------------------------------------voidRead_Temperature(){if(Init_DS18B20()==1)//DS18B20故障DS18B20_IS_OK=0;else{WriteOneByte(0xCC);//跳过序列号WriteOneByte(0x44);//启动温度变换Init_DS18B20();WriteOneByte(0xCC);//跳过序列号WriteOneByte(0xBE);//读取温度存放器Temp_Value[0]=ReadOneByte();//温度低8位Temp_Value[1]=ReadOneByte();//温度高8位5DS18B20_IS_OK=1;}}//----------------------------------------------------------------//对读取的温度值进行判断,办理,负数的状况,整数状况//----------------------------------------------------------------voidProcess_Temperature(){//uchari;//延市价与负数表记//ucharng=0;//高5位全为1(0)则为负数,为负数时取反加1,并设置负数表记if((Temp_Value[1]&0xF8)==0xF8){Temp_Value[1]=~Temp_Value[1];Temp_Value[0]=~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;//负数表记置1ng=1;}elseng=0;查表获取温度小数部分Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];//获取温度整数部分(高字节中的第三位与低字节中的高四位,无符号)CurrentT=((Temp_Value[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);将整数部分分解为3位待显示数字Display_Digit[3]=CurrentT/100;Display_Digit[2]=CurrentT%100/10;Display_Digit[1]=CurrentT%10;}/**/#include""#include""#include""ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管段码共阳极6uchardisbuff[]={0,0,10,0,0,10,0,0};//第一个max7221显示缓存uchardisbuff1[]={0,0,10,0,0,10,0,0};//第二个max7221显示缓存voidinit_T()//准时器初始化{TMOD=0X01;TH0=-5000/256;TL0=-5000%256;TR0=1;ET0=1;EA=1;}voidmain()//主函数{uchari;init();init1();//第一个max7221初始化init_T();//第二个max7221初始化Read_Temperature();//先读一遍目前温度delayms(50000);//读取温度有一段时间,先让他等候一段时间不然下一刻显示的将会是错误的温度delayms(50000);delayms(50000);while(1){gettime();//读取目前时间值disbuff[0]=datetime[2]/10;//将获取的时间值分解出来disbuff[1]=datetime[2]%10;disbuff[3]=datetime[1]/10;disbuff[4]=datetime[1]%10;disbuff[6]=datetime[0]/10;disbuff[7]=datetime[0]%10;disbuff1[0]=datetime[6]/10;disbuff1[1]=datetime[6]%10;disbuff1[3]=datetime[4]/10;disbuff1[4]=datetime[4]%10;disbuff1[6]=datetime[3]/10;disbuff1[7]=datetime[3]%10;for(i=0;i<8;i++)//第一个max7221显示{write(i+1,disbuff1[i]);}7for(i=0;i<8;i++)//第二个max7221显示{write1(i+1,disbuff[i]);}Read_Temperature();//再次读取目前温度if(DS18B20_IS_OK)//假如读取成功{Process_Temperature();//对温度进行办理,特别要考虑的是负数的状况delayms(50000);//延时等温度显示坚固了再次读取,这个值要取适合,不然数码管显示会出现闪耀状况delayms(50000);delayms(50000);}}}voidTimer0_1()interrupt1//为了防范温度显示在数码管上出现闪屏的状况,这里使用准时器来显示目前温度。{staticnum=0;TH0=-3000/256;//这个数值要足够的小,这样扫描次数才会更多,显示才会更坚固TL0=-3000%256;P3=0x00;//每次进来时候要让位码清空,也叫做消影switch(num)//经过一个Switch语句来实现对数码管的扫描{case0://在数码管上显示目前温度值{P0=table[Display_Digit[0]];//小数后边的一位P3=0x20>>0;}break;case1:{P0=table[Display_Digit[1]]&0x7f;//有小数点的位要&0x7fP3=0x20>>1;//小数位,个为}break;case2://十位{if(Display_Digit[2]==0)8{if(Display_Digit[3]==0)//若十位为零且百位也为零,则都显示十位为空P0=0xff;P0=0xff;}elseP0=table[Display_Digit[2]];//不然,正常显示目前十位的值P3=0x20>>2;}break;case3:{if(Display_Digit[3]==0)//若百位为零,则不显示,P0=0xff;else//不然正常显示P0=table[Display_Digit[3]];P3=0x20>>3;}break;case4://显示口{P0=~0x63;P3=0x80;}break;case5://固定显示C{P0=~0x39;

温馨提示

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

评论

0/150

提交评论