MC9S12XS128驱动LEDP10显示屏


#include      
#include "derivative.h"      

#define B PORTA_PA0       //数据串行输入时钟
#define C PORTA_PA2     //数据输出时钟
#define D PORTA_PA4     //74LS138使能时钟
#define A PORTA_PA1     //行选
#define CP PORTA_PA5     //行选
#define SC PORTA_PA6     //行选
#define RI PORTA_PA3     //串行数据
#define CT PORTA_PA7 
#define DIR DDRA         //数据方向

#define BUS_CLOCK   32000000   //总线频率
unsigned char ziku[4][32]={
   
0xFB,0xBF,0xFB,0xBF,0xC0,0x03,0xFB,0xBF,0xFB,0xBF,0x80,0x01,0xFB,0xBF,0xF7,0xDF,
0xEE,0xEF,0xDE,0xF7,0x3E,0xF9,0xEE,0xAF,0xEE,0xD7,0xDE,0xD7,0xFA,0xFF,0xFD,0xFF,

0xFE,0xFF,0x80,0x03,0xFE,0xFF,0xC0,0x07,0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xE0,0x0F,
0xFB,0xBF,0x00,0x01,0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xFF,0xFF,

0xFD,0xFF,0xDD,0xBF,0xDD,0xCF,0xDD,0xEF,0x80,0x01,0xDB,0xFF,0xFB,0xFF,0xF8,0x1F,
0xF3,0xDF,0xF5,0xDF,0xF5,0xDF,0xEE,0xBF,0xDF,0x7F,0xBE,0x9F,0x79,0xE3,0xE7,0xF7,

0xFF,0xF7,0x81,0xF7,0xBD,0xF7,0xB5,0xF7,0xB5,0x01,0xB5,0xE7,0xB5,0xE7,0xB5,0xD7,
0xB5,0xD7,0xB5,0xB7,0xF7,0xB7,0xEB,0x77,0xED,0xF7,0xDC,0xF7,0xBD,0xD7,0x7F,0xEF



};
void init();
void shuru(unsigned char data);
void shuchu();
void delay(unsigned char p);
void hangxuan(unsigned char P);
void timer_init();
void shuru1();
void INIT_PLL(void);
unsigned char hang=0,zi=0,shu=0;
void main(void) 
{
     
      init();
      INIT_PLL();
      timer_init();
      while(1) 
      {
         
        for(hang=0;hang<16;hang++) 
        {
          for(zi=0;zi<4;zi++) 
          {
              shuru(ziku[zi][2*hang]);
              shuru(ziku[zi][2*hang+1]);
          }
          shuru1();
          hangxuan(hang);
          shuchu();
     
        }
       
                           
      }                  
}

void shuru(unsigned char data) 
{
    unsigned char j=0;
    for(j=0;j<8;j++) 
    {
        RI=((data<<j)&0x80)==0x80? 1 :0;
        CP=0;
        asm NOP;
        CP=1;
        asm NOP;
         
    }
}
void shuru1()

{
    unsigned char j=0;
    for(j=0;j
    {
      if(j<64)
        {
          RI=1;
          CP=0;
          asm NOP;
          CP=1;
          asm NOP;
       
        else
       
        {
            RI=((ziku[(j-64)/16][2*hang+((j)>7? 1:0)]<<(j%8))&0x80)==0x80?   1:0;
            CP=0;
            asm NOP;
            CP=1;
            asm NOP;
        }
         
    }
   
}
void shuchu() 
{
    SC=0;
    asm NOP;
    SC=1;
    asm NOP;
}

void hangxuan(unsigned char P)

{
      A=P&0x01;
      B=(P>>1)&0x01;
      C=(P>>2)&0X01;
      D=(P>>3)&0X01;
      CT=1;
}
void init()
{
    DisableInterrupts;
    SC=0;
    CP=0;
    A=0;
    B=0;
    C=0;
    D=0;
    RI=0;
    CT=1;
    DIR=0XFF;
    EnableInterrupts;
}

void INIT_PLL(void) 
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
     
    #if(BUS_CLOCK == 40000000) 
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;      
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif 

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;   //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;         //set PLLCLK as sysclk
}
void timer_init()

{
      //CLKSEL &= 0x7f;       //set OSCCLK as sysclk
      TSCR1_PRNT=0;//使能预分频
      TSCR2=0x87;//使能溢出中断   128分频
      TCNTH=((unsigned int)(-20000))/256; //500ms
      TCNTL=((unsigned int)(-20000))%6; 
      TFLG2_TOF=1;   //清除溢出中断标志位
      TSCR1_TEN=1;   //使能定时器
}



   

#pragma CODE_SEG __NEAR_SEG NON_BANKED

interrupt void timer() 

{
      TFLG2_TOF=1;   //清除溢出中断标志位
      TCNTH=((unsigned int)(-20000))/256; //500ms
      TCNTL=((unsigned int)(-20000))%6; 
      shu++;
      if(shu==128) 
      {
          shu=0;
      }
}
MC9S12XS128驱动LEDP10显示屏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值