📄 main.c
字号:
/***********************************************************************
* *
* Project Name: Demo board for graphic LCD PG320240 *
* Description: Driving of the LCD PG320240 with SED1335 driver*
* *
* Processor: uPD78F9177 *
* Revision: 1.0 *
* Date: 24.11.2004 *
* Compiler: C crosscompiler IAR 2.22 *
* Author: Lukas Bier *
* Company: *
* Email: Bier@elatec.cz *
* *
***********************************************************************/
#include <in78000.h>
#include "Df9177ay.H"
#include "defines.h"
#include "LCD_pg320240.h"
unsigned char Picture = 0;
unsigned char Second;
unsigned char Minutes;
unsigned char Interval = 0;
bit bEven;
bit bButton1;
bit bButton2;
bit bButton3;
bit bButton4;
bit bPicture;
bit bPicture_old;
unsigned int osaX_empty, osaY_empty;
unsigned int osax, osay;
void hodiny(void);
void scan_touch(void);
void showx(void);
unsigned int scan_x(void);
unsigned int scan_y(void);
// interrupt from watch timer
interrupt [INTWT_vect] void vWatchTimer(void)
{
bEven = ~bEven;
showx();
if (bEven)
{
if (Second < 60) Second++;
else {Second = 0;Minutes++;}
if (Minutes == 60) Minutes = 0;
//if (!Picture) hodiny();
if((osax < 100) && (!bPicture_old)) { bPicture = 1; bPicture_old = 1;}
else bPicture_old = 0;
showx();
}
}
interrupt [INTWTI_vect] void vWatchTimerI(void)
{
Interval++;
if (Interval >10)
{
Interval = 0;
osax = scan_x();
osay = scan_y();
}
}
interrupt [INTTM80_vect] void vTimer80(void)
{
}
interrupt [INTP0_vect] void vINTP0(void)
{
if (!Button1) bButton1 = TRUE;
}
interrupt [INTP1_vect] void vINTP1(void)
{
if (!Button2) bButton2 = TRUE;
}
interrupt [INTP2_vect] void vINTP2(void)
{
if (!Button3) bButton3 = TRUE;
}
interrupt [INTP3_vect] void vINTP3(void)
{
if (!Button4) bButton4 = TRUE;
}
unsigned int getAD(unsigned char ucChannel)
{
ADS0 = ucChannel; // Set selected A/D channel
ADCS0 = TRUE; // Start AD-Conversion
ADIF0 = 0;
ADCS0 = TRUE; // Start AD-Conversion
while(!ADIF0){_NOP();}
ADIF0 = 0;
while(!ADIF0){_NOP();}
ADCS0 = FALSE; // Stop A/D conversion
return (ADCR0 >> 6); // Return A/D conversion result
}
void init_app(void)
{
unsigned int i;
// clock generator setting
PCC = 0x00; // Use high speed mode
// port setting
PM5 = 0xF0; // Port DataH to output
DataH = 0x00; // DataH to low
P2 = 0xFF;
PM2 = 0x80; // Port to output
P1 = 0xFF;
PM1 = 0xFC;
P3 = 0xFF;
PM3 = 0xFF; // Port to input
PUB3 = 0xFF; // pullup resistors ON
PM0 = 0xC0; // Port to output
PWM = 0;
RESET = 0; // Reset of LCD
// Watch Timer
WTM = 0x53; // set watch timer from mainclock
WTMK = 0;
WTIMK = 0;
WTIF = 0;
// ******* Obsluha vnejsich preruseni ****************
INTM0 = 0x00;
PIF0 = FALSE;
PMK0 = FALSE;
// INTM0 |= 0x04; // nabezna hrana preruseni vyvola interrupt
PIF1 = FALSE;
PMK1 = FALSE;
// INTM0 |= 0x10; // nabezna hrana preruseni vyvola interrupt
PIF2 = FALSE;
PMK2 = FALSE;
PIF3 = FALSE;
PMK3 = FALSE;
// 8 Bit PWM on TM80
P2.6 = 0;
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 Timer80 Interrupt
Second = 0;
Minutes = 0;
bButton1 = 0;
bButton2 = 0;
bButton3 = 0;
bButton4 = 0;
// Analog Converter setting
// Stop AD-Converter, start conversion by SW
ADM0 = 0x00; // conversion time 144/fx (-> 17.1祍)
ADS0 = 0x00; // Default selection: channel 0
ADIF0 = FALSE; // Clear Interrupt request bit ADC
for (i=1; i<1024; i++) _NOP();
RESET = 1;
}
void set_pwm(unsigned char PWM_CR)
{
TCE80 = 0;
CR80 = PWM_CR;
TCE80 = 1;
}
void hodiny(void)
{
lcdwrite_command(0x46);
lcdwrite_data(0x9c);
lcdwrite_data(0x02); // Set cursor address
lcdwrite_command(0x42);
lcdwrite_data(Minutes / 10 + 0x30);
lcdwrite_data(Minutes % 10 + 0x30);
lcdwrite_data(':');
lcdwrite_data(Second / 10 + 0x30);
lcdwrite_data(Second % 10 + 0x30);
}
void showx(void)
{
lcdwrite_command(0x46);
lcdwrite_data(0x9f);
lcdwrite_data(0x04); // Set cursor address
lcdwrite_command(0x42);
lcdwrite_data(osax / 1000 + 0x30);
lcdwrite_data((osax % 1000)/100 + 0x30);
lcdwrite_data(((osax % 1000)%100)/10 + 0x30);
lcdwrite_data(((osax % 1000)%100)%10 + 0x30);
lcdwrite_data(' ');lcdwrite_data('-');
lcdwrite_data(osay / 1000 + 0x30);
lcdwrite_data((osay % 1000)/100 + 0x30);
lcdwrite_data(((osay % 1000)%100)/10 + 0x30);
lcdwrite_data(((osay % 1000)%100)%10 + 0x30);
}
void show_pwm(unsigned char PWM_CR)
{
lcdwrite_command(0x46);
lcdwrite_data(0x95);
lcdwrite_data(0x04); // Set cursor address
lcdwrite_command(0x42);
lcdwrite_data(PWM_CR / 100 + 0x30);
PWM_CR = PWM_CR % 100;
lcdwrite_data(PWM_CR / 10 + 0x30);
lcdwrite_data(PWM_CR % 10 + 0x30);
}
void show_picture(unsigned char Number)
{
unsigned char *ptrPicture;
unsigned int i;
switch (Number)
{
case 0: ptrPicture = (unsigned char *)0x1000;break;
case 1: ptrPicture = (unsigned char *)0x3580;break;
}
_DI();
lcdwrite_command(0x46);
lcdwrite_data(0xB0);
lcdwrite_data(0x04); // Set cursor
lcdwrite_command(0x42); // write
for (i=0;i < 9600;i++)
{
lcdwrite_data(*ptrPicture);
ptrPicture++;
}
_EI();
}
unsigned int scan_x(void)
{
P2.2 = 0; // Set to low output
PM2.2 = 1; // Set to input
PM2.0 = 0; // Set to output
P2.0 = 0;
P1.0 = 1; // disconnect transistor
P1.1 = 0; // connect transistor
return (getAD(AN1));
}
unsigned int scan_y(void)
{
P1.1 = 1; // disconnect transistor
PM2.0 = 1; // Set to input
P2.2 = 0; // Set to low output
PM2.2 = 0; // Set to output
P2.0 = 0;
P1.0 = 0; // disconnect transistor
return(getAD(AN0));
}
void main(void)
{
unsigned char PWM_Reg = 0x7F;
_DI(); // Disable all interrupts
init_app(); // Peripheral settings
_EI(); // Enable all interrupts
bPicture = bPicture_old = 0;
init_lcd();
// hodiny();
show_picture(0);
show_pwm(PWM_Reg);
osaX_empty = scan_x();
osaY_empty = scan_y();
while (1)
{
if (bPicture)
{
Picture = (Picture + 1) % 2;
show_picture(Picture);
bPicture = FALSE;
}
if(bButton3)
{
bButton3 = FALSE;
if (PWM_Reg < 0xF6) PWM_Reg = PWM_Reg + 10;
set_pwm(PWM_Reg);
show_pwm(PWM_Reg);
}
if(bButton4)
{
bButton4 = FALSE;
if (PWM_Reg > 11) PWM_Reg = PWM_Reg - 10;
set_pwm(PWM_Reg);
show_pwm(PWM_Reg);
}
if(bButton1)
{
bButton1 = FALSE;
bPicture = FALSE;
Picture = 0;
show_picture(Picture);
}
if(bButton2)
{
bButton2 = FALSE;
bPicture = FALSE;
Picture = 1;
show_picture(Picture);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -