代码如下
- #include<reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit P00 = P0^0;
- sbit P01 = P0^1;
- sbit P02 = P0^2;
- sbit P03 = P0^3;
- sbit P04 = P0^4;
- sbit P05 = P0^5;
- sbit P06 = P0^6;
- sbit P07 = P0^7;
- sbit P10 = P1^0;
- sbit P11 = P1^1;
- sbit P12 = P1^2;
- sbit P13 = P1^3;
- sbit P14 = P1^4;
- sbit P15 = P1^5;
- sbit P16 = P1^6;
- sbit P17 = P1^7;
- sbit P20 = P2^0;
- sbit P21 = P2^1;
- sbit P22 = P2^2;
- sbit P23 = P2^3;
- sbit P24 = P2^4;
- sbit P25 = P2^5;
- sbit P26 = P2^6;
- sbit P27 = P2^7;
- sbit P30 = P3^0;
- sbit P31 = P3^1;
- sbit P32 = P3^2;
- sbit P33 = P3^3;
- sbit P34 = P3^4;
- sbit P35 = P3^5;
- sbit P36 = P3^6;
- sbit P37 = P3^7;
- /*********** LCD ************/
- #define RS P22
- #define RW P21
- #define LCDEN P20
- #define LCD_DATA P0
- #define LCD_BUSY P0
- uchar idata lcd_code[10];
- //*****************************************???????***************************************//
- void delayus(uint us)
- {
- for(;us >0;us--)
- {
- _nop_();
- }
- }
- void delayms(uint ms)//??????? ms
- {
- uchar a,b,c;
- while(ms--)
- {
- for(c=1;c>0;c--)
- for(b=142;b>0;b--)
- for(a=2;a>0;a--);
- }
- }
- //**********????????????**********
- void string_copy(uchar *target,uchar *source)//????????? target:??? source???
- {
- uchar i = 0;
- for(i = 0;source[i] != '\0';i++)//???target????? ??????????
- {
- target[i] = source[i];
- }
- target[i] = '\0';
- }
- //**********???????????**********
- uchar string_cmp(uchar *target,uchar *source)//???????? target:??? source???
- {
- uchar revalue;
- uchar i = 0;
- for(i = 0;target[i] != '\0' && source[i] != '\0';i++) //????????????'\0'????? ???????????'\0'??????
- {
- if(target[i] == source[i])
- {
- revalue = 1;
- }
- else
- {
- revalue = 0;
- break;
- }
- }
- if(revalue == 1)
- {
- if(target[i] == '\0' && source[i] == '\0')
- revalue = 1;
- else
- revalue = 0;
- }
- return(revalue);
- }
- //**************** LCD ********************
- //LCD??????????
- void busy_check() //?μ???
- {
- RW = 1; //??
- RS = 0; //???????
- LCD_DATA = 0xFF;//??????????????I/O?????1
- LCDEN = 0;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- LCDEN = 1;// EN????????? ????????????
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- while(1)
- {
- if(LCD_BUSY == 0)//P07 == 0???????
- break;
- }
- delayms(2);//????????????
- }
- void lcdwrcom(uchar command)//д???
- {
- busy_check();
- RW = 0;//д
- RS = 0;//???????
- LCD_DATA = command;
- LCDEN = 1;//??????д?????
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- LCDEN = 0;
- }
- void lcdwrdata(uchar lcd_data)//д???? ???????????????????????
- {
- busy_check();
- RW = 0;//д
- RS = 1;//????????
- LCD_DATA = lcd_data;
- LCDEN = 1;//??????д?????
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- LCDEN = 0;
- }
- void lcd_init()
- {
- delayms(15);//??? lcd1602??絽????????????
- RW = 0;//д
- RS = 0;//???????
- LCD_DATA = 0x38;// 0x38????????????16X2 ???,5X7 ????,8 λ??????'
- LCDEN = 1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- LCDEN = 0;
- delayms(5);
- lcdwrcom(0x0c);//????? ???? ?????
- lcdwrcom(0x06);//???3 ??????? ????????????????Ч
- lcdwrcom(0x01);// ??????????λ?????00Hλ?á?
- }
- //LCD?????????
- void address(uchar x,uchar y) //??λ??????д??????
- {
- uchar location;
- if(x == 0)
- location = 0x80|y;
- else
- location = 0xC0|y;
- lcdwrcom(location);
- }
- void printchar(uchar x,uchar y,uchar letter)//???????????????
- {
- address(x,y);
- lcdwrdata(letter);
- }
- void printword(uchar x,uchar y,uchar *word) //??????????????飩
- {
- uchar i = 0;
- for(i = 0;word[i] != '\0';i++)
- {
- address(x,y + i);
- lcdwrdata(word[i]);
- }
- }
- void printuint(uchar x,uchar y,uchar num_ws_max,uint num)//???????????? 0~65535 x:?? y???? num_ws_max ?????????λ??
- {
- uchar i = 0;
- uchar str[5] = {0x20,0x20,0x20,0x20,0x20};
- if(num >= 10000)
- {
- str[0] = num/10000 + '0';
- str[1] = num%10000/1000 + '0';
- str[2] = num%1000/100 + '0';
- str[3] = num%100/10 + '0';
- str[4] = num%10 + '0';
- // str[5] = '\0'; //?????????????????
- }
- else if(num >= 1000)
- {
- str[0] = num/1000 + '0';
- str[1] = num%1000/100 + '0';
- str[2] = num%100/10 + '0';
- str[3] = num%10 + '0';
- str[4] ='\0';
- }
- else if(num >= 100)
- {
- str[0] = num/100 + '0';
- str[1] = num%100/10 + '0';
- str[2] = num%10 + '0';
- str[3] = '\0';
- }
- else if(num >=10)
- {
- str[0] = num/10 + '0';
- str[1] = num%10 + '0';
- str[2] = '\0';
- }
- else if(num >= 0)
- {
- str[0] = num + '0';
- str[1] = '\0';
- }
-
- for(i = 0;i <= 5;i++) //uint???? ????65535 ?5λ??
- {
- if(str[i] != '\0' && i < num_ws_max)
- {
- address(x,y + i);
- lcdwrdata(str[i]);
- }
- else if(str[i] == '\0' && i < num_ws_max)
- {
- address(x,y+i);
- lcdwrdata(' ');//??? // ???????????????λ????Χ???????????λ??0x20?????
- //???磺?????3λ??999 ?????99??????9+'0' 9+'0' 0x20
- }
- }
- }
- void printvolt(uchar x,uchar y,uint v) //?????3λ??????100 ??????λС?? ???????????? 0.00~5.00V
- {
- uchar str[4] = "0";
- uchar i = 0;
- str[0] = v/100 + '0';
- str[1] = '.';
- str[2] = v%100/10 + '0';
- str[3] = v%10 + '0';
- printword(x,y,str);
-
- }
- //************ ????? *************
- uint t0_flag = 0;
- uchar t1_flag = 0;
- uint fre = 0;
- void timer_init()
- {
- ET0 = 1;
- ET1 = 1;
- TMOD = 0x15; //?????0???????? , ?????1???????1
- TH0 = 255;
- TL0 = 255;
- TH1 = 0x3C;
- TL1 = 0xB0;//50MS
- }
- void timer0() interrupt 1
- {
- TH0 = 255;
- TL0 = 255;
- t0_flag++;
- }
- void timer1() interrupt 3
- {
- TH1 = 0x3C;
- TL1 = 0xB0;
- t1_flag++;
- if(t1_flag == 20)
- {
- fre = t0_flag;
- TR0 = 0;
- TR1 = 0;
- t1_flag = 0;
- }
- }
- void main()
- {
- EA = 1;
- lcd_init();
- timer_init();
- while(1)
- {
- if(P10 == 0)
- {
- TH0 = 255;
- TL0 = 255;
- TH1 = 0x3C;
- TL1 = 0xB0;
- t0_flag = 0;
- t1_flag = 0;
- TR0 = 1;
- TR1 = 1;
- }
-
- printword(0,0,"PL:");
- printuint(0,4,5,t0_flag);
- printword(1,0,"t1_flag:");
- printuint(1,8,3,t1_flag);
-
- }
- }
复制代码
这是程序,乱码的地方原来是注释。
|