时钟程序 51单片机 时间可设定_第1页
时钟程序 51单片机 时间可设定_第2页
时钟程序 51单片机 时间可设定_第3页
时钟程序 51单片机 时间可设定_第4页
时钟程序 51单片机 时间可设定_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!/*时钟设置按键由P2.3口输入加1按键由P2.2口输入*/#include<reg51.h>#defineu8unsignedchar#defineucharunsignedchar#defineu16unsignedint#defineuintunsignedintsbitSCLK=P1^4;sbitSDIN=P1^5;sbitDC=P1^6;sbitSCE=P1^7;voidWr_LCD_byte(u8dat,u8cmd);voidSet_LCD_XY(u8X,u8Y);voidClr_LCD(void);voidWr_LCD_chr(u8col,u8row,u8ch);voidLCD_Init(void);voiddelayms(unsignedintm);ucharkeyscan(void);unsignedcharcodechr[]={0x00,0x00,0x00,0x00,0x00,0x00,//00x00,0x7F,0x7F,0x7F,0x7F,0x7F,//█10x00,0x3E,0x51,0x49,0x45,0x3E,//020x00,0x00,0x42,0x7F,0x40,0x00,//130x00,0x42,0x61,0x51,0x49,0x46,//240x00,0x21,0x41,0x45,0x4B,0x31,//350x00,0x18,0x14,0x12,0x7F,0x10,//460x00,0x27,0x45,0x45,0x45,0x39,//570x00,0x3C,0x4A,0x49,0x49,0x30,//680x00,0x01,0x71,0x09,0x05,0x03,//790x00,0x36,0x49,0x49,0x49,0x36,//8100x00,0x06,0x49,0x49,0x29,0x1E,//9110x00,0x7C,0x12,0x11,0x12,0x7C,//A120x00,0x7F,0x49,0x49,0x49,0x36,//B130x00,0x3E,0x41,0x41,0x41,0x22,//C140x00,0x7F,0x41,0x41,0x22,0x1C,//D150x00,0x7F,0x49,0x49,0x49,0x41,//E160x00,0x7F,0x09,0x09,0x09,0x01,//F170x00,0x3E,0x41,0x49,0x49,0x7A,//G180x00,0x7F,0x08,0x08,0x08,0x7F,//H190x00,0x00,0x41,0x7F,0x41,0x00,//I200x00,0x20,0x40,0x41,0x3F,0x01,//J210x00,0x7F,0x08,0x14,0x22,0x41,//K220x00,0x7F,0x40,0x40,0x40,0x40,//L230x00,0x7F,0x02,0x0C,0x02,0x7F,//M240x00,0x7F,0x04,0x08,0x10,0x7F,//N250x00,0x3E,0x41,0x41,0x41,0x3E,//O260x00,0x7F,0x09,0x09,0x09,0x06,//P270x00,0x3E,0x41,0x51,0x21,0x5E,//Q280x00,0x7F,0x09,0x19,0x29,0x46,//R290x00,0x46,0x49,0x49,0x49,0x31,//S300x00,0x01,0x01,0x7F,0x01,0x01,//T310x00,0x3F,0x40,0x40,0x40,0x3F,//U320x00,0x1F,0x20,0x40,0x20,0x1F,//V330x00,0x3F,0x40,0x38,0x40,0x3F,//W340x00,0x63,0x14,0x08,0x14,0x63,//X350x00,0x07,0x08,0x70,0x08,0x07,//Y360x00,0x61,0x51,0x49,0x45,0x43,//Z370x00,0x20,0x54,0x54,0x54,0x78,//a380x00,0x7F,0x48,0x44,0x44,0x38,//b390x00,0x38,0x44,0x44,0x44,0x20,//c400x00,0x38,0x44,0x44,0x48,0x7F,//d410x00,0x38,0x54,0x54,0x54,0x18,//e420x00,0x08,0x7E,0x09,0x01,0x02,//f430x00,0x18,0xA4,0xA4,0xA4,0x7C,//g440x00,0x7F,0x08,0x04,0x04,0x78,//h450x00,0x00,0x44,0x7D,0x40,0x00,//i460x00,0x40,0x80,0x84,0x7D,0x00,//j470x00,0x7F,0x10,0x28,0x44,0x00,//k480x00,0x00,0x41,0x7F,0x40,0x00,//l490x00,0x7C,0x04,0x18,0x04,0x78,//m500x00,0x7C,0x08,0x04,0x04,0x78,//n510x00,0x38,0x44,0x44,0x44,0x38,//o520x00,0xFC,0x24,0x24,0x24,0x18,//p530x00,0x18,0x24,0x24,0x18,0xFC,//q540x00,0x7C,0x08,0x04,0x04,0x08,//r550x00,0x48,0x54,0x54,0x54,0x20,//s560x00,0x04,0x3F,0x44,0x40,0x20,//t570x00,0x3C,0x40,0x40,0x20,0x7C,//u580x00,0x1C,0x20,0x40,0x20,0x1C,//v590x00,0x3C,0x40,0x30,0x40,0x3C,//w600x00,0x44,0x28,0x10,0x28,0x44,//x610x00,0x1C,0xA0,0xA0,0xA0,0x7C,//y620x00,0x44,0x64,0x54,0x4C,0x44,//z630x00,0x00,0x60,0x60,0x00,0x00,//.640x00,0x00,0x36,0x36,0x00,0x00,//:650x00,0x00,0x41,0x22,0x14,0x08,//>660x00,0x00,0x00,0x2f,0x00,0x00,//!670x00,0x00,0x07,0x00,0x07,0x00,//"680x00,0x14,0x7f,0x14,0x7f,0x14,//#690x00,0x24,0x2a,0x7f,0x2a,0x12,//$700x00,0x62,0x64,0x08,0x13,0x23,//%710x00,0x36,0x49,0x55,0x22,0x50,//&720x00,0x00,0x05,0x03,0x00,0x00,//'730x00,0x00,0x1c,0x22,0x41,0x00,//(740x00,0x00,0x41,0x22,0x1c,0x00,//)750x00,0x14,0x08,0x3E,0x08,0x14,//*760x00,0x08,0x08,0x3E,0x08,0x08,//+770x00,0x00,0x00,0xA0,0x60,0x00,//,780x00,0x08,0x08,0x08,0x08,0x08,//-790x00,0x40,0x40,0x40,0x40,0x40,//_800x00,0x20,0x10,0x08,0x04,0x02,///810x00,0x00,0x7F,0x41,0x41,0x00,//[820x00,0x00,0x41,0x41,0x7F,0x00,//]820x00,0x04,0x02,0x01,0x02,0x04,//^84};/*-------------------------------------wr_LCD_byte:通过SPI端口向LCD5110写入数据输入参数:dat(byte):写入的数据cmd(0、1):指令0,数据1-------------------------------------*/voidWr_LCD_byte(u8dat,u8cmd){ unsignedchari;SCE=0; DC=cmd; for(i=0;i<8;i++){if(dat&0x80) SDIN=1;else SDIN=0;dat=dat<<1; SCLK=0; SCLK=1;} DC=1; SCE=1; SDIN=1;}/*---------------------------set_LCD_XY:设置光标位置输入参数:X(0-83)、Y(0-5)---------------------------*/voidSet_LCD_XY(u8X,u8Y){Wr_LCD_byte(0x40|Y,0);Wr_LCD_byte(0x80|X,0);}/*------------------clr_LCD:LCD5110清屏------------------*/voidClr_LCD(void){unsignedcharc,r; Set_LCD_XY(0,0); for(r=0;r<6;r++) {for(c=0;c<84;c++) { Wr_LCD_byte(0x00,1); } }}/*-------------------------------------------wr_LCD_chr:显示8*16大小的半角字符输入函数:col(0-9):显示位置-列row(0-5):显示位置-行ch:(0-39):字符位置(位于数组chr中)-------------------------------------------*/voidWr_LCD_chr(u8col,u8row,u8ch){unsignedchari;Set_LCD_XY(col*6,row); for(i=0;i<6;i++) { Wr_LCD_byte(chr[ch*6+i],1); }} /*----------------------LCD_init:LCD5110初始化----------------------*/voidLCD_Init(void){ Wr_LCD_byte(0x21,0);//初始化LCD,功能设定使用扩充指令 Wr_LCD_byte(0xc8,0);//设定液晶偏置电压 Wr_LCD_byte(0x20,0);//使用基本指令 Wr_LCD_byte(0x0C,0);//设定显示模式,正常显示}voiddelayms(unsignedintm)//延时程序{unsignedinti;while(--m)for(i=0;i<372;i++);}/*------------------------------------------------键盘扫描程序------------------------------------------------*/ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法{ucharcord_h,cord_l;//行列值中间变量P3=0x0f;//行线输出全为0cord_h=P3&0x0f;//读入列线值if(cord_h!=0x0f)//先检测有无按键按下{delayms(10);//去抖if(cord_h!=0x0f){cord_h=P3&0x0f;//读入列线值P3=cord_h|0xf0;//输出当前列线值cord_l=P3&0xf0;//读入行线值return(cord_h+cord_l);//键盘最后组合码值}}return(0xff);//返回该值}#defineSETUPCTRL0xF7#definePLUSCTRL0xFB#defineNONE0xFD#defineMENUCTRL0xFEucharscreen[6][14]={0};//6×14列屏幕内容数组uchartime1Counter=0;//定时器1计数器uintdpyCounter=0;//用于控制光标处闪烁ucharhour=23;//小时初始化ucharminute=59;//分钟初始化ucharsecond=0;//秒初始化ucharcol;ucharrow=2;//显示在第3行ucharsetupFlag=0;//设置标志sbitLED0=P0^0;sbitLED1=P0^1;sbitLED2=P0^2;sbitLED3=P0^4;sbitLED=P0^7;/*------------------------------------------------定时器1初始化子程序------------------------------------------------*/voidInit_Timer1(void) //定时50ms{TMOD|=0x10; //使用模式1,16位定时器TH1=(65536-50000)/256;//给定初值,定时器计数50ms溢出TL1=(65536-50000)%256;EA=1;//总中断打开ET1=1;//定时器中断打开TR1=1;//定时器开关打开}/*------------------------------------------------定时器1中断子程序------------------------------------------------*/voidTimer1_isr(void)interrupt3using2{TH1=(65536-50000)/256; //重新赋值TL1=(65536-50000)%256;if(1==setupFlag)//设置时钟时 { time1Counter=0;//定时器1计数器要清零 return; }time1Counter++;//定时器1计数器加1if(20==time1Counter)//1s更新一次 { time1Counter=0;//定时器1计数器清零 second++;//秒加1 if(60==second) { second=0; minute++; if(60==minute) { minute=0; hour++; if(24==hour) hour=0; } } screen[row][5]=hour/10+2;//更新小时显示内容screen[row][6]=hour%10+2;screen[row][8]=minute/10+2;//更新分钟显示内容screen[row][9]=minute%10+2; screen[row][11]=second/10+2;//更新秒显示内容 screen[row][12]=second%10+2; }}/*------------------------------------------------外部中断0子程序------------------------------------------------*/voidExternal_isr(void)interrupt0using1{ucharhourH;ucharhourL;ucharminuteH;ucharminuteL;ucharctrl;LED=0;ctrl=P2;//按键从P2口输入switch(ctrl){ caseSETUPCTRL://按下设置键 LED3=0; if(0==setupFlag) { setupFlag=1; col=4; dpyCounter=0; } col++; if(7==col)//第7列已显示“:” col++; if(10==col)//以完成设置 setupFlag=0;//设置标志清零 break; casePLUSCTRL://按下加1键 LED2=0; if(1==setupFlag) { switch(col)//光标所在列数 { case5://小时十位处 hour+=10; if(hour>23) hour%=10; break; case6://小时个位处 hourH=hour/10; hourL=hour%10; hourL++; if(2==hourH) { if(4==hourL) hourL=0; } else { if(10==hourL) hourL=0; } hour=hourH*10+hourL; break; case8://分钟十位处 minute+=10; if(minute>59) minute%=10; break; case9://分钟个位处 minuteH=minute/10; minuteL=minute%10; minuteL++; if(10==minuteL) minuteL=0; minute=minuteH*10+minuteL; break; default: break; } } break; caseNONE: LED1=0; break; caseMENUCTRL: LED0=0; break; default: break;}screen[row][5]=hour/10+2;//更新小时显示内容screen[row][6]=hour%10+2;screen[row][8]=minute/10+2;//更新分钟显示内容screen[row][9]=minute%10+2;while(!(0xFF==ctrl))//等待按键释放ctrl=P2;}voidmain(){ ucharr,c; Init_Timer1();//初始化定时器1 EX0=1;//开外部中断0 IT0=0;//设置低电平可引起外部中断0 LCD_Init();//LCD初始化 Clr_LCD();//LCD清屏 screen[row][0]=31;//T screen[row][1]=46;//i screen[row][2]=50;//m screen[row][3]=42;//e screen[row][7]=65;//: screen[row][10]=65;//: screen[row][5]=hour/10+2;//计算小时显示的内容screen[row][6]=hour%10+2;screen[row][8]=minute/10+2;//计算分钟显示的内容screen[row][9]=minute%10+2; screen[row][11]=second/10+2;//计算秒显示的内容 screen[row][12]=second%10+2; while(1) { if(0==setupFlag)//不处于设置状态 { for(r=0;r<6;r++)//6行{for(c=0;c<14;c++)//14列{//:闪烁if((r==row)&

温馨提示

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

评论

0/150

提交评论