完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include #include #define uchar unsigned char #define uint unsigned int /********************* 管脚定义 *********************/ #define CS PG2 /***片选信号rs***/ #define SID PG3 /***数据信号rw***/ #define SCLK PG4 /***时钟信号en***/ #define LCD_PSB PG1 // 串/并方式控制 #define TLC2543_CLK_H PORTD|=BIT(4) //2543时钟输入端 #define TLC2543_CLK_L PORTD&=~(BIT(4)) #define TLC2543_ADIN_H PORTD|= BIT(6) //2543数据输入端 #define TLC2543_ADIN_L PORTD&=~(BIT(6)) #define TLC2543_DOUT (PIND&0x10) //2543数据输出端 #define TLC2543_CS_H PORTD|= BIT(5) //2543片选端 #define TLC2543_CS_L PORTD&=~(BIT(5)) /********************* 延时函数 *********************/ void delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=1141;j>0;j--); } /************************************************************ TLC2543数据转换函数 D7~D4为通道选择,D3、D2为数据长度 ************************************************************/ uint Read_TLC2543(uchar port) //uchar为8位 { uint i; //定义循环变量 uint ad_value=0; //AD转换的值 TLC2543_CLK_L; //开始时时钟输入端为低 TLC2543_CS_L; //片选信号为低 port<<=4; //左移四位,以便用一位十进制数表示所选的模拟通道 for(i=0;i<12;i++ ) //循环十二次,输出十二位数据 { if(TLC2543_DOUT) //如果输出端为高 ad_value |=0x01; //则ad_val赋1,否则赋0 if(port&0x80) //将地址按位发送出去 TLC2543_ADIN_H; else TLC2543_ADIN_L; TLC2543_CLK_H; //时钟拉高,上升沿送入数据 delay_ms(3); TLC2543_CLK_L; //拉低,为下次上升沿送数据做准备 delay_ms(3); port=port<<1; //左移一位 ad_value=ad_value<<1; //左移一位,逐渐移到高位 } TLC2543_CS_H; ad_value=ad_value>>1; //出去一位就要进来一位 return ad_value; } ///******12864液晶程序******/// //////以串行协议发送数据/////// void send_bit(uchar byte) { uchar x; for(x=0;x<8;x++) //八位数据,一位一位发送// { if((byte< PORTG|=(1< else { PORTG&=~(1< PORTG&=~(1< delay_ms(5); } //////写串口命令函数//////// void write_com(uchar com) { PORTG|=(1< send_bit(com&0xf0); //0xf0为1111 0000,送高四位 send_bit((com<<4)&0xf0); //0xf0为1111 0000,送低四位 delay_ms(5); PORTG&=~(1< //////写串口数据函数//////// void write_dat(uchar date) { PORTG|=(1< send_bit(date&0xf0); //0xf0为1111 0000,送高四位// send_bit((date<<4)&0xf0); //0xf0为1111 0000,送低四位// delay_ms(10); PORTG&=~(1< ////设定在液晶上显示的位置///// void Lcd_pos(uchar X,uchar Y) { uchar pos; if(X==0) {X=0x80;} //第一行 else if(X==1) {X=0x90;} else if(X==2) {X=0x88;} else if(X==3) {X=0x98;} pos=X+Y; write_com(pos); //显示地址 } //////////显示字符串和汉字/////////// void Lcd_str(uchar X,uchar Y,uchar *str) { Lcd_pos(X,Y); while(*str!=' |