色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 使用8051連接到LCD顯示器程序

          使用8051連接到LCD顯示器程序

          作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          使用8051連接到LCD顯示器程序執(zhí)行時(shí)讓LCD顯示器顯示出數(shù)字時(shí)鐘修改時(shí)間4ⅹ4小鍵盤的按鈕B ,可以修改間 (2009-08-04 18:57)

          /*

          本文引用地址:http://cafeforensic.com/article/201611/315593.htm

          Target:89S51

          程序描述:這個(gè)范例說明如何使用8051的Port 1連接到LCD顯示器,PORT 3的P3.3,P3.4和P3.5分別連接到LCD顯示器的控制線程序執(zhí)行時(shí)讓LCD顯示器顯示出數(shù)字時(shí)鐘PORT 2連接到4ⅹ4的小鍵盤,可以修改時(shí)間4ⅹ4小鍵盤的按鈕B ,可以修改間*/

          /* ***************************************************** */

          #include

          #include

          #define TIMER0_COUNT 0xD8F0 /*10000h-((12,000,000/(12*100))*/

          /* 數(shù)字時(shí)鐘的工作模式 */

          #define SET 11

          #define TRUE 1

          #define FALSE 0

          #define putchar write_LCD_data

          typedef struct {

          char hour;

          char minute;

          char second;

          } time;

          typedef struct {

          char year;

          char month;

          char day;

          } date;

          time now={23,59,0},display;

          date today={04,05,29},tmpday;

          static unsigned timer0_tick=100,mode=0,operation;

          char code dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};

          char code weekday[7][4]={"MON","TUE","WED","THU","FRI","SAT",

          "SUN"};

          char code command[1][6]={"Watch",};

          char code int2char[]="0123456789";

          char gotkey();

          void display_time(void)

          {

          gotoxy(1,0);

          display_LCD_number(display.hour);

          display_LCD_string(":");

          display_LCD_number(display.minute);

          display_LCD_string(":");

          display_LCD_number(display.second);

          }

          void display_date()

          {

          char i,days=4;

          gotoxy(2,2);

          display_LCD_number(today.year);

          display_LCD_string("/");

          display_LCD_number(today.month);

          display_LCD_string("/");

          display_LCD_number(today.day);

          display_LCD_string(" ");

          if(today.month > 1)

          for(i=0;i<=today.month-2;i++)

          days+=(dayofmonth[i]%7);

          if( today.year !=0 ) days+=((today.year-1)/4)+today.year+1;

          if (today.year%4==0 && today.month >2) days++;

          days=(days+today.day) % 7;

          display_LCD_string(&weekday[days][0]);

          }

          int getdigit(unsigned char x,unsigned char y)

          {

          char keys;

          do {

          gotoxy(x,y);

          putchar(_);

          keys=gotkey();

          gotoxy(x,y);

          putchar(int2char[keys]);

          } while(keys>9);

          return(keys);

          }

          int gettime()

          {

          char temp;

          do {

          while((temp=getdigit(1,0))>2); //時(shí)的十位數(shù)不能大于2

          temp=temp*10+getdigit(1,1);

          if (temp > 23) display_time();

          } while (temp > 23);

          display.hour=temp;

          while((temp=getdigit(1,3))>5);

          display.minute=temp*10+getdigit(1,4);

          return(TRUE);

          }

          char monthday(char year,char month)

          {

          if(month==2 && year%4==0) //潤年的2月有29天

          return(29);

          else

          return(dayofmonth[month-1]); //非閏年時(shí)的該月份天數(shù)

          }

          int getdate()

          {

          char temp,days;

          temp=getdigit(2,2);

          tmpday.year=temp*10+getdigit(2,3);

          do {

          while((temp=getdigit(2,5))>1); //月的十位數(shù)不能大于1

          temp=temp*10+getdigit(2,6);

          if (temp > 12) display_date(); //月份的數(shù)字不能大于12

          } while (temp > 12);

          tmpday.month=temp;

          do {

          while((temp=getdigit(2,8))>3); //日的十位數(shù)不能大于3

          temp=temp*10+getdigit(2,9);

          days=monthday(tmpday.year,tmpday.month);

          if(temp > days || temp==0) display_date();

          } while (temp > days || temp==0);

          //輸入的日期大于該月日期就重新輸入

          tmpday.day=temp;

          return(TRUE);

          }

          static void timer0_isr(void) interrupt TF0_VECTOR using 1

          {

          TR0=0;

          TL0=(TIMER0_COUNT & 0x00FF);

          TH0=(TIMER0_COUNT >> 8);

          TR0=1;

          if(--timer0_tick) return;

          timer0_tick=100;

          now.second++; //秒加1

          if (now.second==60) { //如果秒等于60

          now.second=0; //秒恢復(fù)為0

          now.minute++; //分加1

          if (now.minute==60) { //如果分等于60

          now.minute=0; //分恢復(fù)為0

          now.hour++; //時(shí)加1

          if (now.hour==24) { //如果時(shí)等于24

          now.hour=0; //時(shí)恢復(fù)為0

          today.day++; //日加1

          if (today.day>monthday(today.year,

          today.month)) {

          today.day=1;

          //如果日超過當(dāng)月最大日數(shù),就變成1

          today.month++;

          //月加1

          if(today.month==13) {

          //如果月等于13

          today.month=1;

          //月恢復(fù)為1

          today.year++;

          //年加1

          }

          }

          display_date();

          }

          }

          }

          if (operation==SET ) return;

          display=now;

          display_time();

          }

          static void timer0_initialize(void)

          {

          EA=0;

          TR0=0;

          TMOD &= 0XF0;

          TMOD |=0x01;

          TL0=(TIMER0_COUNT & 0x00FF);

          TH0=(TIMER0_COUNT >> 8);

          PT0=0;

          ET0=1;

          TR0=1;

          EA=1;

          }

          void main (void) {

          char keys;

          init_LCD();

          clear_LCD();

          gotoxy(2,0);

          display_LCD_string("20");

          display=now;

          display_time();

          display_date();

          gotoxy(1,9);

          display_LCD_string(&command[mode][0]);

          timer0_initialize();

          do {

          keys=gotkey();

          if(keys==SET) {

          operation=SET;

          if ( gettime()) now=display;

          if ( getdate()) {

          today=tmpday;

          display_date();

          }

          }

          operation=0;

          } while(1);

          }



          關(guān)鍵詞: 8051LCD顯示器程

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