#include#include #define uchar unsigned char#define uint unsigned int #define LCD_DB P0sbit LCD_RS = P2^4; sbit LCD_RW = P2^3; sbit LCD_E = P2^2; sbit K1 = P1^0;sbit K2 = P1^1;sbit K3 = P1^2;sbit K4 = P1^3;sbit K5 = P1^4;sbit M1 = P1^5;sbit M2 = P1^6;sbit M3 = P1^7;sbit DCY1 = P3^0;sbit DCY2 = P3^1;sbit CLK = P3^2;sbit EN = P2^6;sbit UD = P2^5;sbit UD1 = P2^1;uchar bin2dec(uchar a ,uchar b ,uchar c);uchar bin2dec1(uchar a ,uchar b);void LCD_init(void);void LCD_write_command(uchar command);void LCD_write_date(uchar dat);void LCD_disp_char(uchar x,uchar y,uchar dat);void LCD_disp_str(uchar row,uchar * str);bit LCD_check_busy(void);void delay_n40us(uint n);void StartTime0(void);uchar code dis1[8][9] = {{"DIV:1/2"},{"DIV:1/8"},{"DIV:1/10"},{"DIV:1/16"},{"DIV:1/20"},{"DIV:1/32"},{"DIV:1/40"},{"DIV:1/64"}};uchar code hz[8] = {1000,1000,1000,1000,1000,1000,1000,1000};uchar selector = 0;uchar o = 0,m = 0,s = 0,save = 0,save1 = 0;void main(){ EN = 1; CLK = 0; StartTime0(); UD = 0; UD1 = 1; while(1) { M1 = K1; M2 = K2; M3 = K3; DCY1 = K4; DCY2 = K5; o = bin2dec(M1,M2,M3); UD1 = 1; if(o != save) { s = 0; save = o; //selector = o; //ET0 = 0; } else { s = 1; save = o; //ET0 = 1; } m = bin2dec1(DCY2,s); if(save1 != m) { switch(m) { case 0 : { LCD_init(); LCD_disp_str(1,dis1[o]); LCD_disp_str(2,"CW:FORWORD"); UD1 = 1; } break; case 1 : { LCD_init(); LCD_disp_str(1,dis1[o]); LCD_disp_str(2,"CW:FORWORD"); UD1 = 1; } break; case 2 : { LCD_init(); LCD_disp_str(1,dis1[o]); LCD_disp_str(2,"CW:BACK"); UD1 = 0; } break; case 3 : { LCD_init(); LCD_disp_str(1,dis1[o]); LCD_disp_str(2,"CW:BACK"); UD1 = 0; } break; default : { LCD_init(); LCD_disp_str(1,dis1[o]); } } save1 = m; } } }uchar bin2dec(uchar a ,uchar b ,uchar c){ uchar i; a = a<<2; b = b<<1; i = a | b | c; return i;} uchar bin2dec1(uchar a ,uchar b){ uchar i; a = a<<1; i = a | b; return i;}void LCD_init(void){ LCD_write_command(0x38); delay_n40us(100); LCD_write_command(0x0c); delay_n40us(100); LCD_write_command(0x06); delay_n40us(100); LCD_write_command(0x01); delay_n40us(100);} void LCD_write_command(uchar command){ while(LCD_check_busy()); LCD_RS = 0; LCD_RW = 0; LCD_E=0; _nop_(); _nop_(); LCD_DB = command; _nop_(); _nop_(); _nop_(); _nop_(); LCD_E = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_E = 0;} void LCD_write_data(uchar dat){ while(LCD_check_busy()); LCD_RS = 1; LCD_RW = 0; LCD_E = 0; LCD_DB = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_E = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_E = 0; delay_n40us(1);} void LCD_disp_char(uchar x,uchar y,uchar dat){ uchar address; if(y == 1) { address = 0x80 + x; } else { address = 0xc0 + x; } LCD_write_command(address); LCD_write_data(dat);} void LCD_disp_str(uchar row,uchar * str){ int i; if(row == 1) { for(i=0;str[i]!='\0';i++) { LCD_disp_char(i,1,str[i]); } } else { for(i=0;str[i]!='\0';i++) { LCD_disp_char(i,2,str[i]); } }}bit LCD_check_busy(void){ bit result; LCD_RS = 0; LCD_RW = 1; LCD_E = 1; _nop_(); _nop_(); _nop_(); _nop_(); delay_n40us(100); result = (bit)(LCD_DB & 0x80); LCD_E = 0; return result;} void delay_n40us(uint n){ uint i; uchar j; for(i=n;i>0;i--) { for(j=0;j<2;j++) { _nop_(); _nop_(); } }} void StartTime0(void){ ET0 = 1; TMOD = 0x01; TH0 = (65536-1000)/256; TL0 = (65536-1000)%256; TR0 = 1; EA = 1;} void CLKG(void) interrupt 1{ CLK = ~CLK; TH0 = (65536-1000)/256; TL0 = (65536-1000)%256;}
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。