?? sy8.c
字號(hào):
#include <c8051f000.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_CS=P3^0; //片選接口 低電平有效
sbit LCD_RES=P3^1; //單片機(jī)復(fù)位接口 低電平有效
sbit LCD_A0=P3^2; //數(shù)據(jù)/命令選擇位 低電平命令 高電平數(shù)據(jù)
sbit LCD_SCK=P3^3; //時(shí)鐘信號(hào)口 上升沿觸發(fā)
sbit LCD_DA=P3^4; //數(shù)據(jù)信號(hào)口
void delay(uint i);
void sysclk_init();
void port_init();
float flash_re(uchar x);
void flash_wr(uchar x,float dat);
void lcd_send_data(uchar dat);
void lcd_send_cmd(uchar dat);
void lcd_init();
void lcd_set_page(uchar dat);
void lcd_set_colume(uchar dat);
void lcd_clr();
void lcd_point(uchar x,uchar y);
void lcd_display_one_num(uchar wordx,uchar wordy,uchar *n);
void lcd_word(uchar wordx,uchar wordy,uchar *word);
void lcd_display_num(uchar x,uchar y,float num);
//-------------------------------------------------------
//漢字字模
//每個(gè)漢字16X16 x+16 page+1 y+16
//-------------------------------------------------------
uchar code jia[]={0x02,0x02,0x3A,0xAA,0xAA,0xBE,0xAA,0xAA,0xAA,0xBE,0xAA,0xAA,0x3A,0x02,0x02,0x00,
0x00,0x80,0x80,0x5F,0x40,0x20,0x10,0x0E,0x10,0x20,0x60,0xDF,0x40,0x00,0x00,0x00};
uchar code zhi[]={0x00,0x08,0x08,0x08,0x08,0x08,0x09,0x0A,0x0C,0x88,0x48,0x28,0x1C,0x08,0x00,0x00,
0x20,0x60,0x30,0x08,0x18,0x24,0x24,0x22,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x00};
uchar code ye[]={0x10,0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,
0x04,0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00};
uchar code jing[]={0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,
0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00};
uchar code shi[]={0x00,0x10,0x0C,0x04,0x4C,0xB4,0x94,0x05,0xF6,0x04,0x04,0x04,0x14,0x0C,0x04,0x00,
0x00,0x82,0x82,0x42,0x42,0x23,0x12,0x0A,0x07,0x0A,0x12,0xE2,0x42,0x02,0x02,0x00};
uchar code yan[]={0x02,0xFA,0x82,0x82,0xFE,0x80,0x40,0x60,0x58,0x46,0x48,0x50,0x20,0x20,0x20,0x00,
0x08,0x08,0x04,0x24,0x40,0x3F,0x22,0x2C,0x21,0x2E,0x20,0x30,0x2C,0x23,0x20,0x00};
uchar code meng[]={0x40,0x44,0x24,0x14,0xFF,0x94,0x64,0x40,0x24,0x14,0xFF,0x0C,0x34,0x64,0x24,0x00,
0x00,0x80,0x88,0x88,0x46,0x45,0x29,0x31,0x11,0x09,0x05,0x03,0x01,0x00,0x00,0x00};
uchar code face[]={0xE0,0x10,0x0C,0x24,0x22,0x21,0x21,0x81,0x01,0x21,0x21,0x22,0x24,0x0C,0x10,0xE0,
0x07,0x08,0x30,0x20,0x40,0x88,0x90,0x97,0x94,0x90,0x88,0x40,0x20,0x30,0x08,0x07};
uchar * code zichuan[]={jia,meng,zhi,ye,jing,shi,yan,face};
//--------------------------------------------------------
//數(shù)字字模
//每個(gè)數(shù)字8X16 x+8 page+2 y+16
//--------------------------------------------------------
uchar code num0[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
uchar code num1[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
uchar code num2[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};
uchar code num3[]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};
uchar code num4[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};
uchar code num5[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};
uchar code num6[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};
uchar code num7[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};
uchar code num8[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};
uchar code num9[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};
uchar code dian[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};
uchar * code albnum[]={num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,dian};
void main()
{
uchar i;
sysclk_init();
port_init();
lcd_init();
lcd_clr(); //清屏
lcd_display_num(0,0,flash_re(0));//顯示 讀取FLASH中的數(shù)據(jù)
for(i=0;i<8;i++) //顯示 賈夢(mèng)之液晶實(shí)驗(yàn) 和一個(gè) 笑臉
{
lcd_word(16*i,2,zichuan[i]);
}
for(i=0;i<11;i++)
{
lcd_display_one_num(8*i,4,albnum[i]);
}
lcd_display_num(0,6,3.657);
flash_wr(0,8.14); //向flash中寫數(shù)據(jù)
for(;;);
}
//--------------------------------------------
//顯示10-0之間的小數(shù) 有效數(shù)字4位
//每個(gè)數(shù)字寬8 高16 帶小數(shù)點(diǎn)共寬5位 40列
//x:數(shù)字列位置(0-87) y:數(shù)組行(頁(yè))(1-8) num:顯示的數(shù)字(10-0之間的浮點(diǎn)數(shù))
//--------------------------------------------
void lcd_display_num(uchar x,uchar y,float num)
{
lcd_display_one_num(x,y,albnum[(uchar)(num)]);
x+=8;
lcd_display_one_num(x,y,albnum[10]); //顯示小數(shù)點(diǎn)
x+=8;
lcd_display_one_num(x,y,albnum[((uint)(num*=10))%10]);
x+=8;
lcd_display_one_num(x,y,albnum[((uint)(num*=10))%10]);
x+=8;
lcd_display_one_num(x,y,albnum[((uint)(num*=10))%10]);
}
//--------------------------------------------
//顯示1個(gè)阿拉伯?dāng)?shù)字
//每個(gè)數(shù)字寬8 高16
//wordx:數(shù)字列位置(0-119) wordy:數(shù)組行(頁(yè))(1-8) num:顯示的數(shù)字(10-0之間的浮點(diǎn)數(shù))
//--------------------------------------------
void lcd_display_one_num(uchar wordx,uchar wordy,uchar *n)
{
uchar i;
lcd_set_page(wordy);
lcd_set_colume(wordx);
for(i=0;i<8;i++)
lcd_send_data(*(n+i));
lcd_set_page(wordy+1);
lcd_set_colume(wordx);
for(i=0;i<8;i++)
lcd_send_data(*(n+i+8));
}
void delay(uint i)
{
for(;i>0;i--);
}
void lcd_send_data(uchar dat)
{
uchar i;
LCD_CS=0; //片選選通
LCD_A0=1; //選擇發(fā)送數(shù)據(jù)
LCD_SCK=1;
for(i=0;i<8;i++)
{
dat<<=1; //將要發(fā)送位送人CY寄存器
LCD_DA=CY; //發(fā)送CY中字節(jié)
LCD_SCK=0;
delay(10);
LCD_SCK=1; //時(shí)鐘電平上升沿 數(shù)據(jù)位送給LCD
delay(10);
}
LCD_CS=1; //片選關(guān)
delay(20);
}
void lcd_send_cmd(uchar dat)
{
uchar i;
LCD_CS=0; //片選選通
LCD_A0=0; //選擇發(fā)送命令
LCD_SCK=1;
for(i=0;i<8;i++)
{
dat<<=1; //將要發(fā)送位送人CY寄存器
LCD_DA=CY; //發(fā)送CY中字節(jié)
LCD_SCK=0;
delay(10);
LCD_SCK=1; //時(shí)鐘電平上升沿 數(shù)據(jù)位送給LCD
delay(10);
}
LCD_CS=1; //片選關(guān)
delay(20);
}
void lcd_init()
{
LCD_RES=1;
delay(20000);
lcd_send_cmd(0xE2); //復(fù)位
lcd_send_cmd(0xA2); //d0:Set LCD drive voltage bias ratio 0=1/9bias 1=1/7bias
lcd_send_cmd(0xC8); //d3:select COM output direction 0=normal 1=reverse
lcd_send_cmd(0xA0); //d0:select SEG output direction 0=normal 1=reverse
lcd_send_cmd(0xA6); //d0:0=display normal 1=reverse
lcd_send_cmd(0xF8); //select booster ratio
lcd_send_cmd(0x00); //select booster ratio d0&d1:00=4x
lcd_send_cmd(0x2C); //d2:1=select internal power supply operating mode
lcd_send_cmd(0x2E);
lcd_send_cmd(0x2F);
lcd_send_cmd(0x81); //select the VO output voltage electronic volume register
lcd_send_cmd(0x14); //select the VO output voltage electronic volume register
lcd_send_cmd(0x0E); //select the VO output voltage electronic volume register
lcd_send_cmd(0xAF); //d0:LCD display ON=1/OFF=0
lcd_send_cmd(0xE0);
lcd_send_cmd(0x40); //Set the display RAM start line address
}
void lcd_set_page(uchar dat)
{
lcd_send_cmd(0xb0|dat);
}
void lcd_set_colume(uchar dat)
{
uchar tmp;
tmp=dat>>4;
lcd_send_cmd(0x10|tmp); //送列地址高四位
tmp=0x0f&dat;
lcd_send_cmd(tmp); //送列地址低四位
}
void lcd_clr()
{
uchar i,j;
for(i=0;i<8;i++)
{
lcd_set_page(i);
lcd_set_colume(0);
for(j=0;j<128;j++)
lcd_send_data(0x00);
}
}
//-------------------------------------------------------
//x:列(0-127) y:行(0-63)
//-------------------------------------------------------
void lcd_point(uchar x,uchar y)
{
lcd_set_colume(x); //設(shè)置列
lcd_set_page(y>>3); //設(shè)置頁(yè)
lcd_send_data(1<<(0x07&y));
}
//-------------------------------------------------------
//每個(gè)漢字寬16 高2頁(yè)
//
//wordx:漢字列位置(0-111) wordy:漢字行(0-8) word:字模數(shù)組名
//-------------------------------------------------------
void lcd_word(uchar wordx,uchar wordy,uchar *word)
{
uchar i;
lcd_set_page(wordy);
lcd_set_colume(wordx);
for(i=0;i<16;i++)
lcd_send_data(*(word+i));
lcd_set_page(wordy+1);
lcd_set_colume(wordx);
for(i=0;i<16;i++)
lcd_send_data(*(word+i+16));
}
void sysclk_init()
{
WDTCN=0XDE; //關(guān)看門狗
WDTCN=0XAD;
OSCICN=0x07; //內(nèi)部16M時(shí)鐘
}
void port_init()
{
XBR0=0X00; //CEX0,CEX1連接到端口
XBR1=0X00;
XBR2=0X40; //交叉開關(guān)允許
PRT0CF=0Xff; //P0口輸出方式推挽
PRT1CF=0Xff; //P1口輸出方式推挽
PRT2CF=0Xff; //P2口輸出方式推挽
}
//----------------------------------------------
//向flash的128字節(jié)扇區(qū)寫數(shù)據(jù) 扇區(qū)地址0x8000-0x807f
//dat 要存儲(chǔ)的數(shù)據(jù) x:存儲(chǔ)在128字節(jié)扇區(qū)的第X字節(jié)
//----------------------------------------------
void flash_wr(uchar x,float dat)
{
float xdata *pwr=0x8000+8*x;//寫指針
FLSCL=0x89;
PSCTL=0x03; //擦除允許 寫允許
*pwr=1;
PSCTL=0x01; //寫允許
*pwr=dat;
}
//----------------------------------------------
//讀取flash的128字節(jié)扇區(qū)內(nèi)容
//----------------------------------------------
float flash_re(uchar x)
{
float code *pre=0x8000+8*x;//讀指針
return *pre;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -