|
直接移植的公司给的51程序代码,但是无法显示,公司说是可以去掉读的函数,直接写入就好,就现在51上测试成功,可以显示然后直接粘贴到430上,对延时和串口进行修改,但是一直是没有结果。。
请教各位啊
51程序,可以正常显示
PS:删除了读,这个算是最简单的显示程序了吧!
//=============================================
#include <reg52.h>
//=============================================
sbit lcd_rs =P3^0; //L:´æÈ¡»º´æÆ÷,H:´æÈ¡DDRAM
sbit lcd_wr =P3^1; //LÓÐЧ
sbit lcd_rd =P3^2; //LÓÐЧ
sbit lcd_cs1 =P3^3; //LÓÐЧ
//sbit lcd_cs2 =P3^5; //HÓÐЧ(¿ÉÖ±½ÓÉÏÀ)
sbit lcd_busy =P3^5;
sbit lcd_int =P3^6; //½ÓMCUµÄINT0
//sbit lcd_rst =P3^7; //LÓÐЧ(¿ÉÐü¿Õ)
#define lcd_regname P1
#define lcd_regdata P1
#define lcd_regnada P1
#define lcd_data P1
#define lcd_control P3
#define uchar unsigned char
#define uint unsigned int
uchar code inittab1[]={
0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21,0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,0xA0,0xA1,0xA2,0xA3,0xB0,0xB1,0xC0,0xC1,
0xC8,0xC9,0xCA,0xD0,0xE0,0xF0,0xF1};
uchar code inittab2[]={
0xC9,0xE2,0x10,0x80,0x2B,0x00,0x91,0x27,0xEF,0x00,0x00,0x27,0xEF,0x00,0x00,0x00,
0x00,0x00,0x00,0xEF,0xAA,0x00,0x00,0x06,0x11,0x00,0x00,0x00,0x27,0xEF,0x00,0x36,
0x80,0x80,0x00,0x80,0x00,0xA0,0x1F};
uchar code tab1[]={
" Õâ ÊÇ Ò» ¸ö ³Ì Ðò "
" hdfahfashdflajfhalsjfh "
" No-Touch!! "
" X= "
" Y= "};
uchar code tab2[]="No-Touch!!";
uchar code tab3[]="Touch-Now!";
uchar tabx[4];
uchar taby[4];
void delay_nop (int k)
{
int i;
for(i=0;i<k;i++);
}
void delay1ms (int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<123;j++);
}
//=============================================
void lcd_regwr(uchar regnada) small
{
lcd_regnada = regnada;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 0; // rs = 0;
lcd_wr = 0; // wr = 0;
delay_nop(10);
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
}
void lcd_datawrite(uchar wrdata) small
{ //????DDRAM
//while(lcd_busy == 0);
delay_nop(10);
lcd_data = wrdata;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 1; // rs = 1;
lcd_wr = 0; // wr = 0;
delay_nop(10);
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
}
void lcd_regwrite(uchar regname,uchar regdata) small
{ //д×ÊÁϵ½»º´æÆ÷
lcd_regwr(regname);
delay_nop(1);
lcd_regwr(regdata);
}
//.............................................
//=============================================
void lcd_reset(void) small
{ //????
delay1ms(240); // delay 240ms ??????
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_initial(void) small
{ //???
uchar i;
for(i=0;i<39;i++)
{
lcd_regwrite(inittab1[i],inittab2[i]);
}
}
//.............................................
void lcd_clear(void) small
{ //??
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
//reg_rddata = lcd_regread(0xf0);
reg_rddata |= 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_character(uchar code *cha,uint count) small
{ //???????
uint i;
for(i=0;i<count;i++)
{
lcd_datawrite(*cha);
++cha;
}
}
//.............................................
void gotoxy(uchar x,uchar y) small
{ //???
lcd_regwrite(0x60,x); // active window top register(awtr)
lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================
void main (void)
{
//uchar reg_rddata;
lcd_reset();
lcd_initial();
lcd_clear();
lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,180);
while(1);
}
下面是430程序。。和51程序一样只是增加了精确的延时和修改了端口,可以和51程序进行对比
//=============================================
#include <msp430f2618.h>
#include <stdio.h>
#include "UART.h"
//=============================================
#define PORTF P2OUT
#define lcdcs1_H PORTF|= BIT3
#define lcdcs1_L PORTF&= ~BIT3
#define lcden_H PORTF|= BIT2
#define lcden_L PORTF&= ~BIT2
#define lcdrw_H PORTF|= BIT1
#define lcdrw_L PORTF&= ~BIT1
#define lcdrs_H PORTF|= BIT0
#define lcdrs_L PORTF&= ~BIT0
#define lcd_busy P2IN&BIT5
#define lcd_regname P7OUT
#define lcd_regdata P7OUT
#define lcd_regnada P7OUT
#define lcd_data P7OUT
#define lcd_data_in P7IN
#define lcd_control P2OUT
#define uchar unsigned char
#define uint unsigned int
//=============================================
uchar inittab1[]={
0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21,0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,0xA0,0xA1,0xA2,0xA3,0xB0,0xB1,0xC0,0xC1,
0xC8,0xC9,0xCA,0xD0,0xE0,0xF0,0xF1};
uchar inittab2[]={
0xC9,0xE2,0x10,0x80,0x2B,0x00,0x91,0x27,0xEF,0x00,0x00,0x27,0xEF,0x00,0x00,0x00,
0x00,0x00,0x00,0xEF,0xAA,0x00,0x00,0x06,0x11,0x00,0x00,0x00,0x27,0xEF,0x00,0x36,
0x80,0x80,0x00,0x80,0x00,0xA0,0x1F};
uchar tab1[]={
" 金鹏电子有限公司D系列液晶模块 "
" 触摸屏演示程序 "
" No-Touch!! "
" X= "
" Y= "};
uchar tabx[4];
uchar taby[4];
void lcd_regwr(uchar regnada) //small
{
lcd_regnada = regnada;//Delay_Us(1);
lcdcs1_L; // chip enable.
lcden_H; //
lcdrs_L; // rs = 0;
lcdrw_L; // wr = 0;//xiugaiguo
Delay_Us(3);
lcdrw_H; // wr = 1;//xiugaiguo
lcdrs_H; // rs = 1;
lcdcs1_H; // chip disable.
}
//.............................................
void lcd_datawrite(uchar wrdata) //small
{ //写资料到DDRAM
while(lcd_busy == 0);
//Delay_Ms(1);
lcd_data = wrdata;//Delay_Us(1);
lcdcs1_L; // chip enable.
lcden_H; //
lcdrs_H; // rs = 1;
lcdrw_L; // wr = 0;
Delay_Us(3);
lcdrw_H; // wr = 1;
lcdrs_H; // rs = 1;
lcdcs1_H; // chip disable.
}
void lcd_regwrite(uchar regname,uchar regdata) //small
{ //写资料到缓存器
lcd_regwr(regname);
Delay_Ms(1);
lcd_regwr(regdata);
}
//.............................................
//=============================================
void lcd_reset(void) //small
{ //上电复位
Delay_Ms(240); // delay 240ms 等待上电复位
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_initial(void) //small
{ //初始化
uchar i;
for(i=0;i<39;i++)
{
lcd_regwrite(inittab1[i],inittab2[i]);
}
}
//.............................................
void lcd_clear(void) //small
{ //清屏
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
//reg_rddata = lcd_regread(0xf0);
reg_rddata = 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_character(uchar *cha,uint count) //small
{ //显示中文或字符
uint i;
for(i=0;i<count;i++)
{
lcd_datawrite(*cha);
++cha;
}
}
//.............................................
void gotoxy(uchar x,uchar y) //small
{ //定坐标
lcd_regwrite(0x60,x); // active window top register(awtr)
lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================
void port_init(void) //写资料到缓存器
{
P2DIR |= BIT0 + BIT1 + BIT2 + BIT3;
P2DIR &= ~BIT5;
P7DIR |= 0xff;
}
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;
Clock2_Init();
Timer_Init();
port_init();
lcd_reset();
lcd_initial();
lcd_clear();
lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,180);
while(1);
}
这程序我感觉很简单了,基本上和51的是一样的,但是始终无法显示。请教各位啊
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|