历史上的今天
返回首页

历史上的今天

今天是:2025年01月10日(星期五)

正在发生

2018年01月10日 | AD1549的LCD12864液晶显示程序

2018-01-10 来源:eefocus

AD1549的LCD12864液晶显示程序

#include"reg52.h" 
#include "intrins.h" 

sbit AD_CS = P3^7; 
sbit AD_DAT = P3^5; 
sbit AD_CLK = P3^4;


sbit RS=P3^6;     //RS="H",表示DB7--DB0为显示数据, 
                  //RS="L",表示DB7--DB0为显示指令数据 

sbit WRD = P2^5;  //R/W="H",E="H",数据被读到DB7--DB0 
                   //R/W="L",E="H→L", DB7--DB0的数据被写到IR或DR 

sbit E = P2^6;    //使能信号 

sbit PSB = P2^3;  //H:并口方式 L:串口方式 




void    TransferData(char data1,bit DI); //传送数据或者地址命令(data), 
                                         //当DI=0是,传送命令,当DI=1,传送数据. 
void    display(void); 
void    display_grapIC(void); 

void    delay(unsigned int m); 
void    delayms(unsigned int n); 

void    DisplayLine(unsigned char line1,unsigned char line2); 
void    DisplayGraphic(unsigned char code *adder); 

void    lcd_mesg(unsigned char code *adder1); 


void lcd_wxs1(unsigned int j); 
void lcd_wxs2(unsigned int q); 
void lcd_wxs3(unsigned int p); 
void lcd_wxs4(unsigned int k); 


unsigned int i,j,q,p,k;     //  
unsigned int AD_Temp,Temp,TempA; 

unsigned char code IC_DAT[]={ 
"精密电压表测试仪" 
"  当前电压值为  " 
"佳瑞电子有限公司" 
"*****       ****" 
}; 

unsigned char data1[]={"0123456789.V"}; 
/***************存放要显示的数字值********/ 

unsigned char val[4];// 

/***************延时的子程序***************/ 

void  delayms(unsigned int n)            //延时10×n毫秒程序 
                   { 
                      unsigned int i,j; 
                      for(i=0;i                         for(j=0;j<2000;j++); 
                   } 

void  delay(unsigned int m)              //延时程序 
                   { 
                      unsigned int i,j; 
                      for(i=0;i                         for(j=0;j<10;j++); 
                   } 


/**********TLC1549数据读取子程序************/ 

TLC1549()      
  { 
  TempA=0; 
  Temp=0; 
 AD_CS  = 1; 
 AD_CLK = 1; 
 AD_DAT = 1; 
 AD_CS  = 0;   

   _nop_(); 
 for(i=0;i<2;i++) 
 { 
  AD_CLK =0; 
  _nop_(); 
  if(AD_DAT) 
   { Temp+=0x01;} 
  Temp  =Temp<<1; 
  AD_CLK=1; 
  _nop_(); 
 } 
 for(i=0;i<8;i++) 
 { 
  AD_CLK =0; 
  _nop_(); 
  if(AD_DAT) 
   {  TempA+=0x01; } 
  TempA =TempA<<1; 
  AD_CLK =1; 
  _nop_(); 
 } 
 AD_CLK =1; 
 AD_CS  =1; 
 AD_Temp= Temp*338+TempA; 
 P0=AD_Temp; 

   j=2*AD_Temp/1000; 
   q=2*AD_Temp%1000/100; 
   p=2*AD_Temp%1000%100/10; 
   k=2*AD_Temp%1000%100%10; 

  
 } 

/***************LCD字库初始化程序*********************/ 
void initinal(void)          
          { 
           delay(40);               //大于40MS的延时程序 
           PSB=1;                   //设置为8BIT并口工作模式 
           delay(1);                //延时 
          // RES=0;                 //复位 
          // delay(1);              //延时 
          // RES=1;                 //复位置高 
           delay(10); 
           TransferData(0x30,0);  //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF 
           delay(100);            //大于100uS的延时程序 
           TransferData(0x30,0);  //Function Set 
           delay(37);             ////大于37uS的延时程序 
           TransferData(0x08,0);  //Display on Control 
           delay(100);            //大于100uS的延时程序 
           TransferData(0x10,0);  //Cursor Display Control光标设置 
           delay(100);            //大于100uS的延时程序 
           TransferData(0x0C,0);  //Display Control,D=1,显示开 
           delay(100);            //大于100uS的延时程序 
           TransferData(0x01,0);  //Display Clear    清屏 
           delay(10);             //大于10mS的延时程序 
           TransferData(0x06,0);  //Enry Mode Set,光标从右向左加1位移动 
           delay(100);            //大于100uS的延时程序 
          } 


//*************显示函数****************************** 

void lcd_mesg(unsigned char code *adder1) 

    unsigned char i; 
        TransferData(0x80,0);    //Set Graphic Display RAM Address 传地址指令 
        delay(100); 
    for(i=0;i<16;i++) 
        { 
              TransferData(*adder1,1); 
               adder1++; 
        } 

        TransferData(0x90,0);    //Set Graphic Display RAM Address 
        delay(100); 

    for(i=32;i<64;i++) 
        { 
              TransferData(*adder1,1); 
               adder1++; 
        } 

//*************位置显示函数****************************** 

void lcd_wxs1(unsigned int adder2) 

        TransferData(0x8A,0);    //Set Graphic Display RAM Address 传地址指令 
        delay(100);     
          TransferData(adder2,1); 


void lcd_wxs2(unsigned int adder3) 

          TransferData(adder3,1); 


void lcd_wxs5(unsigned int adder6) 

          TransferData(adder6,1); 


void lcd_wxs3(unsigned int adder4) 

          TransferData(adder4,1); 


void lcd_wxs4(unsigned int adder5) 

          TransferData(adder5,1); 


void lcd_wxs6(unsigned int adder7) 

          TransferData(adder7,1); 

//********写命令/数据******************************* 

void    TransferData(char data1,bit DI)  //传送数据或者命令,当DI=0是,传送命令, 
          {                                 //当DI=1,传送数据. 
            WRD=0;    //R/W="H",E="H",数据被读到DB7--DB0,R/W="L",E="H→L", DB7--DB0的数据被写到IR或DR 
            RS=DI;    //RS="H",表示DB7--DB0为显示数据, RS="L",表示DB7--DB0为显示指令数据 
            delay(1); 
            P0=data1; 
            E=1; 
            delay(1); 
            E=0; 
           } 
//************延 时******************************************* 



/* 主程序入口  */ 
int main(void) 
{    initinal(); 
    delay(10);            //大于100uS的延时程序 
    lcd_mesg(IC_DAT);      //显示中文汉字1 
    delayms(100); 
    while(1) 
    {     
    TLC1549(); 
    lcd_wxs1(data1[j]); 
    lcd_wxs5(data1[10]); 
    lcd_wxs2(data1[q]); 
    lcd_wxs3(data1[p]); 
    lcd_wxs4(data1[k]); 
    lcd_wxs6(data1[11]); 
    delayms(20); 

    } 


推荐阅读

史海拾趣

Carlisle Interconnect Technologies公司的发展小趣事

1959年,对于Carlisle Interconnect Technologies来说是一个里程碑式的年份。这一年,公司正式成为Carlisle Companies Incorporated的一部分,这标志着公司从一个小型创业企业迈入了大型跨国公司的行列。这一转变为公司带来了更多的资源和机会,也使其能够更好地满足主要电子OEM的需求,专注于提供增值解决方案。

旌芯半导体(GN)公司的发展小趣事

1959年,对于Carlisle Interconnect Technologies来说是一个里程碑式的年份。这一年,公司正式成为Carlisle Companies Incorporated的一部分,这标志着公司从一个小型创业企业迈入了大型跨国公司的行列。这一转变为公司带来了更多的资源和机会,也使其能够更好地满足主要电子OEM的需求,专注于提供增值解决方案。

Aerovox Corporation公司的发展小趣事

进入21世纪,Carlisle Interconnect Technologies开始了全球化的布局。公司不仅在北美和欧洲设立了多个生产基地和研发中心,还积极开拓亚洲和拉丁美洲等新兴市场。通过全球化的战略布局,公司不仅能够更好地利用全球资源,还能够更深入地了解各地市场需求,进一步推动业务发展。同时,公司还加强了与国际知名企业的合作,共同推动电子行业的发展和进步。

这五个故事只是Carlisle Interconnect Technologies发展历程中的一部分,但它们足以展示公司在电子行业中的创新、进取和不断追求卓越的精神。这些故事也为我们揭示了一个成功企业的发展轨迹:从创业初期的创新与突破,到不断的技术升级和产品多样化,再到全球化的布局与业务拓展,每一步都充满了挑战与机遇。

Bridgelux公司的发展小趣事

XXXX年,中国电子信息产业集团公司(CEC)和重庆临空开发投资公司牵头收购了Bridgelux。这次收购为Bridgelux带来了强大的资本支持和市场资源,使其得以进一步扩大生产规模,提升研发能力。在CEC和重庆临空的支持下,Bridgelux在全球范围内的市场份额逐步提升,品牌影响力不断增强。

Alpha-Micro Electronics公司的发展小趣事

Bridgelux在LED照明技术方面取得了重要突破。公司研发出了一种新型的LED芯片结构,提高了光效和稳定性,降低了成本。这一创新使得Bridgelux的产品在市场上更具竞争力,也为其赢得了众多客户的青睐。同时,公司还注重知识产权保护,积极申请专利,确保自身技术的领先地位。

GSG公司的发展小趣事
检查传感器是否受到污染或损坏,信号调理电路是否发生漂移,以及是否需要进行重新校准。

问答坊 | AI 解惑

发个太阳能充电电路资料(CN3083)

太阳能专用充电电路CN3083,它前端含有8位的A/D,能自动判断输入电源的电流大小,从而采取合适的电流给锂电池、多节镍氢电池充电。 适合于:太阳能移动电源、太阳能蓝牙耳机、太阳能手机、太阳能背包(帐篷)等由太阳能板供电的产品中。 [ 本帖 ...…

查看全部问答>

资料

大家多传一些资料哈…

查看全部问答>

求一个红外对管应用电路

本帖最后由 paulhyde 于 2014-9-15 03:52 编辑 求一个红外对管应用电路,发射接收管安放在相距20CM,当有物体经过,接收管就会给控制系统(单片机),一个开关信号; 那位大虾有就给我个电路,主要是接收管电路的问题。 如果有能达到相应效果的 ...…

查看全部问答>

求助:锁相环的作用

这是我在网上查到的信息: 最简单的解释:通过一个环路(反馈、比较)把频率(相位)锁定的电路。 我看到PIC2520单片机上datasheet上写的:\"4 倍频锁相环(可用于晶振和内部振荡器)\"假设晶振为11KHZ的振荡频率,那么单片机的时钟频率是多少? ...…

查看全部问答>

Make Run-Time Image阶段编译出错求解?

在编译SMDK2440A6.0版本(这个版本是网上下载的,一方面想验证下,另一方面想拿这个BSP做下实验)的时候,出现如下错误: Found pTOC at 0000101c No imports for nk.exe No imports for kernel.dll No imports for coredll.dll No imports fo ...…

查看全部问答>

单片机

谁有单片机学习板的电路图啊,给我个哟…

查看全部问答>

怎么让1602LCD上的字闪烁?

我知道用         Write_com(0x08);                                          delay(3000); ...…

查看全部问答>

uclinux下实现usb固件程序!来者有分!!哪位想帮小弟这个忙,可以谈谈报酬!呵呵

我的S3C44B0带有个USBD12芯片, 1,在没有操作系统uclinux情况下,我写了个固件程序,实现了usb device,注意不是usb host。 2,我又在这块板子上成功移植了uclinux系统。 问题,现在我想把固件程序放到uclinux里面,有人说因为用到中断,得做成 ...…

查看全部问答>

关于maplab的几个问题。

1、在debugger下,进行调试的步骤有哪些? 是先BUILD ALL--debugger ---run吗?需要program吗? 2、几个命令:animate是什么意思?step over? step into? 3、还有调试时有运行到光标处的调试命令吗?(类似VC) …

查看全部问答>

仿真没问题,一旦拔下JATG,程序不运行或运行错,急,急,急呀!

我用的是 MSP430F135芯片,程序仿真一切正常,build后,可直接写道芯片去。一旦拔下JATG,程序不运行或运行错。我猜测是程序复位问题,即是程序没找到起始地址,或找错了。如何才能让它正常运行呢,急呀,  ,快过年了,还没有回家呢!! ...…

查看全部问答>