PIC单片机12864编程程序

发布者:张延强最新更新时间:2017-12-06 来源: eefocus关键字:PIC单片机  12864编程 手机看文章 扫描二维码
随时随地手机看文章

IC用PIC16F877A,晶振4MHz,采用并行8线,LCD:TS12864-3,接法在程序中有定义,只要将此程序COPY到你的PICC里编译下载后,在目标板上即可以看到图画了!  

#include "pic.h"  
#define  RS   RC0  
#define  RW   RC1  

#define  E    RC2  
#define  PSB  RC3  
#define  RST  RC4  
//PORTD=DATA;  
unsigned char COUNT3,COUNT2,COUNT1,COUNT,LCD_X,LCD_Y,LCD_DATA1,LCD_DATA2,LCD_DATA,F3,R1,F0;  
const unsigned char TU_TAB1[]={  
        // 16  15   14   13   12   11   10   9     8   7     6   5    4    3    2    1  
         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x18,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xDC,0x00,0x01,  
       0x80,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xBC,0x00,0x01,  
       0x80,0x00,0x30,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xB8,0x00,0x01,  
       0x80,0x00,0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0x78,0x00,0x01,  
       0x80,0x00,0x19,0xFF,0xFE,0xC0,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,0x70,0x00,0x01,  
       0x80,0x00,0x18,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0xFF,0xFE,0xF0,0x00,0x01,  
       0x80,0x00,0x0C,0x01,0xFF,0x60,0x00,0x00,0x00,0x00,0x05,0xFF,0xFE,0xE0,0x00,0x01,  
    0x80,0x00,0x0C,0x7F,0xD0,0x20,0x00,0x00,0x00,0x00,0x05,0xFF,0xFD,0xE0,0x00,0x01,  
    0x80,0x00,0x06,0x00,0x0F,0xB0,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFD,0xC0,0x00,0x01,  
    0x80,0x00,0x06,0x03,0xFC,0x10,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFB,0xC0,0x00,0x01,  
    0x80,0x00,0x03,0x1F,0x00,0x18,0x00,0x00,0x00,0x00,0x17,0xFF,0xFB,0x80,0x00,0x01,  
    0x80,0x00,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x80,0x00,0x01,  
    0x80,0x00,0x01,0x80,0x00,0x0C,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x00,0x00,0x01,  
    0x80,0x00,0x01,0x80,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0xFF,0xEF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0xC0,0x00,0xF6,0x00,0x00,0x00,0x00,0x06,0x7F,0xEE,0x00,0x00,0x01,  
    0x80,0x00,0x00,0xC0,0x03,0xC2,0x00,0x00,0x00,0x00,0x01,0x9F,0xDE,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x60,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x67,0xDF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x60,0x00,0xE3,0x00,0x00,0x00,0x00,0x00,0x19,0xBF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x30,0x03,0x8E,0x00,0x00,0x00,0x00,0x00,0x06,0x3F,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x30,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x18,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x18,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0x80,0x00,0x01,  
       0x80,0x00,0x00,0x0C,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x1F,0xC0,0x00,0x01,  
    0x80,0x00,0x00,0x0C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x07,0xE0,0x00,0x01,  
    0x80,0x00,0x00,0x06,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0xE0,0x00,0x01,  
    0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0xC0,0x00,0x01,  
    0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFF,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
    0x80,0x05,0x40,0x88,0x04,0x01,0x08,0x00,0x00,0x0A,0x81,0x10,0x04,0x00,0x20,0x01,  
    0x80,0x79,0x21,0x08,0x02,0x21,0x49,0x00,0x00,0xF2,0x42,0x10,0x04,0x47,0x10,0x01,  
    0x80,0x09,0x07,0xDF,0x7F,0xF7,0xAA,0x00,0x00,0x12,0x0F,0xBE,0x7F,0xE5,0xFE,0x01,  
    0x80,0x7F,0xF4,0x51,0x08,0x81,0x2C,0x00,0x00,0xFF,0xE8,0xA2,0x44,0x47,0x00,0x01,  
    0x80,0x09,0x04,0x61,0x08,0x81,0x7F,0x00,0x00,0x12,0x08,0xC2,0x7F,0xC5,0x4A,0x01,  
    0x80,0x0B,0x24,0x51,0x08,0x83,0x81,0x00,0x00,0x16,0x48,0xA2,0x44,0x45,0x6A,0x01,  
    0x80,0x1D,0x47,0xC9,0x05,0x05,0x01,0x00,0x00,0x3A,0x8F,0x92,0x44,0x47,0x52,0x01,  
    0x80,0x68,0x84,0x49,0x05,0x05,0x7F,0x00,0x00,0xD1,0x08,0x92,0x7F,0xC5,0x6A,0x01,  
       0x80,0x09,0x94,0x41,0x02,0x01,0x01,0x00,0x00,0x13,0x28,0x82,0x44,0x05,0x4A,0x01,  
    0x80,0x0E,0x57,0xC1,0x0D,0x81,0x01,0x00,0x00,0x1C,0xAF,0x82,0x04,0x29,0x42,0x01,  
       0x80,0x38,0x34,0x4E,0x70,0x71,0x7F,0x00,0x00,0x70,0x68,0x9C,0x03,0xEB,0x7E,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF  
         };  

//*************delay_ms********************************  
void delay_10us(unsigned char x)   
{   
  while(x--);  
}   
void delay_ms(unsigned char cnt)  
{  
    unsigned char i;  
do {  
  i = 4;  
  do {  
   delay_10us(39);  
  } while(--i);  
} while(--cnt);  
}  

//***********检查是否LCD忙碌的子程序**********************  
void check_busy(void)  
{   
  TRISD=0xff;//在此处设为输入。  
  PORTD=0xff;  
  RS=0;  
  RW=1;  
  while (1)  
   {  
    NOP();NOP();NOP();  
    E =1;  
    NOP();NOP();NOP();  
    if (RD7==0) break;  
    NOP();NOP();NOP();  
    E =0;  
   }  
  E =0;       
  TRISD=0X00;//还原为输出。  
  RC7=!RC7;  
  //delay_ms(50);  
}  
//**********数据写命令***************************  
void send_com(unsigned char command )  
{  
  check_busy();  
  RS=0;  
  RW=0;  
  PORTD=command;  
  E =1;  
  NOP();  
  NOP();  
  E =0;  
}  
//**********LCD初始化时的送命令******************  
void send_com_init(unsigned char command_init )  
{  
  RS=0;  
  RW=0;  
  PORTD=command_init;  
  E =1;  
  NOP();  
  NOP();  
  E =0;  
}  
//**********写数据***************************  
void send_data(unsigned char data )  
{  
  check_busy();  
  RS=1;  
  RW=0;  
  PORTD=data;  
  E =1;  
  NOP();  
  NOP();  
  E =0;  
}  
//***********读数据****************************  
unsigned char read_data(void)  
{  
  unsigned char read_data;  
  check_busy();  
  TRISD=0XFF;  
  RS=1;  
  RW=1;  
  E =1;  
  NOP();  
  read_data=PORTD;  
  E =0;  
  TRISD=0x00;//还原为输出。  
  return (read_data);  
}  
//***********清屏*****************************  
void clear_LCD(void)  
{  
  send_com(0x01);  
  send_com(0x34);  
  send_com(0x30);  
}  
//**********LCD初始化************************  
void initial_LCD(void)  
{    
   PSB=1;  
   RST=0;//Reset.  
   NOP();  
   NOP();  
   RST=1;  
   NOP();  
   delay_10us(10);  
   send_com_init(0x30);//30H--基本指令操作  
   delay_10us(4);  
   send_com_init(0x0c);//开显示,关光标,不闪烁。  
   delay_10us(10);  
   send_com_init(0x01);//清除显示  
   delay_ms(10);  
   send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。  
     
}  
//**********写准备***************************  
void WR_ZB(void)  
{  
   send_com(0x34);  
   send_com(LCD_Y);  
   send_com(LCD_X);  
   send_com(0x30);  
}  
//*********取数送显示******************************  
void QUSHU(const unsigned char *shu)  
{  
   for (;COUNT!=0;COUNT--)  
   {  
     send_data(*shu++);  
     delay_ms(80);  
   }    
}  
//*********Flash******************************  
void flash(void)  
{  
   send_com(0x08);//关闭显示  
   delay_ms(250);  
   send_com(0x0c);//开显示,关光标,不闪烁。  
   delay_ms(250);  
   send_com(0x08);//关闭显示  
   delay_ms(250);  
   send_com(0x0c);//开显示,关光标,不闪烁。  
   delay_ms(250);  
   send_com(0x08);//关闭显示  
   delay_ms(250);  
}  
//**********显示图形子程序*********************  
void PHO_DISP(const unsigned char *s)  
{  
   COUNT3=0X02;  
   LCD_X=0X80;  
   for (;COUNT3!=0;COUNT3--)  
   {  
       LCD_Y=0X80;  
       COUNT2=0X20;//32  
       for (;COUNT2!=0;COUNT2--)  
       {  
         COUNT1=0X10;//16  
         WR_ZB();  
         for (;COUNT1!=0;COUNT1--)  
          {  
            send_data(*s++);  
              
          }  
         LCD_Y+=1;  
       }  
       LCD_X=0X88;  
   }  
   send_com(0x36);  
   send_com(0x30);  
}  
//******************显示点阵子程序************  
void LAT_DISP(void)  
{  
   COUNT3=0X02;  
   LCD_X=0X80;  
   for (;COUNT3!=0;COUNT--)  
    {  
       LCD_Y=0X80;  
       F0=0;  
       COUNT2=0X20;  
       for (;COUNT2!=0;COUNT--)  
         {  
           COUNT1=0X10;  
           WR_ZB();  
           if (F0!=0)  
           {  
             LCD_DATA=LCD_DATA2;  
           }  
           else LCD_DATA=LCD_DATA1;  
           for (;COUNT1!=0;COUNT1--)  
             {  
              send_data(LCD_DATA);  
             }  
           LCD_Y+=1;  
           F0=!F0;  
         }  
       LCD_X=0X88;  
    }  
     
   send_com(0x36);  
   send_com(0x30);  
}  
    
