求用51单片机可以调试12864串口程序,可以显示汉字,要有注释。 10

不要反白等,刚调试12864,对于串口的片选和时钟,数据关系不是很明白,麻烦注释明白下。... 不要反白等,刚调试12864,对于串口的片选和时钟,数据关系不是很明白,麻烦注释明白下。 展开
 我来答
Top_Stig
2014-12-08
知道答主
回答量:3
采纳率:0%
帮助的人:2.7万
展开全部
#include <reg51.h>
#include <intrins.h>
sbit E_CLK =P1^7;//clock input          同步时钟输入端(根据你自己的端口改)
sbit RW_SID=P1^5;//data input/output   串行数据输入/输出端(根据你自己的端口改)

#ifndef uint
#define uint unsigned int
#endif

#ifndef uchar
#define uchar unsigned char
#endif

void delay(unsigned int n) 
{
unsigned int i;
for(i=0; i<n; i++) {;}
}
//串行发送一字节数据
void SendByte(unsigned char dat)
{
     unsigned char i;
     for(i=0;i<8;i++)
           {
                 E_CLK=0;
                 if(dat&0x80)RW_SID=1;else RW_SID=0;
                 E_CLK=1;
                 dat=dat<<1;
            }
}
//串行接收一字节数据
unsigned char ReceieveByte(void)
{
     unsigned 困慧char i,d1,d2;
     for(i=0;i<8;i++)
           {
                 E_CLK=0;delay(100);
                 E_CLK=1;
                 if(RW_SID)d1++;
                 d1=d1<<1;
            }
     for(i=0;i<8;i++)
           {
                 E_CLK=0;delay(100);
                 E_CLK=1;
                 if(RW_SID)d2++;
                 d2=d2<<1;
            }
     return (d1&0xF0+d2&0x0F);
}
//读取标志位BF
bit ReadBF(bit bf)
{
     unsigned char dat;
     SendByte(0xFA);
     dat=ReceieveByte();
     if(dat>0x7F)bf=1;else bf=0; 
     return bf;
}      
//写控制命令
void SendCMD(unsigned char dat)
{

      //RS_CS=1; 这个片选可以不理,接正5伏就好
     SendByte(0xF8);
     SendByte(dat&0xF0);//高四位
     SendByte((dat&0x0F)<<4);//低四位
      
}

//写显示迹逗数据或单字节字符
void SendDat(unsigned char dat)
{
     SendByte(0xFA);
     SendByte(dat&0xF0);//高四位
     SendByte((dat&0x0F)<<4);//低四位
      
}      

void display(unsigned char x_add,unsigned char *ptr)
{
     SendCMD(x_add);// 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
while(*ptr != '\0')
{
   SendDat(*ptr);
   ++ptr;
}
}
//初始化
void init(void)
{     delay(100);

     SendCMD(0x30);//功能设置,一次送8位数据,基本指令集
     SendCMD(0x0C);//整体显示,游标off,游标位置off
     SendCMD(0x01);//清DDRAM
     SendCMD(0x02);//DDRAM地址归位
     SendCMD(0x80);//设定DDRAM 7位地址000,0000到地址计数器AC

}

void main(void)
{
     init();
     SendCMD(0x81);
     SendDat(0x33);
     SendDat(0x42);
     SendDat(0x43);
     SendDat(0x44);
     SendCMD(0x00);
     while(1)
     {
           delay(100);
      display(0x80,"办证");
           display(0x90,"电话:12345678");

           SendCMD(0x00);   姿尺卖         
     }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
日出东方陈曦
2012-09-26 · 贡献了超过112个回答
知道答主
回答量:112
采纳率:0%
帮助的人:19.6万
展开全部
用什么12864,直接用彩屏
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jsjd_fujun
2012-09-28
知道答主
回答量:10
采纳率:0%
帮助的人:6.8万
展开全部
你需要串行数据传送方式还是并行的方式?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式