📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2006-09-22
** Last Version: v1.0
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "disp.h"
#define TASK0_ID 16 // 任务的ID
#define TASK0_PRIO 16 // 任务的优先级
#define TASK0_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK1_ID 17 // 任务的ID
#define TASK1_PRIO 17 // 任务的优先级
#define TASK1_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK2_ID 18 // 任务的ID
#define TASK2_PRIO 18 // 任务的优先级
#define TASK2_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK3_ID 19 // 任务的ID
#define TASK3_PRIO 19 // 任务的优先级
#define TASK3_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK4_ID 20 // 任务的ID
#define TASK4_PRIO 20 // 任务的优先级
#define TASK4_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK5_ID 21 // 任务的ID
#define TASK5_PRIO 21 // 任务的优先级
#define TASK5_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK6_ID 22 // 任务的ID
#define TASK6_PRIO 22 // 任务的优先级
#define TASK6_STACK_SIZE 512 // 定义用户堆栈长度
#define TASK7_ID 23 // 任务的ID
#define TASK7_PRIO 23 // 任务的优先级
#define TASK7_STACK_SIZE 512 // 定义用户堆栈长度
OS_STK TASK0_STACK[TASK0_STACK_SIZE];
OS_STK TASK1_STACK[TASK1_STACK_SIZE];
OS_STK TASK2_STACK[TASK2_STACK_SIZE];
OS_STK TASK3_STACK[TASK3_STACK_SIZE];
OS_STK TASK4_STACK[TASK4_STACK_SIZE];
OS_STK TASK5_STACK[TASK5_STACK_SIZE];
OS_STK TASK6_STACK[TASK6_STACK_SIZE];
OS_STK TASK7_STACK[TASK7_STACK_SIZE];
void TASK0(void *pdata);
void TASK1(void *pdata);
void TASK2(void *pdata);
void TASK3(void *pdata);
void TASK4(void *pdata);
void TASK5(void *pdata);
void TASK6(void *pdata);
void TASK7(void *pdata);
extern uint16 textcolor; // color of text
extern uint16 backcolor; // color of background
const uint16 pot10[4] ={10,100,1000,10000};
void ubi2dec( uint16 val, uint8 *strg, uint8 nzero);
void ubi2dec( uint16 val, uint8 *strg, uint8 nzero)
/*
convert unsigned int16 value to a character string
stringlength has to be 6 character 65536 + the final 0
将val转换成十进制六个字符,五位数字+最后一个0
if nzero==0, no leading zeros
if nzero==1, with leading zeros
*/
{
INT8U dec,idx=4,odx=0;
do
{
idx--;
for (dec=0; val>=pot10[idx]; val-=pot10[idx])
{
dec++;
}
nzero+=dec;
if (nzero) strg[odx++]='0'+dec;
} while(idx);
strg[odx++]='0'+val;
strg[odx]=0;
}
void lcd_write(uint8 data);
void lcd_write(uint8 data)
{
S0PDR = data;
while(0==(S0PSR&0x80));
//OSTimeDly(OS_TICKS_PER_SEC/3000);
// 等待SPIF置位,即等待数据发送完毕
//SPDR= dat;
//while (!(SPSR & _BV(SPIF)));
}
void lcd_cmd (INT8U dat);
void lcd_cmd (INT8U dat)
{
LCD_RS_Clr();
//PORTB &= ~_BV(LCD_RS);
lcd_write(dat);
lcd_write(0x00);
LCD_RS_Set();
//PORTB |= _BV(LCD_RS);
}
void lcd_dat0(uint8 dat);
void lcd_dat0(uint8 dat)
{
lcd_write(dat);
lcd_write(0x00);
}
void lcd_dat16(uint16 dat);
void lcd_dat16(uint16 dat)
{
lcd_write(dat>>8);
lcd_write(dat);
}
void fill_screen(uint16 color);
void fill_screen(uint16 color)
{
uint16 i;
LCD_CS_Clr();
//PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(SD_CSET);
lcd_dat0(0x08); // start is 8, not 0
lcd_dat0(0x01);
lcd_dat0(0x8B); // is 00x8B = 0x83+8
lcd_dat0(0x01);
lcd_cmd(SD_PSET);
lcd_dat0(0x00);
lcd_dat0(0xAF);
lcd_cmd(RAMWR);
// start data transmission
for (i=0; i<DISP_W*DISP_H; i++)
lcd_dat16(color);
LCD_CS_Set();
//PORTB |= _BV(LCD_CS); // deselect display
}
void put_char(uint8 x, uint8 y, uint8 c);
void put_char(uint8 x, uint8 y, uint8 c)
{
uint8 h,ch,p,mask,he;
LCD_CS_Clr();
//PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(SD_CSET);
lcd_dat0(0x08+x); // start is 8, not 0
lcd_dat0(0x01);
lcd_dat0(0x08+x+CHAR_W-1); // end is 00x8B = 0x83+8
lcd_dat0(0x01);
lcd_cmd(SD_PSET);
lcd_dat0(y);
if (y < DISP_H-CHAR_H)
{
he=CHAR_H;
lcd_dat0(y+CHAR_H-1);
}
else
{
he=DISP_H-y;
lcd_dat0(DISP_H-1);
}
lcd_cmd(RAMWR);
for (h=0; h<he; h++) // every column of the character
{
ch=ascii_tab[c-32][h];
mask=0x80;
for (p=0; p<CHAR_W; p++) // write the pixels
{
if (ch&mask)
{
lcd_dat16(textcolor);
}
else
{
lcd_dat16(backcolor);
}
mask=mask/2;
} // for p
}
LCD_CS_Set();
//PORTB |= _BV(LCD_CS); // deselect display
}
void lcd_cspulse(void);
void lcd_cspulse(void)
{
LCD_CS_Set();
//PORTB |= _BV(LCD_CS);
LCD_CS_Set();
// __asm{ NOP; };
LCD_CS_Clr();
//PORTB &= ~_BV(LCD_CS);
}
void print_str(uint8 x, uint8 y, uint8 *txt);
void print_str(uint8 x, uint8 y, uint8 *txt)
{
uint8 i=0;
while (txt[i]!=0)
{
put_char(x+i*CHAR_W,y,txt[i]);
i++;
}
}
void lcd_init_c(void)
/*
Init the Siemens S65 Display with EPSON controller
(c) Christian Kranz, 10/2005
*/
{
uint8 i;
static const uint8 disctl[9]={0x4C, 0x01, 0x53, 0x00, 0x02, 0xB4, 0xB0, 0x02, 0x00};
static const uint8 gcp64_0[29]={0x11,0x27,0x3C,0x4C,0x5D,0x6C,0x78,0x84,0x90,0x99,0xA2,0xAA,0xB2,0xBA,
0xC0,0xC7,0xCC,0xD2,0xD7,0xDC,0xE0,0xE4,0xE8,0xED,0xF0,0xF4,0xF7,0xFB,
0xFE};
static const uint8 gcp64_1[34]={0x01,0x03,0x06,0x09,0x0B,0x0E,0x10,0x13,0x15,0x17,0x19,0x1C,0x1E,0x20,
0x22,0x24,0x26,0x28,0x2A,0x2C,0x2D,0x2F,0x31,0x33,0x35,0x37,0x39,0x3B,
0x3D,0x3F,0x42,0x44,0x47,0x5E};
static const uint8 gcp16[15]={0x13,0x23,0x2D,0x33,0x38,0x3C,0x40,0x43,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x64};
// generate clean display reset
LCD_RESET_Clr();
LCD_CS_Set();
LCD_RS_Set();
//PORTB &= ~_BV(LCD_RESET); // reset display
//PORTB |= _BV(LCD_CS); // CS is high during reset release
//PORTB |= _BV(LCD_RS); // RS is set to high
OSTimeDly(OS_TICKS_PER_SEC/100);
//_delay_ms(10);
LCD_RESET_Set();
//PORTB |= _BV(LCD_RESET); // release reset
OSTimeDly(OS_TICKS_PER_SEC/28);
//_delay_ms(35);
LCD_CS_Clr();
//PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(DATCTL);
lcd_dat0(0x2A); // 0x2A=565 mode, 0x0A=666mode, 0x3A=444mode
lcd_cspulse();
lcd_cmd(DISCTL);
for (i=0; i<9; i++)
{
lcd_dat0(disctl[i]);
}
lcd_cmd(GCP64);
for (i=0; i<29; i++)
{
lcd_dat0(gcp64_0[i]);
lcd_dat0(0x00);
}
for (i=0; i<34; i++)
{
lcd_dat0(gcp64_1[i]);
lcd_dat0(0x01);
}
lcd_cmd(GCP16);
for (i=0; i<15; i++)
{
lcd_dat0(gcp16[i]);
}
lcd_cmd(GSSET);
lcd_dat0(0x00);
lcd_cmd(OSSEL);
lcd_dat0(0x00);
lcd_cmd(SLPOUT);
OSTimeDly(OS_TICKS_PER_SEC/100);
// _delay_ms(7);
lcd_cmd(SD_CSET);
lcd_dat0(0x08);
lcd_dat0(0x01);
lcd_dat0(0x8B);
lcd_dat0(0x01);
lcd_cmd(SD_PSET);
lcd_dat0(0x00);
lcd_dat0(0x8F);
lcd_cmd(ASCSET);
lcd_dat0(0x00);
lcd_dat0(0xAF);
lcd_dat0(0xAF);
lcd_dat0(0x03);
lcd_cmd(SCSTART);
lcd_dat0(0x00);
LCD_RS_Clr();
//PORTB &= ~_BV(LCD_RS);
lcd_dat0(DISON);
LCD_CS_Set();
//PORTB |= _BV(LCD_CS); // deselect display
}
void Disp_pic(uint8 x, uint8 y, uint8 w, uint8 h,unsigned char *pic);
void Disp_pic(uint8 x, uint8 y, uint8 w, uint8 h,unsigned char *pic)
{
uint8 i,j,ch,mask;
LCD_CS_Clr();
//PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(SD_CSET);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -