📄 main.c
字号:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "logo.h"
BYTE rl;
BYTE x,y,bitnum,bitmask,yByte;
unsigned int str;
const unsigned char l_mask_array[8] =
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
INT i,j;
#define bit0 0x01
#define bit1 0x02
#define bit2 0x04
#define bit3 0x08
#define bit4 0x10
#define bit5 0x20
#define bit6 0x40
#define bit7 0x80
// sed1520
// 76543210
#define Display_ON 0b10101111
#define Display_OFF 0b10101110
#define DisplayStartLine 0b11000000
#define PageAddressSet 0b10111000
#define ColumnAdressSet 0b00000000
#define StatusBUSY 0b10000000
#define StatusADC_R 0b01000000
#define StatusOFF 0b00100000
#define StatusRESET 0b00010000
#define ADC_Select_R 0b10100000
#define ADC_Select_L 0b10100001
#define StaticDriveOFF 0b10100100
#define StaticDriveON 0b10100101
#define DutySelect16 0b10101000
#define DutySelect32 0b10101001
#define ReadModifyWrite 0b11100000
#define OffReadModifyWrite 0b11101110
#define DisplayEnd 0b11101110
#define DisplayReset 0b11100010
//
#define Ctrl PRT1DR
#define Data PRT2DR
#define A0 bit2
#define CS1 bit3
#define CS2 bit4
//CL bit5
#define E bit6
#define WR bit7
#define LCDDisable Ctrl |= E
#define LCDEnable Ctrl &= ~E
void main()
{
ports_init ();
PWM8_1_Start();
PWM8_2_Start();
ResetDisplay (); //reset LCD
InitDisplay (); //Initialize LCD
test_PSoC(); // save logo in LCD
display(); // LCD show
}
void ResetDisplay ()
{
PRT0DR |= bit0;
delay(239); //1ms cpu 24MHz
PRT0DR &= ~bit0;
}
void InitDisplay ()
{
Data = Display_OFF;
write_instruction ();
Data = DisplayStartLine;
write_instruction ();
Data = StaticDriveOFF;
write_instruction ();
Data = ColumnAdressSet;
write_instruction ();
Data = DutySelect32;
write_instruction ();
Data = ADC_Select_R;
write_instruction ();
Data = OffReadModifyWrite; //Off
write_instruction ();
}
// Read data from a driver
BYTE read_data ()
{
BYTE dat;
Data=5;
Ctrl |= A0;
LCDEnable;
Ctrl &= ~WR;
Ctrl |= WR;
PRT2_HZ ();
dat=Data;
PRT2_PD ();
LCDDisable;
return dat;
}
// Write data to a driver
void write_data ()
{
LCD_Ready ();
Ctrl &= ~A0;
Ctrl |= A0;
Ctrl |= WR;
Ctrl &= ~WR;
LCDEnable;
LCDDisable;
}
// Write an instruction to a driver
void write_instruction ()
{
LCD_Ready ();
Ctrl |= A0;
Ctrl &= ~A0;
Ctrl |= WR;
Ctrl &= ~WR;
LCDEnable;
LCDDisable;
}
// Read the current status of a driver
void LCD_Ready ()
{
do {
Ctrl &= ~A0;
LCDEnable;
Ctrl |= WR;
PRT2_HZ ();
rl=Data;
PRT2_PD ();
Ctrl &= ~WR;
LCDDisable;
} while (rl & StatusBUSY);
}
// Controller #1
void CS1_select ()
{
Ctrl &= ~CS2;
Ctrl |= CS1;
}
// Controller #2
void CS2_select ()
{
Ctrl &= ~CS1;
Ctrl |= CS2;
}
//duplicate
void cs_l () {
CS1_select ();
}
void cs_r () {
CS2_select ();
}
// read write A0_instruction A0_Data
void Write ()
{
Ctrl |= WR;
Ctrl &= ~WR;
}
void Read ()
{
Ctrl &= ~WR;
Ctrl |= WR;
}
void A0_Instruction ()
{
Ctrl |= A0;
Ctrl &= ~A0;
}
void A0_Data ()
{
Ctrl &= ~A0;
Ctrl |= A0;
}
// ports operate
// DM2 DM1 DM0 Mode
// 0 0 0 Resistive Pull Down
// 0 0 1 Strong Drive
// 0 1 0 High Impedence
// 0 1 1 Resistive Pull Up
// 1 0 0 Open Drain, Drives High
// 1 0 1 Slow Strong Drive
// 1 1 0 High Impedence Analog
// 1 1 1 Open Drain, Drives Low
void PRT2_HZ () {
M8C_SetBank1;
PRT2DM0 &= 0b00000000;
PRT2DM1 |= 0b11111111;
M8C_SetBank0;
PRT2DM2 &= 0b00000000;
}
void PRT2_PD () {
M8C_SetBank1;
PRT2DM0 &= 0b00000000;
PRT2DM1 &= 0b00000000;
M8C_SetBank0;
PRT2DM2 &= 0b00000000;
}
void test_logo(){
BYTE a22;
if (x<= 60){
cs_l();
a22 = x;
}
else {
cs_r();
a22=(x-61);
}
yByte = y ;//>> 3;
bitnum = y & 0x07;
bitmask = l_mask_array[bitnum];
Data = ColumnAdressSet | a22;
write_instruction ();
Data = PageAddressSet | yByte;
write_instruction ();
Data = DisplayStartLine;
write_instruction ();
Data = psoc_bmp[str];
write_data ();
}
void test_PSoC(){
BYTE st;
str=0;
for (x=0;x<122;x++){
for (st=0;st<4;st++) {
y=st;
test_logo();
str++;
}
}
}
//enable lcd
void display() {
Data = Display_OFF;
write_instruction ();
Ctrl &= ~CS1;
Ctrl &= ~CS2;
Data = Display_ON;
write_instruction ();
}
void delay (INT delay_input)
{
INT i;
for (i=0; i<delay_input; i++) ;
}
void ports_init () {
// configure reset pin PD
M8C_SetBank1;
PRT0DM0 &= ~bit0;
PRT0DM1 &= ~bit0;
M8C_SetBank0;
PRT0DM2 &= ~bit0;
// configure P1 pins PD
M8C_SetBank1;
PRT1DM0 &= 0b00000000;
PRT1DM1 &= 0b00000000;
M8C_SetBank0;
PRT1DM2 &= 0b00000000;
// configure P2 pins PD
M8C_SetBank1;
PRT2DM0 &= 0b00000000;
PRT2DM1 &= 0b00000000;
M8C_SetBank0;
PRT2DM2 &= 0b00000000;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -