#include <80c188eb.h> #include #include #include #define gpio1 0x3000 // input port #define gpio2 0x3000 // output port #define rtc 0x3100 #define NIC 0x3200 #define lpt 0x3300 #define lcd_command_write 0x3400 #define lcd_data_write 0x3401 #define lcd_command_read 0x3402 #define lcd_data_read 0x3403 #define BUSY 0x80 // busy flag location goto_xy(char x,char y); char lcd_ready(void) { unsigned char flag; while( (flag=inp(lcd_command_read))&BUSY) { if(flag == 0xFF) return -1; } return 1; } void clr_screen(void) { lcd_ready(); outp(lcd_command_write,0x01); } char init_lcd(void) { if(-1 ==lcd_ready()) return -1; outp(lcd_command_write,0x38); lcd_ready(); outp(lcd_command_write,0x0c); clr_screen(); goto_xy(0,0); return 1; } goto_xy(char x,char y) { lcd_ready(); switch(y){ case 0 : outp(lcd_command_write,0x80+x); break; case 1 : outp(lcd_command_write,0xC0+x); break; case 2 : outp(lcd_command_write,0x94+x); break; case 3 : outp(lcd_command_write,0xd4+x); break; } } char *putstring(char* str) { unsigned char i; for (i=0; str[i] != '\0'; i++){ lcd_ready(); outp(lcd_data_write,str[i]); } return str; } char cin() { while((_S0STS&0x40)==0) continue; return _S0RBUF; } read_time() { char hour,min,sec; char buffer[20]; sec = inp(rtc); min = inp(rtc+2); hour = inp(rtc+4); sprintf(buffer,"DS12887 RTC"); goto_xy(0,3); putstring(buffer); } test_port() { char buffer[20]; sprintf(buffer,"GPIO1=%x",inp(gpio1)); goto_xy(0,2); putstring(buffer); } main() { char buffer[20]; double n=0.129209921; init_lcd(); goto_xy(0,1); putstring("-----80C188 SBC-----"); goto_xy(0,2); while(1) { printf("\r\n %.10f",cos(n)); sprintf(buffer,"%.10f",cos(n)); goto_xy(0,0); putstring(buffer); read_time(); test_port(); _P1LTCH ^= 0x80; n += 0.000920929; } }