⑴ 51单片机控制12864液晶屏串行通信时序图与程序
clk=0;clk=1;clk=0;这是一个完整的CLK时钟周期,看图SCLK。
延时并没有实际的意义,主要功能是让电平保持一段时间供识别的,一般微秒级的延时就够了。
同步时钟信号,就是前面讲的clk=0;clk=1;clk=0;这样来实现的,只不过程序中是用的循环,8次循环,正好是可以传输8bit的数据。
⑵ 51单片机+GSM模块+12864显示屏可以自制通话手机吗
当然可以!用单片机通过串口发送指令就可以控制GSM模块拨打电话,还可以接听! 然后通过连接在单片机的矩阵键盘可进行拨号等操作!12864可显示拨打的号码,还可以显示单片机读取的短信等!
⑶ 51单片机12864lcd显示汉字
会用1602显示英文,就可以用12864lcd显示汉字,二者区别就在于,显示汉字要送两个字节的代码,其中首个字节的值要大于128,而ASCI码的值均小于128。
汉字的机器码不用计算,编译器会自动编译,例如
unsigned char code table[]={ "我爱单片机"“hello” };
显示时,只要先送显示的首地址即可,然后送数组里的内容即可
write_LCD_command(0x88);//第2 行首地址
for(i=0;i<16;i++)
{
write_LCD_data(tab[i]);
delay(5000);
}
⑷ 五一单片机控制12864液晶背光的问题。
如果不带PWM也可以用电位器,直接接在原来接p1.4的那条线,去掉三极管和电阻,直接用电位器提供调节。(其实你完全可以为了PWM而换单片机,换完了是一劳永逸,以后还多了ADC可以自动调节背光,可以唱出美妙的音乐,而不再是用方波输出的难听的音乐了)
如果单片机是带PWM的话就好办了,AT89S51当然不带,但是STC12C5A60S2就完全可以带替他,他是51系列单片机拓展型。(PWM不知道可以问我,完整程序我也有)
这样可以通过PWM来控制背光亮度(相当于能让单片机输出模拟信号,而不再只有高低两种电平)编程如下(在利用光敏电阻判断是否到晚上了,主程序就自己编吧):
sbitLED=P1^4;//液晶屏背光定义(PWM控制,不能更改)
/*********************************************************************************************
函数名:PWM初始化函数(控制背光亮度)
调用:PWM_init();
参数:无
返回值:无
结果:将PCA初始化为PWM模式,初始占空比为0
备注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
voidPWM_init(void){
CMOD=0x02;//设置PCA定时器
CL=0x00;
CH=0x00;
CCAPM1=0x42;//PWM1设置PCA工作方式为PWM方式(使用时删除//)
CCAP1L=0x00;//设置PWM1初始值与CCAP0H相同
CCAP1H=0x00;//PWM1初始时为0
CR=1;//启动PCA定时器
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:PWM1占空比设置函数(控制背光亮度)
调用:PWM1_set();
参数:0x00~0xFF(亦可用0~255)
返回值:无
结果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
voidPWM1_set(unsignedchara){
CCAP1L=a;//设置值直接写入CCAP0L
CCAP1H=a;//设置值直接写入CCAP0H
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转换初始化
调用:Read_init(?);
参数:输入的端口(00000XXX其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)
返回值:无
结果:
备注:适用于STC12C5A60S2单片机
/**********************************************************************************************/
voidRead_init(unsignedcharCHA){
unsignedcharAD_FIN=0;//存储A/D转换标志
CHA&=0x07;//选择ADC的8个接口中的一个(00000111清0高5位)
ADC_CONTR=0x40;//ADC转换的速度(0XX00000其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR|=CHA;//选择A/D当前通道
_nop_();
ADC_CONTR|=0x80;//启动A/D电源
DELAY_MS(1);//使输入电压达到稳定(1ms即可)
}
/*********************************************************************************************
函数名:8位A/D转换函数(采集光敏电阻数据)
调用:?=Read();
参数:无
返回值:8位的ADC数据
结果:读出指定ADC接口的A/D转换值,并返回数值
备注:适用于STC12C5A60S2单片机
/**********************************************************************************************/
unsignedcharRead(void){
unsignedcharAD_FIN=0;//存储A/D转换标志
ADC_CONTR|=0x08;//启动A/D转换(00001000令ADCS=1)
_nop_();
_nop_();
_nop_();
_nop_();
while(AD_FIN==0){//等待A/D转换结束
AD_FIN=(ADC_CONTR&0x10);//00010000测试A/D转换结束否
}
ADC_CONTR&=0xE7;//11110111清ADC_FLAG位,关闭A/D转换,
return(ADC_RES);//返回A/D转换结果(8位)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:自动背光检测程序
调用:AUTO_B();
参数:无
返回值:无
结果:检测环境光并控制背光亮度
备注:
/**********************************************************************************************/
voidAUTO_B(void){//
unsignedchard;
d=Read();
if(read_clock(0xc1)==1){//检查自动调光开关
if(d>0xD0){//
PWM1_set(1);//
}else{
PWM1_set(read_clock(0xc5)*0x1C);//
}
}
}
/*****************************************************************************/