MC9S12XS128驱动LEDP10显示屏
2014-08-19 16:28
225 查看
#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;
}
}
#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;
}
}
相关文章推荐
- 最新 Arduino 驱动 12接口/户外 LED显示屏/LED点阵屏/LED单元板
- 【原创】Tiny6410简单驱动 --- LED控制
- 超大型LED显示屏
- s3c2440基于linux的gpio led字符设备驱动实践
- linux字符设备驱动-LED驱动
- ZStack-CC2530-2.3.0-1.4.0中simpleApp函数中led的驱动
- 我的驱动开始之路-----LED驱动(作为字符设备)
- 在QT2440上添加LED驱动和应用程序
- s3c2440基于linux的button和led字符设备驱动
- Linux输入子系统(6):设备驱动层之LED驱动
- LED 驱动的整合
- IIC--ZLG7290键盘和LED驱动
- 驱动学习5--led动态映射
- 点亮LED灯驱动编写过程
- 2416开发记录七: platform驱动之LED(misc)
- 大电流升压led驱动 90W,120W
- Linux内核模块驱动之---led驱动
- arm9+linux s3c2440 led 驱动s3c_led.c 解析及运行过程
- 6410led驱动模块及测试程序(独立控制四个led)
- LED,LCD,CRT,TFT,TFD,STN显示屏说明