基于AT89S52LCD12864仪器仪表的键盘显示模拟系统.docVIP

  • 6
  • 0
  • 约2.65万字
  • 约 21页
  • 2019-01-27 发布于广东
  • 举报

基于AT89S52LCD12864仪器仪表的键盘显示模拟系统.doc

基于AT89S52LCD12864仪器仪表的键盘显示模拟系统.doc

〃名称: 〃品振:12Mhz //编写:韦宏谋 〃日期:2011.1.9 #in cludereg52.h # includeintrins.h #define uc unsigned char #define ui unsigned int #define nop() _nop_() #define DB P0 bit clr_flag=O; bit clr_flag2=0; sbit RS=P2A7; sbit RW=P2A6; sbit EN=P2A5; sbit PSB=P2A4; sbit RST=P2A2; sbit seg_on=P2A0; 仪器仪表的键盘显示模拟系统 // // // // //12864D0-D7 输出 I/O 口 〃清屏标志1 〃清屏标志2 char week=0; 〃数码管状态控制 〃星期变量 char hour=0/min=0,sec=0,date=l,month=l,year=ll;//预置的时间和日期 uc key_flag=O; 〃键盘标志 uc key=0; 〃键盘变量 uc deda=0; 〃时钟变量 uc string[]=,,0123456789n; uc aa=0x80,bb=0x90,cc=0x8dd=0x98;//:12864 的 DDRAM 地址 uc code bmp[],bmpl[]/bmp2[]/zk[],seg_code[];//图片、字符 void conv(); 〃时钟走时单元函数声明 TOC \o 1-5 \h \z // // // 延时函数1 // // // void delay(ui t) { uc i,j; do {j=2; do {(i=165); do { nop();〃n 个 nop }while(-i); }while(-j); }while(-t); }〃可精确到2ms,计算公式:t总={[3j+(n+2)ij+3]t+5}TzT为晶振周期 TOC \o 1-5 \h \z // // // 延吋函数2 // // // void delayl(ui count) { UC i,j; for(i=0;icount;i++) for(j=0;j30;j++); } TOC \o 1-5 \h \z // // // 定时器TO初始化 // // // void init_timer() { TMOD=0x01; TH0=(65536-50000)/256; 〃加载高位 TL0=(65536-50000)%256; 〃加载低位 IE=0x82; 〃启用定时器TO中断产生 TRO=1; 〃启动定时器TO开始汁时 } TOC \o 1-5 \h \z // // // 5ms定时中断程序 // // // void T0_srv(void) interrupt 1 using 1 { TH0=(65536-50000)/256;// 定时器计时初始值 TL0=(65536-50000)%256; deda++; 〃计数单元递增 conv(); } TOC \o 1-5 \h \z // // // 各月份天数计算函数 // // // void inter_month() { switchfm on th) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:{讦(date=32) {date=l;month++;} if(date=0) date=31; } break; 〃若是大月,则有31天 case 4: case 6: case 9: case 11:{讦(date=31) {date=l;month++;} if(date=0) date=30; case 2:} break; 〃若是小月,则有30 case 2: if(year%4==0) { if(date=30) {date=l;month++;} if(date=0) date=29; } 〃闰年二月有29天 else if(date=29) {date=l;month++;} if(date=0) date=2 } break; 〃平年二月28天 default: break; } } TOC \o 1-5 \h \z // // // 时间、tl期走时单元 // // // void conv() { if(deda==2O) { deda=0; sec++; 〃秒加 1 if(sec=60) { sec=O; min++; if(min=60) { min=O; hour++; if (hour=24) { hour=0; date++; week++; 讦(week=7) week

文档评论(0)

1亿VIP精品文档

相关文档