📄 main.c
字号:
/***********************************************************************
* *
* Project Name: Demo board for graphic LCD EL 16032 *
* Description: *
* *
* Processor: uPD78F9177 *
* Revision: 1.0 *
* Date: 08.12.2003 *
* Compiler: C crosscompiler IAR 2.22 *
* Author: *
* Company: *
* Email: *
* *
***********************************************************************/
#include <in78000.h>
#include "Df9177ay.H"
#include "appcfg.h"
#include "LCD_el16032.h"
bit bButton_0;
bit bButton_1;
unsigned char Time;
unsigned char Wait;
// interrupt from watch timer
interrupt [INTWT_vect] void vWatchTimer(void)
{
Time++;
}
//-----------------------------------------------------------------------------
// interrupt handler for PWM on timer TM80
interrupt [INTTM80_vect] void vTimer80(void)
{
}
//-----------------------------------------------------------------------------
interrupt [INTWTI_vect] void vWatchTimerI(void)
{
}
//-----------------------------------------------------------------------------
interrupt [INTTM81_vect] void vTimer81(void)
{
Wait++;
}
//-----------------------------------------------------------------------------
interrupt [INTP0_vect] void vINTP0(void)
{
if (!Button1) bButton_0 = TRUE;
}
interrupt [INTP1_vect] void vINTP1(void)
{
if (!Button2) bButton_1 = TRUE;
}
//-----------------------------------------------------------------------------
// function for waiting, variable cekej x 10ms
void delay(unsigned char Cekej)
{
Wait = 0;
TCE81 = 1; // Operation enable
while (Wait < Cekej);
TCE81 = 0; // Operation disable
}
//-----------------------------------------------------------------------------
void init_app(void)
{
PCC = 0x00; // Clock generator setting - Use high speed mode
// port setting
PM5 = 0xF0; // Port 5 to output
P5 = 0x00;
P2 = 0x00;
PM2 = 0x80; // Port to output
P3 = 0xFF;
PM3 = 0xF3; // Port to input and pin P3.0, P3.1 as output
PUB3 = 0xFF; // pullup resistors ON
PM0 = 0xC0; // Port to output
// Watch Timer
WTM = 0x53; // set watch timer from mainclock
WTMK = 0;
WTIMK = 0;
WTIF = 0;
// nastaveni casovace TM81
TMC81 = 0x82; // Timer 0 Fx/2^8
CR81 = 0x20; // 9.98 us
TCE81 = 0; // Operation disable
TMIF81 = 0; // enable interupt from TM81
TMMK81 = 0; // enable interrupt service for TM81
// 8 Bit PWM on TM80
PM2.6 = 0;
TMC80 = 0x81; // Timer 80 - 19,5 kHz
TCE80 = 1; // Operation enable
PWME80 = 1; // PWM output enable
TOE80 = 1; // output enable
CR80 = 128; //
TMIF80 = FALSE; // Clear interrupt
TMMK80 = FALSE; // Enable Timer50 Interrupt
// ******* Obsluha vnejsich preruseni ****************
INTM0 = 0x00;
PIF0 = FALSE;
PMK0 = FALSE;
PIF1 = FALSE;
PMK1 = FALSE;
CSIM20 = 0x00;
}
//-----------------------------------------------------------------------------
void set_pwm(unsigned char PWM_CR)
{
TCE80 = 0;
CR80 = PWM_CR;
TCE80 = 1;
}
//----------------------------------------------------------------------------
void kriz(void)
{
char i,j;
lcd_init(0);
lcd_write_cmd(0x3E);
lcd_write_cmd(ROW_ENABLE);
lcd_clear_graf();
for (j=0x80;j<0xA0;j++)
{
for (i = 0x80;i<0x8A;i++)
{
lcd_write_cmd(j);
lcd_write_cmd(i);
if (j%2)
{
lcd_write_data(0xAA);
lcd_write_data(0xAA);
}
else
{
lcd_write_data(0x55);
lcd_write_data(0x55);
}
}
lcd_write_cmd(0x0F);
}
}
//----------------------------------------------------------------------------
void combi(void)
{
char j;
unsigned char a = 0x80;
unsigned char b = 0x00;
unsigned char c = 0x00;
unsigned char d = 0x02;
lcd_clear_graf();
lcd_init(0);
lcd_write_cmd(FIRST_LINE);
lcd_text("Toto je Text ");
lcd_write_cmd(SECOND_LINE);
lcd_text("Tohle taky ");
lcd_write_cmd(0x3E);
lcd_write_cmd(ROW_ENABLE);
for (j=0x80;j<0xA0;j++)
{
lcd_write_cmd(j);
lcd_write_cmd(0x87);
lcd_write_data(0x80);
lcd_write_data(0x00);
}
for (j=0x80;j<0xA0;j++)
{
lcd_write_cmd(j);
lcd_write_cmd(0x88);
lcd_write_data(0x00);
lcd_write_data(0x01);
}
lcd_write_cmd(0x80);
lcd_write_cmd(0x87);
lcd_write_data(0xFF);
lcd_write_data(0xFF);
lcd_write_cmd(0x9F);
lcd_write_cmd(0x87);
lcd_write_data(0xFF);
lcd_write_data(0xFF);
lcd_write_cmd(0x80);
lcd_write_cmd(0x88);
lcd_write_data(0xFF);
lcd_write_data(0xFF);
lcd_write_cmd(0x9F);
lcd_write_cmd(0x88);
lcd_write_data(0xFF);
lcd_write_data(0xFF);
for (j=0x81;j<0x9F;j++)
{
lcd_write_cmd(j);
lcd_write_cmd(0x87);
a = (a >>1);
lcd_write_data(a|0x80);
lcd_write_data(b);
b = b >> 1;
if (a == 0x01) b = 0x80;
lcd_write_cmd(j);
lcd_write_cmd(0x88);
lcd_write_data(c);
lcd_write_data(d|0x01);
d = d << 1;
c = c << 1;
if (!d && (j<0x89)) c = 0x01;
}
lcd_write_cmd(0x0F);
}
//-----------------------------------------------------------------------------
void picture(char Mod)
{
unsigned char i,j;
switch (Mod)
{
case 0: lcd_init(0);
lcd_write_cmd(FIRST_LINE);
lcd_text("First line of GraLCD");
lcd_write_cmd(SECOND_LINE);
lcd_text("Second line of GrLCD");
break;
case 1: lcd_write_cmd(0x3E);
lcd_write_cmd(ROW_ENABLE);
for (j=0x80;j<0xA0;j++)
{
for (i = 0x80;i<0x8A;i++)
{
lcd_write_cmd(j);
lcd_write_cmd(i);
lcd_write_data(0xFF);
lcd_write_data(0xFF);
}
lcd_write_cmd(0x0F);
}
break;
case 2: kriz();break;
case 3: combi();break;
}
}
//-----------------------------------------------------------------------------
void main(void)
{
unsigned char PWM_Reg = 0xFF;
char Mod = 0x00;
_DI(); // Disable all interrupts
init_app(); // Peripheral settings
_EI(); // Enable all interrupts
lcd_init(0); // Init LCD display
lcd_text(" Display EL 160x32 ");
lcd_write_cmd(SECOND_LINE);
lcd_text("Demonstration Elatec");
Time = 0;
while (Time < 20);
Time = 0;
lcd_clear_graf();
bButton_1 = TRUE;
while (1)
{
if(bButton_0)
{
bButton_0 = FALSE;
PWM_Reg = PWM_Reg + 50;
set_pwm(PWM_Reg);
}
if(bButton_1)
{
bButton_1 = FALSE;
picture(Mod);
Mod++;
Mod = Mod % 4;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -