atmega16驱动12864(ST7902)ICC程序

我一直初始化不了12864,A口我要留着做A/D转换的,不能占用。希望好心人赶快给我程序。谢谢,感激不尽。我的12864是带字库的希望大家给我的程序随便显示一句话,一行字... 我一直初始化不了12864,A口我要留着做A/D转换的,不能占用。
希望好心人赶快给我程序。谢谢,感激不尽。
我的12864是带字库的
希望大家给我的程序随便显示一句话,一行字都可以。
展开
 我来答
69mode
2009-04-24 · TA获得超过105个赞
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
我只有 C51的,你是串口,还是并口的? 下边是串口的
/********************************************************************************
*program name:st7920.c
*function: TEST TO st7920(drive)
*Design: qinhao
*Date:2009-01-07
*********************************************************************************/
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int

sbit sclk=P3^2;
sbit sid=P3^1;
sbit cs=P3^0;
unsigned char code tab[]={"深圳勤正达液晶显示器"};
void delaym(unsigned int n)
{unsigned int i,j;
for(j=n;j>0;j--);
for(i=112;i>0;i--);
}

void sendbit(uchar dat1, bitcnt)
{
unsigned char i;
for(i=0;i<bitcnt;i++)
{
sclk = 0;
dat1=dat1<<1;
sid = CY;
sclk = 1;
sclk = 0;
}
}

unsigned char receivebyte(void)
{
unsigned char i,temp1,temp2;
temp1=temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
sclk = 0;
sclk = 1;
sclk = 0;
if(sid) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
sclk = 0;
sclk = 1;
sclk = 0;
if(sid) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}

void checkbusy( void )
{
do sendbit(0xfc,8); //11111,RW(1),RS(0),0
while(0x80&receivebyte());
}

void senddat(uchar dat1)
{
cs=1;
checkbusy();
sendbit(0xfa,8);
sendbit(dat1&0xf0,8);
sendbit((dat1<<4)&0xf0,8);
cs=0;

}

void sendcom(uchar com)
{
cs=1;
checkbusy();
sendbit(0xf8,8);
sendbit(com&0xf0,8);
sendbit((com<<4)&0xf0,8);
cs=0;

}

void inti()
{
sendcom(0x30); ///////8位MPU控制界面,基本指令集

sendcom(0x03);

sendcom(0x0c); ////// 开显示,关游标,

sendcom(0x01);

sendcom(0x06);

}
void display(uchar dat1)
{
unsigned char i,j;
sendcom(0x34);
sendcom(0x36);
for(i=0;i<32;i++)
{
sendcom(0x80|i);
sendcom(0x80);
for(j=0;j<32;j++)
senddat(dat1);
}
}

void main()
{
uchar i;
delaym(100);
inti();
for(i=0;i<20;i++)
{

senddat(tab[i]);
};
display(0xff);
while(1);
}

并口:
/********************************************************************************
*program name:并st7920.c
*function: TEST TO fm240128m-12l(drive)
*Design: qinhao
*Date:2009-3-30
*********************************************************************************/
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int

sbit e=P3^2;
sbit rs=P3^0;
sbit rw=P3^1;
sbit rst=P3^6;
/********************************************************************************
延时N ms
*********************************************************************************/
void delaym(unsigned int n)
{
unsigned int i,j;
for(j=n;j>0;j--)
for(i=112;i>0;i--);
} /////// 精确MS,
/********************************************************************************
检查状态,D7为忙状态位,D6~D0为AC地址
*********************************************************************************/
uchar BusyFlag()
{
uchar BF;
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
BF=P1;
_nop_();
e=0;
_nop_();
return(BF);
}
/********************************************************************************
发送命令
*********************************************************************************/
void SendCommand(uchar command)
{
// uchar BF;
while(BusyFlag()&0x80);
rs=0;
rw=0;
e=1;
_nop_();
P1=command;
_nop_();
_nop_();
e=0;
_nop_();
_nop_();
}
/********************************************************************************
发送数据
*********************************************************************************/
void SendData(uchar dat)
{
//uchar BF;
while(BusyFlag()&0x80);
rs=1;
rw=0;
e=1;
_nop_();
P1=dat;
_nop_();
_nop_();
e=0;
_nop_();
_nop_();
}
/********************************************************************************
读AC地址
*********************************************************************************/
uchar ReadAC()
{
uchar AC;
AC=BusyFlag()&0x07;
return(AC);
}
/********************************************************************************
读数据
*********************************************************************************/
uchar ReadData()
{
uchar dat;
while(BusyFlag()&0x80);
rs=1;
rw=1;
e=1;
_nop_();
dat=P1;
_nop_();
_nop_();
e=0;
_nop_();
_nop_();
return(dat);
}

/********************************************************************************
初始化LCD
*********************************************************************************/
void LcdInit()
{
rst=0;
delaym(10);
rst=1;
SendCommand(0x30);//基本指令集
delaym(10);
SendCommand(0x03);//AC回00H
SendCommand(0x0c);//开显示,关游标
SendCommand(0x01);//清屏,AC返回00H
delaym(10);
SendCommand(0x06);//设定游标显示移位
delaym(10);
}
/********************************************************************************

*********************************************************************************/

void main()
{
uchar i;
LcdInit();
SendCommand(0x34); 扩充指令
SendCommand(0x04); 反白00行
while(1)
{
i++;
SendData(i);
delaym(700);
};
}
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一款广泛应用于消费类电子、汽车、工业和物联网领域的低功耗嵌入式系统芯片。ST公司推出了多个STM32系列,以满足不同应用需求。以下是ST公司主要的STM32系列:1. STM32WB系列:这是ST公司推出的第一款支持2.4GHz... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
百度网友4cb8c3a
2009-04-28
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
你好,
其实是你只要控制好芯片的时序,时序控制好了命令就写的进去,当然你要知道你用的单片机或者ARM开发板的运行效率了,因为不同的开发板上同一代码的运行时间是不一样的;
还有一个就是芯片在不写的时候都要把它的引脚置高,防止有些引脚因为低电平而被使能,使芯片进入无法预料的状态。
我自己写了KS0108的程序,不带字库的,而且是在ARM上的,所以就不能满足你的要求了
我也刚在学习,不为得分,就为交流!!!!!!!!!
能得分当然就最好了,呵呵!!!!!!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式