void main(void)  
{  
   TRISC=0X00;  
   TRISD=0X00;     
   PORTD=0X00;  
   PORTC=0X00;  
   initial_LCD();  
   while (1)  
   {     
       clear_LCD();  
       PHO_DISP(TU_TAB1);//显示图形  
       while (1);       
   }  


关键字:PIC单片机  12864编程 引用地址:PIC单片机12864编程程序

上一篇:PIC测试配置位的使用
下一篇:485通讯PIC源程序

推荐阅读最新更新时间:2024-03-16 15:48

PIC单片机在直流电机无级调速系统的设计
现代工业生产中,电动机是主要的驱动设备,目前在直流电动机拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ—D拖动系统,取代了笨重的发电动一电动机的F—D系统,又伴随着电子技术的高度发展,促使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速技术又进入到一个新的阶段,智能化、高可靠性已成为它发展的趋势。本调速系统采用PIC16F874单片机作为中心处理器,充分利用了PIC16F874单片机捕捉、比较、模/数转换模块的特点作为触发电路,其优点是:结构简单,能与主电路同步,能平稳移相且有足够的移相范围,控制角调整量可达10000步,能够实现电机的无级平滑控制,脉冲前沿陡且有足够的幅值,脉宽可设定,稳
[单片机]
<font color='red'>PIC单片机</font>在直流电机无级调速系统的设计
PIC单片机内部EEPROM读写程序
#INCLUDE P16F877.inc W_TEMP EQU 20H ; 实际上20H、A0H、120H和1A0H STATUS_TEMP EQU 21H ;在体0中建立保护单元 PCLATH_TEMP EQU 22H ;在体0中建立保护单元 ORG 000H GOTO A1 ORG 004H;定时中断入口地址 GOTO ZD01; ORG 0CH Q1 ADDWF PCL,1 RETLW 00C0H ;0 RETLW 00F9H ;1 RETLW 00A4H ;2 RETLW 00B0H ;3 RETLW
[单片机]
利用PIC单片机让LCD闪烁
  使用 LCD 面板,信息可以通过多种方式显示。例如,如何将用户的注意力吸引到LCD面板的特定部分?一种不需要任何附加段的方式是产生闪烁效果。   以常见的时钟(见下图)应用为例。小时和分钟之间的“:”通常每秒闪烁一次(显示半秒,隐藏半秒)。   在缺少滴答声或通常伴随模拟外观时钟的秒针时,这可以显示时钟正在计时。它起到一种重要的作用,让用户知道时钟正在工作。   如果 电源 的电能即将耗尽,则通常整个时钟显示会开始闪烁。这使用户可以立即了解时钟不再显示正确的时间。   在用户设置时间时,通常使用闪烁来显示已进入了新模式,例如闪烁小时来指示正在设置小时,或者闪烁分钟来指示正在设置分钟。在简单时钟中,闪烁用于多种不同用途。如
[单片机]
利用<font color='red'>PIC单片机</font>让LCD闪烁
PIC单片机开发过程中软、硬件设计一些经验、技巧
本文总结了作者PIC单片机开发过程中一些经验、技巧,供同行参考。 1 怎样进一步降低功耗 功耗,电池供电仪器仪表中是一个重要考虑因素。PIC16C 系列单片机本身功耗较低(5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,保证满足工作要求前提下,可采用降低工作频率方法,工作频率下降可大大降低功耗(如PIC16C 3V,32kHz下工作,其电流可减小到15 A),但较低工作频率可能导致部分子程序(如数学计算)需占用较多时间。这种情况下,当单片机振荡方式采用RC电路形式时,可以采用中途提高工作频率办法来解决。 具体做法是闲置一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。
[单片机]
PIC单片机的多路AD切换程序设计
pic单片机是最重要的单片机种类之一,对于pic单片机,小编曾带来诸多介绍,如pic单片机的优势、pic单片机选型等。而在本文中,小编将为大家介绍两种pic单片机程序:一是pic单片机多路ad切换程序,二是pic单片机循环程序。 一、pic单片机简介 pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型
[单片机]
<font color='red'>PIC单片机</font>的多路AD切换程序设计
PIC单片机I2C的应用(24LC02)
I2C总线特点 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 2 I2C总线工作原理 I2C总线上的数据稳定规则,SCL为高电平时SDA上的数据保持稳定,SCL为低电平时允许SDA变化。如果SCL处于高电平时,SDA上产生下降沿,则认为是起始位,
[单片机]
<font color='red'>PIC单片机</font>I2C的应用(24LC02)
PIC单片机学习之独立按键
硬件电路:独立按键接RA5 效果:让RD0口的LED,当独立按键为0时,点亮。 注意:PORTA口的默认状态不是数字IO口,我们要将他配置成数字IO口。这涉及到了ADCON1寄存器。 //按键的基本应用 独立按键 //现象:按下S18,LED1点亮 #include pic.h #include ../head/config.h __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置 void main(void) { ADCON1 = 0x07;//让PORTA口都是数字IO功能,参看数据手册130页 TRISA = 0xff; // PORTA = 0xff;
[单片机]
PIC单片机的中断资源及应用
    摘要: PIC系列单片机是美国Microchip技术公司推出的8位嵌入式控制器。它以其控制速度高、工作电压低、功耗小及性价比高等优点而备受青睐。本文以PIC16CXX系列单片机为例介绍了PIC单片机中断资源的特点、应用及应用中应注意的问题,并给出了具体的应用源程序。     关键词: PIC单片机 中断资源 中断源 唤醒 1 PIC单片机简介 PIC系列单片机是美国Microchip技术公司推出的高性能价格比的8位嵌入式控制器(Embedded Controller),它采用了精简指令集计算机RISC(Reduced Instruction Set Computer)和哈佛(H
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved