搜索
bottom↓
回复: 3

飞思卡尔 MC9S12XS128调试液晶12864程序

[复制链接]

出0入0汤圆

发表于 2012-2-7 21:54:00 | 显示全部楼层 |阅读模式
点击此处下载 ourdev_716696TNG0TB.rar(文件大小:2K) (原文件名:12864.rar)


//=========头文件12864_Init.h=============//
#ifndef _12864_Init_H
#define _12864_Init_H
      
      
#include<MC9S12XS128.h>
#include <hidef.h>
#include "derivative.h"
#include <stdio.h>


#define uint unsigned int
#define uchar unsigned char


#define lcdcs PORTA_PA7
#define lcdclk PORTA_PA6
#define lcdsid PORTA_PA0
#define lcdpsb PORTA_PA4
#define lcdrst PORTA_PA3


void lcd_Init(void);
void write_com(uchar comcod);
void write_dat(uchar dat);
void Display(uchar *s);
void Delay(uint t);
void screen_Init(uchar *frequent,uchar *phasemeasure,uchar *amplitude1,uchar *amplitude2);
      
void screen(uchar *frequent,uchar *phasemeasure,uchar *amplitude1,uchar *amplitude2);
      
#endif

//=======12864_Init.c文件==========//
#include "12864_Init.h"


//extern Phaseparameters phaseparameters;

//............延时.............
  void Delay(uint t)
  {
    while(t--);
  }




//..................写命令..................
  void write_com(uchar comcod)
  {       
    uchar i,j;
   
          Delay(500);//必须加延时,且不要太短
          lcdcs=1;   // 串行片选信号高电平有效
          lcdclk=0;
          lcdsid=1;
    for(i=0;i<5;i++)         
          {
            lcdclk=1;
                lcdclk=0;
           }          // 连续五个1,同步位字符串
  lcdsid=0;//写
  Delay(8);
        lcdclk=1;
        lcdclk=0;
        lcdsid=0;//命令
        Delay(8);
        lcdclk=1;
        lcdclk=0;
        lcdsid=0; //固定格式为0
        Delay(8);
        lcdclk=1;
        lcdclk=0;

        for(j=0;j<2;j++)
        {
          for(i=0;i<4;i++)
            {
                  //lcdsid=(((comcod<<(i+4*j))&&(0x80))?1:0);  //串行送数据,一位一位的送
      lcdsid=(comcod&0x80)?1:0;           
                  comcod=comcod<<1;
                  Delay(8);
                  lcdclk=1;
                  lcdclk=0;
                 }
                 lcdsid=0;
                 for(i=0;i<4;i++)
            {
            Delay(8);
                  lcdclk=1;
                  lcdclk=0;
                 }
       
    }

       
  }

  //.................写数据............... .
  void write_dat(uchar dat)
  {       
    uchar i,j;
          Delay(100);//必须加延时,且不要太短
          lcdcs=1;   // 串行片选信号高电平有效
          lcdclk=0;
          lcdsid=1;
    for(i=0;i<5;i++)
          {
            Delay(8);
            lcdclk=1;
                  lcdclk=0;
           }          // 连续五个1,同步位字符串
    lcdsid=0;
    Delay(8);
          lcdclk=1;
          lcdclk=0;
          lcdsid=1;
          Delay(8);
          lcdclk=1;
          lcdclk=0;
          lcdsid=0;    //固定格式为0
          Delay(8);
          lcdclk=1;
          lcdclk=0;

        for(j=0;j<2;j++)
        {
          for(i=0;i<4;i++)
            {
            
                  //lcdsid=((dat<<(i+4*j))&&(0x80))?1:0;
                  lcdsid=(dat&0x80)?1:0;
                  dat=dat<<1;
   
      Delay(8);
                  lcdclk=1;
                  lcdclk=0;
                 }
                 lcdsid=0;
                 for(i=0;i<4;i++)
            {
            Delay(8);
                  lcdclk=1;
                  lcdclk=0;
                 }
       
    }

       
  }

//..........液晶初始化...................
void lcd_Init()
{   
     write_com(0x30);                      //选择基本指令集,选择8bit数据流                  
     Delay(5000);
     write_com(0x0c);                     //开显示(无游标、不反白)
     Delay(5000);
     write_com(0x01);                       //清除显示,并且设定地址指针为00H
     Delay(5000);
     write_com(0x06);            //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
         Delay(5000);
}


//.................液晶显示.................
void Display(uchar *s)
{
       
      while(*s>0)
      {
                 
                 write_dat(*s);
         s++;
         Delay(5000);//延时不要太短,要不然效果不好
                 
      }
       

}
//..................液晶显示内容.....................
void screen_Init(uchar *frequent,uchar *phasemeasure,uchar *amplitude1,uchar *amplitude2)
{
  write_com(0x01);
  Delay(5000);
  write_com(0x80);  //必须空一个格,要不然乱码
  Delay(8);
  Display(frequent);
  
  write_com(0x90);
  Delay(8);
  Display(phasemeasure);
  write_com(0x88);
  Delay(8);
  Display(amplitude1);
  write_com(0x98);
  Delay(8);
  Display(amplitude2);
}


void screen(uchar *frequent,uchar *phasemeasure,uchar *amplitude1,uchar *amplitude2)
{
  //write_com(0x01);
  
/*   
  sprintf(frequent," %.1fHz",phaseparameters.measurefrequence);
        sprintf(phase,"%.1f°",phaseparameters.measurefrequence);
        sprintf(amp1,"%.1fV",phaseparameters.measurefrequence);
        sprintf(amp2,"%.1fV",phaseparameters.measurefrequence);
*/         
  Delay(5000);
  write_com(0x84);  //必须空一个格,要不然乱码
  Delay(8);
  Display(frequent);
  
  write_com(0x94);
  Delay(8);
  Display(phasemeasure);
  write_com(0x8C);
  Delay(8);
  Display(amplitude1);
  write_com(0x9C);
  Delay(8);
  Display(amplitude2);
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-2-23 19:16:53 | 显示全部楼层
你用的是哪个厂家的12864啊?

出0入0汤圆

发表于 2012-11-26 12:02:52 | 显示全部楼层
你用的是哪个厂家的12864啊?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-15 02:21

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

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