您的位置:首页 > 其它

P10显示模块移动分析

2015-06-22 07:32 330 查看
/***STC15W408AS驱动P10显示屏模块测试程序一维数据查表*********/

/***2015 6 20 20:26 通过 CODE 433 L101****显示“沁钰”*********/

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define NOP _nop_()

sfr AUXR=0x8e; //Auxiliary register

uint aa=0;

uint m;

sbit OUT1=P1^2;
//

sbit OUT2=P1^3;
//

sbit OE=P1^1; //74HC245 A1

sbit A1=P1^0; //74HC138A

sbit B1=P3^7; //74HC138B

sbit SRCK=P1^7; //11脚 移位时钟

sbit RCK=P1^4; //12脚 锁存时钟

sbit SER=P1^5; //14 脚数据输入

uchar code table[640]=

{

/***空***/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/***蔡***/

0x04,0x40,0xFF,0xFE,0x04,0x40,0x10,0x00,

0x1E,0xF8,0x22,0x88,0x54,0x50,0xA8,0x20,

0x17,0xD8,0x20,0x06,0xDF,0xF8,0x01,0x00,

0x11,0x20,0x19,0x18,0x25,0x08,0x42,0x00,

/***沁***/

0x40,0x80,0x20,0x40,0x20,0x20,0x00,0x20,

0x89,0x00,0x49,0x00,0x51,0x08,0x15,0x04,

0x25,0x02,0x29,0x02,0xC9,0x00,0x51,0x08,

0x41,0x08,0x41,0x08,0x40,0xF8,0x00,0x00,

/***钰***/

0x10,0x00,0x11,0xFC,0x20,0x20,0x3E,0x20,

0x40,0x20,0x7C,0x20,0x90,0x20,0x11,0xFC,

0xFE,0x20,0x10,0x28,0x10,0x24,0x12,0x24,

0x14,0x20,0x18,0x20,0x13,0xFE,0x00,0x00

};

/**************数据串行输出到74HC595*************************/

void serial_input(uchar dat)

{

uint m;

for(m=0;m<8;m++)

{

if(dat&0x80)

SER=1;

else

SER=0;

SRCK=0;

SRCK=1;
//数据移入移位寄存器

NOP;

NOP;

SRCK=0;

NOP;

NOP;

dat=dat<<1;

}

}

/*************并出****************************************/

void serial_output()

{

RCK=1; //上升沿移位寄存器数据存入8为锁存器

NOP;

NOP;

RCK=0;

}

/*************行显控制**********************************/

void HC138_scan(uchar temp)

{

OE=1;

A1=0x01&temp;

B1=0x01&(temp>>1);

}

/***整屏显示(1 5 9 13)( 2 6 10 14)( 3 7 11 15)( 4 8 12 16) ***/

void display()

{

uint i,j,k;

for(k=0;k<4;k++) //4行同时扫描,共扫4次4X4=16

{

for(j=0;j<2;j++) //两个字的其中一个

{

for(i=0;i<2;i++) //一个字的两排 i=0为一个字的左半部i=1为一个字的右半部

{

serial_input(~table[3*8+2*k+i+j*32+m]);//第一个起始为24 J=0X*32 j*32

serial_input(~table[2*8+2*k+i+j*32+m]);//第一个起始为16


serial_input(~table[1*8+2*k+i+j*32+m]);//第一个起始为8

serial_input(~table[0*8+2*k+i+j*32+m]);//第一个起始为0

}

}

serial_output();

HC138_scan(k);

}

}

/*------------------中断子程序------------------------*/

void exint0() interrupt 1 //INT0中断入口

{

aa=aa+1;

TH0=0X53;

TL0=0X32;

if(aa==1000)

{

m++;

if (m>128)

{

m=0;

}

aa=0;

OUT1=~OUT1;

OUT2=~OUT2;

}

}

/***************************************************************/

void main()

{

AUXR=0X80; //STC系列的1T 设置

TMOD=0X01;

TH0=0X53;

TL0=0X32;

EA=1;

ET0=1;

TR0=1;

m=0;

OUT1=1;

OUT2=0;

while(1)

{

display();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: