里面有128564显示汉字的程序,自己研究下,不过是用msp430控制的,你改改端口i就可以了。
#include "msp430x26xh"
#define uchar unsigned char
#define uint unsigned int
#define iDat 1 //数据标志
#define iCmd 0 //指令标志
#define LCDb_RS 0x20 //定义四个控制引脚
#define LCDb_RW 0x40
#define LCDb_E 0x80
#define LCDb_RST 0x04
#define LCDb_L1 0x80 //第一行的地址
#define LCDb_L2 0x90 //第二行的地址
#define LCDb_L3 0x88 //第三行的地址
#define LCDb_L4 0x98 //第四行的地址
#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制 *** 作
#define LCDb_SET_RW P1OUT|=LCDb_RW
#define LCDb_SET_E P1OUT|=LCDb_E
#define LCDb_SET_RST P8OUT|=LCDb_RST
#define LCDb_CLR_RS P1OUT&=~LCDb_RS
#define LCDb_CLR_RW P1OUT&=~LCDb_RW
#define LCDb_CLR_E P1OUT&=~LCDb_E
#define LCDb_CLR_RST P8OUT&=~LCDb_RST
#define LCDb_DO P4OUT //输出数据总线端口定义
#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,58字符
#define LCDb_BASCMD 0x30 // 基本指令集
#define LCDb_CLS 0x01 // 清屏
#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM内容
#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动
#define LCDb_C2L 0x10 // 光标左移
#define LCDb_C2R 0x14 // 光标右移
#define LCDb_D2L 0x18 // 屏幕左移
#define LCDb_D2R 0x1C // 屏幕又移
#define LCDb_ON 0x0C // 打开显示
#define LCDb_OFF 0x08 // 关闭显示
unsigned char RXData;
unsigned char Seg_Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //数码管编码
unsigned char Result[5]; //整数转化成字符串,给LCD显示
void Delayms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++);
}
void Delayus(uint US)
{
uint i;
US=US5/4;
for( i=0;i<US;i++);
}
void LCD12864_portini()
{
P1DIR=0xFF;
P4DIR=0xFF;
P5DIR=0xFF;
P8DIR=0xFF;
P8OUT |=LCDb_RST;
// P1OUT=0xFF;
}
功 能: 向12864液晶写入一个字节数据或者指令
/
void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
{
if (DatCmd == iCmd) //指令 *** 作
LCDb_CLR_RS;
else
LCDb_SET_RS;
LCDb_CLR_RW; //写 *** 作
LCDb_SET_E;
LCDb_DO = dByte; //写入数据
//Delayus(500);
Delayms(1);
LCDb_CLR_E;
}
/函数名称: LCD12864_sendstr
功 能: 向12864液晶写入一个字符串
参 数: ptString--字符串指针
返回值 : 无
/
void LCD12864_sendstr(uchar ptString)
{
while((ptString)!='\0') //字符串未结束一直写
{
LCD12864_sendbyte(iDat, ptString++);
}
}
/函数名称: LCD12864_clear
功 能: 12864液晶清屏
参 数: 无
返回值 : 无
/
void LCD12864_clear(void)
{
LCD12864_sendbyte(iCmd,LCDb_CLS);
Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
}
/
函数名称: LCD12864_gotoXY
功 能: 移动到指定位置
参 数: Row--指定的行
Col--指定的列
返回值 : 无
/
void LCD12864_gotoXY(uchar Row, uchar Col)
{
switch (Row) //选择行
{
case 2:
LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
case 3:
LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
case 4:
LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
default:
LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
}
}
/
函数名称: LCD12864_initial
功 能: 12864液晶初始化
/
void LCD12864_initial(void)
{
Delayms(100); // 等待内部复位
LCD12864_portini(); //端口初始化
LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
LCD12864_clear(); //清屏
LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
}
void Int_char(int data)
{
if(data/1000)
{
Result[0]=data/1000+'0';
Result[1]=data/100%10+'0';
Result[2]=data/10%10+'0';
Result[3]=data%10+'0';
Result[4]=0;
}
else if(data/100)
{
Result[0]=data/100+'0';
Result[1]=data/10%10+'0';
Result[2]=data%10+'0';
Result[3]=0;
}
else if(data/10)
{
Result[0]=data/10%10+'0';
Result[1]=data%10+'0';
Result[2]=0;
}
else
{
Result[0]=data%10+'0';
Result[1]=0;
}
}
unsigned char Key_Press(void)
{
P7OUT=0xF0;
if((P7IN&0x10)&&(P7IN&0x20)&&(P7IN&0x40)&&(P7IN&0x80)) return 0x00;
else return 0xFF;
}
unsigned char Get_Keycode(void)
{
while(1)
{
P7OUT=0xFE; //扫描第一列
if((P7IN&0x10)==0) return 0;
else if((P7IN&0x20)==0) return 4;
else if((P7IN&0x40)==0) return 8;
else if((P7IN&0x80)==0) return 12;
P7OUT=0xFD; //扫描第二列
if((P7IN&0x10)==0) return 1;
else if((P7IN&0x20)==0) return 5;
else if((P7IN&0x40)==0) return 9;
else if((P7IN&0x80)==0) return 13;
P7OUT=0xFB; //扫描第三列
if((P7IN&0x10)==0) return 2;
else if((P7IN&0x20)==0) return 6;
else if((P7IN&0x40)==0) return 10;
else if((P7IN&0x80)==0) return 14;
P7OUT=0xF7; //扫描第四列
if((P7IN&0x10)==0) return 3;
else if((P7IN&0x20)==0) return 7;
else if((P7IN&0x40)==0) return 11;
else if((P7IN&0x80)==0) return 15;
}
}
void Init_compa()
{
CACTL1 = CAON+CAREF_2+CARSEL; // Enable Comp, ref = 05Vcc = Vin-
CACTL2 = P2CA0; // Pin to CA0
P1DIR |= 0x01; // P10 = o/p direction(CAOUT - LED)
P1SEL |= 0x01; // P10 - CAOUT, option select
}
/
函数名称:初始化函数
/
void Init_IIC(void)
{
P3SEL |= 0x06; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x50; // Slave Address is 048h
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
IE2 |= UCB0RXIE; // Enable RX interrupt
_BIS_SR(GIE);
// RXCompare = 0x0; // Used to check incoming data
}
/ 函数名称:字节写函数
/
void EEPROM_Write(unsigned char high_Address,unsigned char low_Address,unsigned char Word)
{
while (UCB0CTL1 & UCTXSTP); // 确定总线空闲
UCB0CTL1 |= UCTXSTT + UCTR; // 发送起始位,确定为发送模式
UCB0TXBUF = high_Address; // 发送高位地址
while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕
UCB0TXBUF = low_Address; // 发送低位地址
while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕
UCB0TXBUF = Word; // 发送数据
while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕
UCB0CTL1 |= UCTXSTP; // 发送停止位
while((UCB0CTL1 & UCTXSTP)==1); // 判断停止位是否发送完毕
}
/
函数名称:字节读函数
/
void EEPROM_readmore()
{
UCB0CTL1 &= ~UCTR; // 确定为读
while (UCB0CTL1 & UCTXSTP); // 总线是否空闲
UCB0CTL1 |= UCTXSTT; // 发送开始位
}
/
函数名称:字节写函数
/
void EEPROM_read(unsigned char high_Address,unsigned char low_Address)
{
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0CTL1 |= UCTXSTT + UCTR; // 发送起始位,确定为写
UCB0TXBUF = high_Address; // 发送地址位高位
while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕
UCB0TXBUF = low_Address; // 发送地址位低位
while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕
UCB0CTL1 &= ~UCTR; // 确定为接收
while (UCB0CTL1 & UCTXSTP); //
UCB0CTL1 |=UCTXSTT ;
while((UCB0CTL1 & UCTXSTT)==1);
for(unsigned char i=0x0;i<0x2f;i++); // 延时确定数据已经被发送出去
UCB0CTL1 |=UCTXSTP + UCTXNACK; // 发送停止位和NACK位
}
/
函数名称:接收中断函数
/
// USCI_B0 Data ISR
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
RXData = UCB0RXBUF; // Get RX data
Int_char(RXData);
LCD12864_gotoXY(2,0); //第2行,第1列显示
LCD12864_sendstr(Result);
/
key_code[0]=RXData%10+'0';
key_code[1]=0;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr(key_code);
/
// __bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
void Init_UART()
{
P3OUT &= ~(BIT4+BIT5+BIT6+BIT7);
P3SEL = 0xF0; // P34,5,6,7 = USCI_A0 TXD/RXD USCI_A1 TXD/RXD
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600 = 341
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
UCA1CTL1 |= UCSSEL_1; // CLK = ACLK
UCA1BR0 = 0x03; // 32kHz/9600 = 341
UCA1BR1 = 0x00; //
UCA1MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA1CTL1 &= ~UCSWRST; // Initialize USCI state machine
UC1IE |= UCA1RXIE; // Enable USCI_A0 RX interrupt
_BIS_SR(GIE); //使能中断
}
void Init_ADC()
{
ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12
ADC12CTL1 = SHP; // Use sampling timer
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ENC; // Conversion enabled
P6DIR &= 0x01; // P60, i/p
P6SEL |= 0x01; // P60-ADC option select
_BIS_SR(GIE); //使能中断
}
void Start_ADC()
{
ADC12CTL0 |= ADC12SC; // Start convn, software controlled
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
LCD12864_sendbyte(iDat,UCA0RXBUF);
}
#pragma vector=USCIAB1RX_VECTOR
__interrupt void USCI1RX_ISR(void)
{
while (!(UC1IFG&UCA1TXIFG)); // USCI_A0 TX buffer ready
UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
LCD12864_sendbyte(iDat,UCA0RXBUF);
//UCA1TXBUF = 'z';
}
// ADC12 interrupt service routine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
int i=ADC12MEM0;
Int_char(i);
LCD12864_gotoXY(2,0); //第1行,第1列显示
LCD12864_sendstr(Result);
/
key_code[0] =i/1000+'0';
key_code[1] =i/100%10+'0';
key_code[2] =i/10%10+'0';
key_code[3] =i%10+'0';
key_code[4] =0;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr(key_code);
/
}
void Init_all()
{
LCD12864_initial(); //LCD初始化,包含了数码管和LED灯初始化
P7DIR=0x0F; //键盘扫描初始化
P7REN=0xF0; //输入上下拉电阻使能,输出上下拉不使能
P7OUT=0xF0; //输入上拉
Init_UART(); //串口初始化
Init_compa(); //比较器初始化
Init_ADC(); //ADC初始化
Init_IIC(); //IIC初始化
}
void Test_Led()
{
unsigned char i=0;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("1Test_LED");
for(;i<16;i++)
{
P8OUT=0xF0|i;
Delayms(50);
}
}
void Test_Seg()
{
int i;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("2Test_SEG");
for(i=0;i<500;i++)
{
//4,3,2,1
P1OUT&=~0x02;
P1OUT|=0x10|0x08|0x04;
P5OUT=Seg_Data[9]; //清楚数码管显示
Delayms(1);
P1OUT&=~0x04;
P1OUT|=0x10|0x08|0x02;
P5OUT=Seg_Data[8]; //清楚数码管显示
Delayms(1);
P1OUT&=~0x08;
P1OUT|=0x10|0x04|0x02;
P5OUT=Seg_Data[7]; //清楚数码管显示
Delayms(1);
P1OUT&=~0x10;
P1OUT|=0x08|0x04|0x02;
P5OUT=Seg_Data[6]; //清楚数码管显示
Delayms(1);
}
P5OUT=0x00; //熄灭所有数码管
}
void Test_Key()
{
unsigned char i=0;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("3Test_KEY");
LCD12864_gotoXY(2,0); //第2行,第1列显示
LCD12864_sendstr("按键:");
for(;i<16;i++)
{
Int_char(Get_Keycode());
LCD12864_gotoXY(2,3);
LCD12864_sendstr(" ");
LCD12864_gotoXY(2,3);
LCD12864_sendstr(Result);
Delayms(100); //防抖
}
}
void Test_Uart()
{
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("4Test_UART");
LCD12864_gotoXY(2,0); //第2行,第1列显示
}
void Test_Compa()
{
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("5Test_COMPA");
}
void Test_ADC()
{
int i=0;
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("6Test_ADC");
for(;i<200;i++)
{
Start_ADC();
Delayms(10);
}
}
void Test_IIC()
{
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("7Test_IIC");
EEPROM_Write(0x00,0x40,7); // 字节写
Delayms(10);
EEPROM_read(0x00,0x40);
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
Init_all();
while(1){
Test_Led(); //1测试LED
LCD12864_gotoXY(2,0); //第1行,第1列显示
LCD12864_sendstr("请按16键!");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
Test_Seg(); //2测试数码管
LCD12864_gotoXY(2,0); //第1行,第1列显示
LCD12864_sendstr("请按16键!");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
Test_Key(); //3测试按键扫描
LCD12864_gotoXY(2,0); //第1行,第1列显示
LCD12864_sendstr("请按16键!");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
LCD12864_gotoXY(3,0); //第3行,第1列显示
LCD12864_sendstr("请按16键!");
Test_Uart(); //4测试串口
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
Test_Compa(); //5测试比较器
LCD12864_gotoXY(2,0); //第2行,第1列显示
LCD12864_sendstr("请按16键!");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
Test_ADC(); //6测试ADC
LCD12864_gotoXY(3,0); //第3行,第1列显示
LCD12864_sendstr("请按16键!");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
Test_IIC(); //7测试IIC
Delayms(100);
LCD12864_gotoXY(3,0); //第3行,第1列显示
LCD12864_sendstr("测试完成");
while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子
LCD12864_clear();
}
}
不知你的液晶是什么控制器的,这个是st7920的
/
文件名 : 串行12864显示c
描述 : 该程序实现了12864以串行的方式进行通信。
创建人 : 东流,2009年4月10日
版本号 : 20
/
#include <reg52h>
#include <intrinsh>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^5; //片选信号
sbit SID=P2^6; //数据信号
sbit SCLK=P2^7; //时钟信号
sbit RST=P2^2; //复位信号
sbit CH = P2^4; //并行、串行选择信号
/
名称 : delay()
功能 : 延时,延时时间为 100us t。这是通过软件延时,有一定误差。
输入 : t
输出 : 无
/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/
名称 : sendbyte()
功能 : 按照液晶的串口通信协议,发送数据
输入 : zdata
输出 : 无
/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/
名称 : write_com()
功能 : 写串口指令
输入 : cmdcode
输出 : 无
/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/
名称 : write_data()
功能 : 写串口指令
输入 : cmdcode
输出 : 无
/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/
名称 : lcdinit()
功能 : 初始化函数
输入 : cmdcode
输出 : 无
/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/
名称 : hzkdis()
功能 : 显示字符串
输入 : s
输出 : 无
/
void hzkdis(unsigned char code s)
{
while(s > 0)
{
write_data(s);
s++;
delay(50);
}
}
/
名称 : Test()
功能 : 显示子函数
输入 : 无
输出 : 无
/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("单片机开发板");
write_com(0x89);
hzkdis(" ");
write_com(0x98);
hzkdis(" 东流电子");
}
/
名称 : Main()
功能 : 主函数
输入 : 无
输出 : 无
/
void Main()
{
CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
段1:为这些引脚号起个有实际含义别名,有助于阅读程序,可以理解为#define Name P2^4
段2:检测液晶是否正忙,能否接受指令,等待液晶不忙时退出函数,下面就可以发送指令了
段3:命令是用来控制液晶的,例如清除显示内容,查询液晶状态等等,数据是用来显示的编码,类似于数码管的显示码,具体字符的编码要查手册。准确地说,数据也是通过命令的形式传进液晶的。
段4:通过各种指令进行初始化。液晶“模块”相当于单片机+“屏幕”,类似于启动开机步骤。
包括:设置工作方式,如串行或并行方式
复位,先置复位脚低,再置高
选择指令集,告诉液晶如何把指令翻译正具体 *** 作,具体指令手册上有
数据流,指令通过什么样的信号传输,如8位并行,4位并行,串行
开显示,打开屏幕,之前的 *** 作在屏幕上都是看不到的,都是内部 *** 作
清除显示,清显示缓冲区,就是模块内存放显示内容编码一内存
游标等,控制当标位置,类比于windows的文本编辑,那个闪烁的光标是可以用鼠标、键盘控制的
段5:模块本身内置了常用标准字符的编码,就是字符格式,或称之为字库。平时使用只要输入比如说ascii码至模块,模块会自动转换为具体的点阵编码;此外还可以自定义部分非标准编码,其字符格式(即点阵)需要自己编,比如一个816点阵共128点,哪些点亮哪些点灭由1bit二进制数表示,共16字节,1616点阵就是32字节,按照液晶模块规定的顺序,发送至模块自定义区(有专用指令),之后就可以像使用内置字库一样使用了,而不用每次传输16或32字节。
段6:x y不能理解为坐标。编写者懒得命名了。具体要看怎么调用的,x应该是把一个大区域分成小区域的编号,y是小区域内部的编号
段7:好像是由液晶内部地址排列规则决定的。从地址上看,12864应该是两组6464拼起来的,所以水平地址不同,相当于片选信号不同。
if(a&(1<<(i-1))) RW_SID=1;
表示1左移i-1位再于a进行与运算,i=8的情况下i-1=7,1左移7位就是0x80。再跟a与运算(全1出1有0出0)即可获得a的最高位。以此类推可以取出a的所有位。
if(RW_SID==1) dat|=(1<<(i-1));
当RW_SID端口为1时把1左移i-1位跟dat或运算。i=8的情况下1左移i-1位正好是0x80,再经过与运算保存最高位,循环移位再或运算就能读取到全部位保存在dat里面
可以写成
//写部分
if(a&0x80)//取出a的最高位
RW_SID=1;//如果是1则输出1
else
RW_SID=0;//否则输出0
a<<=1;//a整体左移,让第7位补到最高位的位置,循环取出
E_CLK=1;
delay(100);
E_CLK=0;
delay(100);
//读部分
E_CLK=1;
delay(100);
dat<<=1;//接收1次数据后左移。第一次为0的情况影响数据
if(RW_SID)//当端口为高的时候
dat++;//dat+1相当于dat|=1 当端口为0的时候默认左移最低位是补零的,所以不用管
E_CLK=0;//循环8次后第一次接受到的数据就在最高位了
delay(100);
效果是一样的相对来说比较好理解
先不急,慢慢来。先检查你的硬件有没有问题,如果没有问题再检查你的程序有没问题,学单片机是个心细的事。如果要程序就联系我!你也可以把你程序发我邮箱帮你看看。li_meng_lin@126com
刚看了你楼上的追问,液晶亮和程序没关系,只能说明你液晶供电正常。程序能下载只能说明你程序语法没错误,有可能逻辑错误
以上就是关于谁有用51单片机控制12864显示数字时钟的程序!急求!不用ds1302;简单一点就好。有好的答案加分!全部的内容,包括:谁有用51单片机控制12864显示数字时钟的程序!急求!不用ds1302;简单一点就好。有好的答案加分!、求STC12C5A60S2单片机的12864液晶串行程序、ly51s单片机开发板做的 12864液晶显示原理和C程序每一句都是什么意思,请高手教教我~感激不尽QQ174649050等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)