㈠ 128*64LCD液晶显示(课程设计)
我博客上有液晶的程序,你可以去参考一下,估计对你有帮助。
对不起,通常都没有完整的,完整的通常不能放,
http://hi..com/xxjmcu/
㈡ 各位好!本人用AT89S52单片机控制12864显示几个汉字,但是只有背景亮,不显示字!现求助于大伙!谢谢!
编程没问题的话就是你硬件的问题了 如果你是自己买的12864装的话 可能把12864的一个对比度的引脚电压给搞错了 叫vout的脚 不是0v就是5v 你试试看
㈢ 求51单片机12864和ds1307时钟程序
#include<reg51.h>
#include<string.h>
#include"ds1302.h"
#include"menu.h"
#include"lcd12864.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitled=P3^7;
uchartemp,keyval;
ucharusern=0; //用户序号
//structmlist*nuser;
uchardisdat[16];
voiddisplaykey()
{
keyval=0xff;
P1=0xfe;
temp=P1;
temp&=0xf0;
if(temp!=0xf0)//判断是否有键盘按下,真为有
{
delay(50);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//判断是否有键盘按下,真为有
{
temp=P1;
switch(temp)
{
case0xee:keyval='0';break;
case0xde:keyval='1';break;
case0xbe:keyval='2';break;
case0x7e:keyval='3';break;
default:break;
}
}
}
while((P1&0xf0)!=0xf0);
//判断第二行键盘
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(50);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//判断是否有键盘按下,真为有
{
temp=P1;
switch(temp)
{
case0xed:keyval='4';break;
case0xdd:keyval='5';break;
case0xbd:keyval='6';break;
case0x7d:keyval='7';break;
default:break;
}
}
}
while((P1&0xf0)!=0xf0);
//判断第三行键盘
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(50);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//判断是否有键盘按下,真为有
{
temp=P1;
switch(temp)
{
case0xeb:keyval='8';break;
case0xdb:keyval='9';break;
case0xbb:keyval='a';break;
case0x7b:keyval='b';break;
default:break;
}
}
}
while((P1&0xf0)!=0xf0);
//判断第四行键盘
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(50);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//判断是否有键盘按下,真为有
{
temp=P1;
switch(temp)
{
case0xe7:keyval='c';break;
case0xd7:keyval='d';break;
case0xb7:keyval='e';break;
case0x77:keyval='f';break;
default:break;
}
}
}
while((P1&0xf0)!=0xf0);
}
voiddistime(void)
{
uchar*cal="年月日";
disdat[0]='2';
disdat[1]='0';
disdat[2]='0'+TIME[6]/16;//年
disdat[3]='0'+(TIME[6]&0x0f);
disdat[4]=cal[0];
disdat[5]=cal[1];
disdat[6]='0'+TIME[4]/16;//月
disdat[7]='0'+(TIME[4]&0x0f);
disdat[8]=cal[2];
disdat[9]=cal[3];
disdat[10]='0'+TIME[3]/16;//日
disdat[11]='0'+(TIME[3]&0x0f);
disdat[12]=cal[4];
disdat[13]=cal[5];
disdat[14]=0;
displaystr(1,2,disdat);
disdat[0]='0'+TIME[2]/16;//时
disdat[1]='0'+(TIME[2]&0x0f);
disdat[2]=':';
disdat[3]='0'+TIME[1]/16;//分
disdat[4]='0'+(TIME[1]&0x0f);
disdat[5]=':';
disdat[6]='0'+TIME[0]/16;//秒
disdat[7]='0'+(TIME[0]&0x0f);
disdat[8]=0;
displaystr(4,4,disdat);
}
voidinit_timer(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
}
main()
{
ucharnum;
InitLCD();//初始LCD
Ds1302Init();
init_timer();
ClearScreen(0);
delay(200);
num=0;
while(1)
{
Ds1302ReadTime();
distime();
displaykey();
delay(200);
}
}
㈣ 谁能帮我利用单片机设计一个可以绘制规则图形的系统,图形及参数用12864液晶显示。参数由按钮开关输入。急
路过~~~~~~
㈤ 51单片机12864并行程序
检查液晶屏控制器的时序.操作命令码.初始化过程,还有硬件,上下拉电阻,既然决定用并口,那么PSB就直接VDD,这样还能省一个IO口. 注意下面的程序中RS=0,RW=0,能同时为低吗? void write_command(uchar cmd)
{
check_busy();
rs=0;
rw=0;
en=0;
P2=cmd;
delay_4us();
en=1;
delay_4us();
en=0;
}
㈥ 单片机课程设计!不要复制百度!高分悬赏!!
1.单片机控制的60s倒计时
这个太简单了,不用什么提示吧?硬件上只要单片机最小系统加上数码管两个,程序上只要设置好定时器就行.
2.
基于单片机的电子钟设计
这个要复杂一点.大概要单片机+数码管+实时时钟芯片如DS系列(ds1302加要电池)+存储芯片如24C02,当然驱动数码管的如译码器或锁存器也要有.
实在说你第一个设计网上能找到现成的,第二个设计网上也能找到现成的,不过要你自己使用keil、proteus软件综合调试仿真,这两个内容都有,自己动手网络一下吧,不要太依赖别人.毕竟这样才能提高一下你自己.
㈦ 关于51单片机12864程序的问题
用这个吧。我以前用的
#include <reg52.h>
#include<intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
//8bit数据接入IO口
#define Part P0 //P0接8位数据线
//控制数据端
sbit LCD_RS=P3^2; //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit LCD_RW=P1^1; //定义12864液晶RW端,读/写信号 H:读 L:写
sbit LCD_EN=P1^2; //定义12864液晶LCDEN端, 片选信号 下降沿触发,锁存数据
//sbit LCD_PSB=P3^2; //定义12864液晶PSB端, H:并行 L:串行
sbit LCD_RST=P3^6; //定义12864液晶RST端, H:不复位 L:复位
sbit AD_ST=P1^6;//定义AD
sbit AD_OE=P3^7;
sbit AD_A=P1^3;
sbit AD_B=P1^4;
sbit AD_C=P1^5;
sbit AD_EOC=P1^7;
sfr T2MOD=0XC9;
uchar code dis1[]={"转速"};
uchar code dis2[]={"加速度x方向"};
uchar code dis3[]={"加速度y方向"};
uchar code dis4[]={"加速度z方向"};
uchar code Text[]={"欢迎大家观看"};
uint i;
uchar code dat[];
int jishu;
int su1;
int su2;
int maichong1;
int maichong2;
//毫秒延时函数
void delayms(uint x) //nms的延时
{
uint i;
while(x--)
{
for(i=0;i<125;i++)
{;}
}
}
void delay(uint xms)
{
uint i,j;
for(j=0;i<xms;j++)
for(i=0;i<110;i++);
}
//LCD忙检测函数
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN= 1;
result=(bit)(Part & 0x80);
LCD_EN=0;
return result;
}
//液晶写命令函数
void lcd_write_cmd(uchar com)
{
while(lcd_busy());
LCD_RS=0; //选择指令寄存器
LCD_RW=0; //写
LCD_EN=0;
Part=com; //指令值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//液晶写一个字符数据函数
void lcd_write_dat(uchar date)
{
while(lcd_busy());
LCD_RS=1; //选择数据寄存器
LCD_RW=0; //写
LCD_EN=0;
P0=date; //数据值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//液晶写一个字符串函数
void lcd_write_string(uchar *str)
{
while(*str!='\0') //未结束
{
lcd_write_dat(*str++);
delay(5);
}
}
//液晶显示位置函数
void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示
{
uchar pos;
if(x==1) //第一行
{x=0x80;}
else if(x==2) //第二行
{x=0x90;}
else if(x==3) //第三行
{x=0x88;}
else if(x==4) //第四行
{x=0x98;}
pos=x+y-1; //首地址为0X80
lcd_write_cmd(pos);
}
//液晶初始化函数
void lcd_init()
{
// LCD_PSB=1; //并行方式
LCD_RST=1; //不复位
lcd_write_cmd(0x30);
delay(5);
lcd_write_cmd(0x0c); //开显示,不显示光标
delay(5);
lcd_write_cmd(0x06); //写一个字符后地址指针自动加1
delay(5);
lcd_write_cmd(0x01); //清屏
delay(5);
}
㈧ 求由液晶显示模块:QC12864B、单片机:AT89C52、时钟芯片:DS1302、温度传感器:DS18B20 组成的万年历设计
我倒是做过这个题目 不过在学校的电脑里 我那个是用12864显示的 现在估计不能帮你发来 学校里电脑没网 我现在在网吧
㈨ 51单片机编写12864
你自己写错了函数名 前后不一致 是display不是dispaly。。。最后的main里面
㈩ 仿真52单片机基于12864实现数字频率计,大神求教
实时显示波形?