搜索
bottom↓
回复: 9

唉~连个T6963的12864屏都点不亮~

[复制链接]

出0入0汤圆

发表于 2007-4-24 10:27:05 | 显示全部楼层 |阅读模式
那位兄弟帮看哈~ 就请个屏,显示一个"!"



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















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



#include <avr/io.h>

#include <avr/signal.h>

#include <avr/interrupt.h>

#include "string.h"

#include "stdlib.h"

#include <avr/wdt.h>

#include <avr/eeprom.h>

#include <avr/delay.h>



#define    NOP   asm volatile("nop
"::)



#define  LED    5

#define  Light  3  //PC3

#define  CD     2  //PC2

#define  RD     1  //PC1

#define  WR     0  //PC0



#define  LineChar  30





const unsigned char TABLE_ASCII[]=

{



             0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,

             0x10,0x10,0x00,0x00,0x18,0x18,0x00,0x00  //;!

            



};

//--------------------------------------------------------------------------

void  init_port(void);

void init_timer1(void);





unsigned char readstate(void);



void st01(void);

void st2(void);

void st3(void);

void writecode(unsigned char cmd);

void writedata(unsigned char data);

void writeauto(unsigned char data);

void oneparameter(unsigned char op1,unsigned char cmd);

void twoparameter(unsigned char op1,unsigned char op2,unsigned char cmd);

void lcd_init(void);

void lcd_clear(void);

void writeasc(unsigned char x,unsigned char y,unsigned char asc);



unsigned int r_lightdelay=0;







int main(void)

{

   cli();



   MCUSR=0;

   wdt_disable();



   init_port();

   init_timer1();



   lcd_init();

   lcd_clear();

   _delay_ms(20);

   writeasc(0,0,'1');



   sei();



   

   while(1)

   {



   };



}





void init_port(void)

{

   PORTB=0b11111111;  //

   DDRB=0b00101111;  //SCK MOSI SS输出  MISO输入

   

   PORTC=0xFF;

   DDRC=0XFF;   //

   

   PORTD=0xFF;

   DDRD=0xFF; //UI1~UI6输出

   

}



void init_timer1(void)

{

    TCCR1A=0;

        TCCR1B= (1<<CS12); //256预分频  晶振为7.3728MHz  一条指令大约34.72us

        TCNT1=65535-((7372800/256)*50)/1000;   //50ms中断初值

        TIMSK1=(1<<TOIE1); //中断允许

       

}



SIGNAL(SIG_OVERFLOW1)  //T1中断

{

   TCNT1=65535-((7372800/256)*50)/1000;



   r_lightdelay++;

   if (r_lightdelay>=40)

   {

      r_lightdelay=0;

          

          PORTC^=(1<<LED);



   }

}



unsigned char readstate(void)

{

   unsigned char lcd_state;

   

   DDRD=0x00;

   PORTD=0XFF;



   PORTC|=(1<<CD);

   NOP;

   PORTC&=~(1<<RD);

   lcd_state=PIND&0xff;

   NOP;

   NOP;

   PORTC|=(1<<RD);

   

   DDRD=0xFF;  

   return lcd_state;

}



void st01(void)

{

   while((readstate()&0x03)!=3);



}



void st2(void)

{



   while((readstate()&0x04)!=4);

}



void st3(void)

{



   while((readstate()&0x08)!=8);

}





//指令写入函数

void writecode(unsigned char cmd)

{

   st01();

   PORTD=cmd;

   PORTC&=~(1<<WR);

   NOP;

   PORTC|=(1<<WR);



}



//数据写入函数

void writedata(unsigned char data)

{

   st01();

   PORTC&=~(1<<CD);

   NOP;

   PORTD=data;

   PORTC&=~(1<<WR);

   NOP;

   PORTC|=(1<<WR);



}





//数据自动写入函数

void writeauto(unsigned char data)

{

   st3();

   PORTC&=~(1<<CD);

   NOP;

   PORTD=data;

   PORTC&=~(1<<WR);

   NOP;

   PORTC|=(1<<WR);



}



void oneparameter(unsigned char op1,unsigned char cmd)

{

   writedata(op1);

   writecode(cmd);



}





void twoparameter(unsigned char op1,unsigned char op2,unsigned char cmd)

{

   writedata(op1);

   writedata(op2);

   writecode(cmd);



}





void lcd_init(void)

{

   twoparameter(0x00,0x00,0x40);  //文本显示区域首地址

   twoparameter(30,0x00,0x41);  //文本显示区域宽度

   twoparameter(0x00,0x00,0x42);  //图形显示区域首地址

   twoparameter(30,0x00,0x43);  //图形显示区域宽度

   writecode(0xa7);               //光标形状

   writecode(0x80);               //显示方式设置,逻辑"或"合成

   writecode(0x98);               //显示开关设置





}



void lcd_clear(void)

{

   unsigned int count;

   twoparameter(0x00,0x00,0x24);

   writecode(0xb0);

   for(count=8192;count>0;count--)

      writeauto(0x00);

   writecode(0xb2);





}



void writeasc(unsigned char x,unsigned char y,unsigned char asc)

{

    unsigned char i,dat;

    unsigned int address;

    address=x*LineChar+y;



        for(i=0;i<16;i++)

        {

           dat=TABLE_ASCII;

       twoparameter((unsigned char)address,(unsigned char)(address>>8),0x24);

       oneparameter(dat,0xc4);

       address+=LineChar;

    }  





}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2007-4-24 13:24:51 | 显示全部楼层
顶哈~

出0入0汤圆

 楼主| 发表于 2007-4-24 14:52:42 | 显示全部楼层

出0入0汤圆

发表于 2007-4-24 17:28:00 | 显示全部楼层
枣椰,给你t6963的lcd12864的代码你



点击此处下载armok01151797.rar

出0入0汤圆

发表于 2007-4-24 18:01:33 | 显示全部楼层
天书啊。看不懂。虽然我对T6963C已经很熟悉了。

出0入0汤圆

 楼主| 发表于 2007-4-24 20:10:48 | 显示全部楼层
楼上的两位兄弟~谢了~虽然我还不知道自己到底是程序错了还是硬件有问题~

出0入0汤圆

 楼主| 发表于 2007-4-25 08:54:42 | 显示全部楼层
可以了~范了点小错误~^o^

出0入0汤圆

发表于 2013-10-10 21:23:06 | 显示全部楼层
soulmate 发表于 2007-4-25 08:54
可以了~范了点小错误~^o^

你好  什么问题 能说一下吗

出0入0汤圆

发表于 2013-10-12 13:30:37 | 显示全部楼层
建议网上找个能用的,确认下硬件没问题先

出0入8汤圆

发表于 2013-10-12 13:49:17 | 显示全部楼层
可以用火机点  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表