小焦叔叔😂 逸之蝉
有个学生叫我做“万能的小焦叔叔”,呵呵!!!!!!
关注数: 24 粉丝数: 10 发帖数: 90 关注贴吧数: 4
KEIL4的多文件问题 我看了张勇写的《AMR Cortex-M3嵌入式开发与实践---基于STM32F103》一书,仿照他在KEIL5里的方法,搭建KEIL4的多文件C工程框架,但是没有通过。我上传一些我写的程序文本和截图到这里,有哪位读过他的书的先生知道如何改正我编的程序的错误,敬请告知,谢谢!!!!!!工作顺利,事业更上一层楼!!!!!!!main.c: #include"includes.h" void Feleer(); void main() { Init_Lcd(); Init_UART(); //Feleer(); UART_Tx_String(Tx_Buf); while(1) { if(Flag_Tx==1) { Flag_Tx=0; Display(2,1,Tx_Buf); } if(Flag_Rx==1) { Feleer(); Flag_Rx=0; Display(0,2,Rx_Buf); } } } void Feleer() { Set_xy(15,1); WDat('H'); } includes.h: #include"STC12C5A60S2.h" #include"vartypes.h" #include"Lcd.h" #include"UART.h" vartypes.h: #ifndef _VARTYPES_H #define _VARTYPES_H typedef unsigned char uc; #endif Lcd.h: #include"includes.h" #ifndef _LCD_H #define _LCD_H #define ON_LCD 0x0c #define OFF_LCD 0x08 #define CLEAR_LCD 0x01 #define INPUT_MODE 0x06 #define TEXT_SIZE 0x38 //8??£?2DD£?5*7μ??ó sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^5; void Init_Lcd(); void Display(uc x,uc y,uc *ptr); void Set_xy(uc x,uc y); void Wcom(uc com); void WDat(uc Dat); void Ready(); #endif Lcd.c: #include"includes.h" void Init_Lcd() { Wcom(OFF_LCD); Wcom(CLEAR_LCD); Wcom(INPUT_MODE); Wcom(TEXT_SIZE); Wcom(ON_LCD); } void Display(uc x,uc y,uc *ptr) { Set_xy(x,y); while(*ptr!=0) { WDat(*ptr); ptr++; } //Feleer(); } void Set_xy(uc x,uc y) { if(y==1) { Wcom(0x80|x); } if(y==2) { Wcom(0xc0|x); } } void Wcom(uc com) { Ready(); RS=0; RW=0; E=1; P0=com; E=0; } void WDat(uc Dat) { Ready(); RS=1; RW=0; E=1; P0=Dat; E=0; } void Ready() { uc sta; P0=0xFF; RS=0; RW=1; do { E=1; sta=P0; E=0; } while(sta&0x80); } UART.h: #ifndef _UART_H #define _UART_H uc code Tx_Buf[]="UART Testing"; uc Rx_Buf[17]=""; bit Flag_Tx=0; bit Flag_Rx=0; void Init_UART(); void UART_Tx_String(uc *ptr_Tx); void UART_Tx(uc Tx_Dat); #endif UART.c: #include"vartypes.h" #include"Lcd.h" void Init_UART() { AUXR=0x00; SCON=0x50; PCON=0x00; TMOD=0x20; TH1=256-11059200/12/2/16/9600; TL1=TH1; TR1=1; ES=1; EA=1; } void UART_Tx_String(uc *ptr_Tx) { while(*ptr_Tx!=0) { UART_Tx(*ptr_Tx); ptr_Tx++; } Flag_Tx=1; } void UART_Tx(uc Tx_Dat) { SBUF=Tx_Dat; while(TI!=1); TI=0; } void UATR_Rx() interrupt 4 { static uc *ptr_Rx=Rx_Buf; //Feleer(); if(RI==1) { //Feleer(); RI=0; *ptr_Rx=SBUF; if(*ptr_Rx=='@') { //Feleer(); Flag_Rx=1; TR1=0; goto Loop; } ptr_Rx++; } Loop:while(0); } 总共7个文件,编译结果是致命错误:分解源文件
大家好!我在自学单片机。我编的 大家好!我在自学单片机。我编的一个12864(无字库)汉字显示程序有一点问题。软件调试是通过的,就是怎么弄来弄去就是字个汉字都不显示,屏幕全是蓝色的。无奈来贴吧向高手请教,望不吝指正,谢谢!!!!!!!!!!!!!!!!!! #include<reg52.h> sbit RS=P1^1; sbit RW=P1^2; sbit E=P1^3; sbit CS1=P3^1; sbit CS2=P3^2; sbit RST=P3^3; unsigned char code Hanzi_Data[]= { }; //数据删去了,是一首唐诗 void RST_LCD(); void Clean(); void Display_ON(); void Display(unsigned char code *ptr); void Set_page_column(unsigned char code *ptr); void Display_one_Hanzi(unsigned char code *ptr,unsigned char page,unsigned char column,bit lift,bit right); void Wcom(unsigned char com); void WData(unsigned char Data); void Ready(); void main() { unsigned char code *ptr_Hanzi=Hanzi_Data; RST_LCD(); Clean(); Display_ON(); Display(ptr_Hanzi); while(1); } /**************软件复位***************/ void RST_LCD() { unsigned char status; P0=0xff; RS=0; RW=1; E=1; do { RST=0; status=P0&0x10; } while(status==0x10); E=0; RST=1; } /****************清屏*****************/ void Clean() { unsigned char i,j; CS1=1; CS2=1; for(i=0;i<8;i++) { Wcom(i|0xb8); Wcom(0|0x40); for(j=0;j<64;j++) { WData(0x00); } } } /***************开显示****************/ void Display_ON() { CS1=1; CS2=1; Wcom(0x3f); } /**************一个转换**************/ void Display(unsigned char code *ptr) { Set_page_column(ptr); } /************设置页和列**************/ void Set_page_column(unsigned char code *ptr) { unsigned char i,j; unsigned char page=0; unsigned char column=0; bit lift=0; bit right=0; for(i=0;i<4;i++) //共4行汉字 { for(j=0;j<8;j++) //每行8个汉字 { if(column<=63) //在左屏 { lift=1; right=0; Display_one_Hanzi(ptr,page,column,lift,right); ptr=ptr+32; //指向下一个汉字 column=column+16; } if(column>63&&column<=127) //在右屏 { lift=0; right=1; Display_one_Hanzi(ptr,page,column,lift,right); ptr=ptr+32; //指向下一个汉字 column=column+16; } if(column>127) { column=0; } } page=page+2; //计算每行汉字头一页 } } /************显示一个汉字************/ void Display_one_Hanzi(unsigned char code *ptr,unsigned char page,unsigned char column,bit lift,bit right ) { unsigned char i; CS1=lift; CS2=right; Wcom(page|0xb8); //首页定位 Wcom(column|0x40); //一个汉字的首列 for(i=0;i<16;i++) { WData(*ptr); ptr++; } Wcom((page+1)|0xb8); //次页定位 Wcom(column|0x40); //一个汉字的首列 for(i=0;i<16;i++) { WData(*ptr); ptr++; } } /***************写入指令**************/ void Wcom(unsigned char com) { RS=0; RW=0; E=1; Ready(); P0=com; E=0; } /***************写入数据**************/ void WData(unsigned char Data) { RS=1; RW=0; E=1; Ready(); P0=Data; E=0; } /*****************判忙****************/ void Ready() { unsigned char status; P0=0xff; RS=0; RW=1; E=1; do { status=P0&0x80; } while(status==0x80); E=0; }
1 下一页