/***STC15W408AS驱动P10显示屏模块测试程序一维数据查表*********/
/***2015 6 19 20:26 通过 CODE 433 L101****显示“沁钰”*********/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_()
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[256]= //8
{
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]);//第一个起始为24 J=0X*32 j*32
serial_input(~table[2*8+2*k+i+j*32]);//第一个起始为16
serial_input(~table[1*8+2*k+i+j*32]);//第一个起始为8
serial_input(~table[0*8+2*k+i+j*32]);//第一个起始为0
}
}
serial_output();
HC138_scan(k);
}
}
/***************************************************************/
void main()
{
while(1)
{
display();
}
}
显示图形 左部数据 右部数据
***************00*************** 0XFF,0XFE 0X7F,0XFF
**************0000************** 0XFF,0XFC 0X3F,0XFF
*************000000************* 0XFF,0XF8 0X1F,0XFF
************00000000************ 0XFF,0XF0 0X0F,0XFF
***********0000000000*********** 0XFF,0XE0 0X07,0XFF
**********000000000000********** 0XFF,0XC0 0X03,0XFF
*********00000000000000********* 0XFF,0X80 0X01,0XFF
********0000000000000000******** 0XFF,0X00 0X00,0XFF
*******000000000000000000******* 0XFE,0X00 0X00,0X7F
******00000000000000000000****** 0XFC,0X00 0X00,0X3F
*****0000000000000000000000***** 0XF8,0X00 0X00,0X1F
****000000000000000000000000**** 0XF0,0X00 0X00,0X0F
***00000000000000000000000000*** 0XE0,0X00 0X00,0X07
**0000000000000000000000000000** 0XC0,0X00 0X00,0X03
*000000000000000000000000000000* 0X80,0X00 0X00,0X01
00000000000000000000000000000000 0X00,0X00 0X00,0X00
/****STC15W408AS驱动P10板显示两个三角形***/
/*********L90 code354**2019 5 11 PAST*****/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_()
sbit OE=P1^1; //74HC245 A1
sbit A1=P1^0; //74HC138A
sbit B1=P3^7; //74HC138B
sbit SHCP=P1^7; //11脚 移位时钟
sbit STCP=P1^4; //12脚 锁存时钟
sbit SDATA=P1^5; //14 脚数据输入
uchar code table[2][32]={
{0XFF,0XFE,0XFF,0XFC,0XFF,0XF8,0XFF,0XF0,0XFF,0XE0,0XFF,0XC0,0XFF,0X80,0XFF,0X00,
0XFE,0X00,0XFC,0X00,0XF8,0X00,0XF0,0X00,0XE0,0X00,0XC0,0X00,0X80,0X00,0X00,0X00},
{0X7F,0XFF,0X3F,0XFF,0X1F,0XFF,0X0F,0XFF,0X07,0XFF,0X03,0XFF,0X01,0XFF,0X00,0XFF,
0X00,0X7F,0X00,0X3F,0X00,0X1F,0X00,0X0F,0X00,0X07,0X00,0X03,0X00,0X01,0X00,0X00,
}};//24
/********************************************/
void delay(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=300;j>0;j--);
}
/****************数据串行输入****************/
void serial_input(uchar dat)
{
uint m;
for(m=0;m<8;m++)
{
if(dat & 0x80)
SDATA=1;
else
SDATA=0;
SHCP=0;
SHCP=1;
NOP;
NOP;
SHCP=0;
NOP;
NOP;
dat=dat<<1;
}
}
/*********************并出*******************/
void serial_output()
{
STCP=1;
NOP;
NOP;
STCP=0;
}
/****************行显控制********************/
void HC138_scan(uchar temp)
{
OE=1;
A1=0x01&temp;
B1=0x01&(temp>>1);
}
/*****************整屏显示*******************/
void display()
{
uint i,j,k;
for(k=0;k<4;k++) //显示的四行
{
for(j=0;j<2;j++) //显示3、4列
{
for(i=0;i<2;i++) // 显示1、2列
{
serial_input(~table[j][3*8+2*k+i]);
serial_input(~table[j][2*8+2*k+i]);
serial_input(~table[j][1*8+2*k+i]);
serial_input(~table[j][0*8+2*k+i]);
}
}
serial_output();
HC138_scan(k);
}
}
/******************主函数**********************/
void main()
{
delay(200);
while(1) //
{ //
display(); //开始移动显示
}
}