久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
12864顯示曲線程序,漢字顯示程序,圖片顯示程序 完整版
[打印本頁]
作者:
hongniu
時間:
2015-6-25 23:00
標題:
12864顯示曲線程序,漢字顯示程序,圖片顯示程序 完整版
12864顯示曲線估計難倒不少人,網上的大多數都卻老多函數了。
編這個的關鍵點在于:國產的液晶屏1602和12864的寄存器全都讀不出來,只能寫(也許是我技術不夠)
此程序為一頭文件,最簡只需兩個函數就能在12864上顯示漢字
LCD_int();
LCD_write(1,1,“追雪”);
就會在前兩個位置顯示我的名字
曲線顯示要在內存里構建虛擬寄存器,因為讀不出來,所以要在寫12864的同時寫虛擬寄存器,寫之前讀出虛擬寄存器的值與點位置相或,這樣才不會覆蓋之前的點。具體自己讀程序,注釋我寫的很清楚
此程序基于mage128單片機
文章里/+*不能連打,只能在中間加了一個空格,所以復制的時候請將注釋前的空格刪掉。
此程序原創,辛辛苦苦編了幾天的東西,而且還無私的分享給大家,希望大家轉載請注明。
/ ****************************************************************/
/ ****** 12864顯示文件,串口程序——2019.8.20 追雪 ******/
/ ****************************************************************/
/ ****************************************************************/
/ ****** send_data () 寫入字節數據 ******/
/ ****** wr_command() 向LCD寫入控制字 ******/
/ ****** wr_byte() 向LCD中寫入要顯示的漢字字符等 ******/
/ ****** setadress() 寫入要顯示出的字的位置 ******/
/ ****** LCD_write() 向LCD的任意位置寫入任意字符 ******/
/ ****** lcd_check() 點亮全屏,檢查壞點 ******/
/ ****** photo_ready() 顯示圖形前的準備,輸入繪圖地址 ******/
/ ****** lcd_clr_GDRAM() 清除上次圖像GDRAM和虛擬緩存 ******/
/ ****** photo_disp() 顯示圖形子程序 ******/
/ ****** photo_clr() 顯示圖形漸漸消失子程序 ******/
/ ****** LCD_int() 初始化LCD ******/
/ ****** lcd_quxian_int()畫曲線的坐標軸 ******/
/ ****** lcd_clr() 液晶顯示屏清屏 ******/
/ ****** lcd_wrpot() 點亮坐標為(x,y)的點 ******/
/ ****** lcd_clpot() 點暗坐標為(x,y)的點 ******/
/ ****** lcd_quxian_all()數據采集完成后,顯示曲線 ******/
/ ****************************************************************/
#define PORTX PORTA
#define DDRX DDRA
#define PINX PINA
#define scl 3
#define sda 2
#define lcdclk_set PORTX|=BIT(scl) //液晶顯示屏時鐘
#define lcdclk_low PORTX&=~BIT(scl)
#define lcdclk_out DDRX|=BIT(scl)
#define lcdclk_in DDRX&=~BIT(scl)
#define lcdsda_set PORTX|=BIT(sda) //液晶顯示屏數據
#define lcdsda_low PORTX&=~BIT(sda)
#define lcdsda_out DDRX|=BIT(sda)
#define lcdsda_in DDRX&=~BIT(sda)
#define lcdsda_data PINX //讀取
double yc=1; //必須為全局變量
unsigned char LCD_Y,LCD_X,COUNT3,COUNT2,COUNT1,*p,huancun[64][16]={0};
unsigned int hang;
double box,shuju[512]={
01,02,03,04,05,06,07,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,41,41,40,39,38,37,36,35,34,33,
32,31,30,30,31,32,33,32,31,30,29,28,27,26,24,22,23,29,30,32,34,36,38,40,42,39,
39,44,46,48,50,51,52,53,54,55,56,57,58,59,60,60,60,60,61,60,59,56,55,54,53,52,
51,48,47,46,45,44,43,40,38,35,32,31,30,28,26,22,20,19,18,17,15,13,12,11,
01,02,03,04,05,06,07,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,41,41,40,39,38,37,36,35,34,33,
32,31,30,30,31,32,33,32,31,30,29,28,27,26,24,22,23,29,30,32,34,36,38,40,42,39,
39,44,46,48,50,51,52,53,54,55,56,57,58,59,60,60,60,60,61,60,59,56,55,54,53,52,
51,48,47,46,45,44,43,40,38,35,32,31,30,28,26,22,20,19,18,17,15,13,12,11,
01,02,03,04,05,06,07,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,41,41,40,39,38,37,36,35,34,33,
32,31,30,30,31,32,33,32,31,30,29,28,27,26,24,22,23,29,30,32,34,36,38,40,42,39,
39,44,46,48,50,51,52,53,54,55,56,57,58,59,60,60,60,60,61,60,59,56,55,54,53,52,
51,48,47,46,45,44,43,40,38,35,32,31,30,28,26,22,20,19,18,17,15,13,12,11,
01,02,03,04,05,06,07,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,41,41,40,39,38,37,36,35,34,33,
32,31,30,30,31,32,33,32,31,30,29,28,27,26,24,22,23,29,30,32,34,36,38,40,42,39,
39,44,46,48,50,51,52,53,54,55,56,57,58,59,60,60,60,60,61,60,59,56,55,54,53,52,
51,48,47,46,45,44,43,40,38,35,32,31,30,28,26,22,20,19,18,17,15,13,12,11
};
/ *******************************************************/
/ ****** 函數名稱: send_data () ******/
/ ****** 功 能: 寫入字節數據 ******/
/ ****** ******/
/ ****** 參 數: unsigned char data ******/
/ ****** 返回值 : 無 ******/
/ *******************************************************/
void send_data(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++) //循環8次
{
lcdclk_low; //置低CLK
if(data&0x80) //判斷數據極性
lcdsda_set; //如果數據為1置高
else
lcdsda_low; //否則置低
data<<=1; //右移一位
lcdclk_set; //置高CLK
}
}
/ *******************************************************/
/ ****** 函數名稱: wr_command() ******/
/ ****** 功 能: 向LCD寫入控制字 ******/
/ ****** ******/
/ ****** 參 數: com ******/
/ ****** 返回值 : 無 ******/
/ *******************************************************/
void wr_command(unsigned char data)
{
send_data(0xf8); //命令字:寫命令
send_data(data&0xf0); //寫命令字高4位
send_data(data<<4); //寫命令字低4位
delay_nus(5);
}
/ *******************************************************/
/ ****** 函數名稱:wr_byte() ******/
/ ****** 功 能:向LCD中寫入要顯示的漢字字符等 ******/
/ ****** ******/
/ ****** 參 數:unsigned char x ******/
/ ****** 返回值 :無 ******/
/ *******************************************************/
void wr_byte(unsigned char data)
{
send_data(0xfa); //命令字:寫數據
send_data(data&0xf0); //寫數據高4位
send_data(data<<4); //寫數據低4位
delay_nus(5);
}
/ *******************************************************/
/ ****** 函數名稱: setadress() ******/
/ ****** 功 能: 寫入要顯示出的字的位置 ******/
/ ****** ******/
/ ****** 參 數: unsigned char x, unsigned char y ***/
/ ****** 返回值 : 無 ******/
/ *******************************************************/
void setaddress(unsigned char x, unsigned char y)
{
unsigned char move;
if(x==1)
{ move=0x80 + y-1; }
if(x==2)
{ move=0x90 + y-1; }
if(x==3)
{ move=0x88 + y-1; }
if(x==4)
{ move=0x98 + y-1; }
wr_command(move);
delay_nus(5);
}
/ **************************************************************/
/ ****** 函數名稱:LCD_write(unsigned char x, unsigned ******/
/ ****** char y, unsigned char *p) ******/
/ ****** 功 能:向LCD的任意位置寫入任意字符 ******/
/ ****** ******/
/ ****** 參 數: unsigned char x, unsigned char y, ******/
/ ****** unsigned char *p ******/
/ **************************************************************/
void LCD_write(unsigned char x, unsigned char y, unsigned char *p)
{
setaddress(x,y);
while(*p)
{
wr_byte(*p);
p++;
}
}
/ ************************************************************/
/ ****** 函數名稱: lcd_check() ******/
/ ****** 功 能: 點亮全屏,檢查壞點 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_check(void)
{
unsigned char x,y;
for(x=0;x<16;x++)
for(y=0;y<32;y++)
{
LCD_Y=y+0x80; //行地址
LCD_X=x+0x80; //列地址
photo_ready(); //寫入地址
wr_byte(0xff); //所有DGRAM寫1,全亮
wr_byte(0xff);
}
wr_command(0x36); //打開圖形顯示
wr_command(0x30); //進入基本指令動作
}
/ *******************************************************/
/ ****** 函數名稱: photo_ready() ******/
/ ****** 功 能: 顯示圖形前的準備 ******/
/ ****** 輸入繪圖地址 ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ *******************************************************/
void photo_ready(void)
{
wr_command(0x34);//使用擴充指令,但是關閉繪圖
wr_command(LCD_Y);//送地址Y
wr_command(LCD_X); //送地址X
wr_command(0x30); //返回基本指令動作,向內部寫數據
}
/ ************************************************************/
/ ****** 函數名稱: lcd_clr_GDRAM() ******/
/ ****** 功 能: 清除上次圖像GDRAM和虛擬緩存 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_clr_GDRAM()
{
unsigned char x,y,i,j;
for(x=0;x<16;x++)
for(y=0;y<32;y++)
{
LCD_Y=y+0x80; //行地址
LCD_X=x+0x80; //列地址
photo_ready(); //寫入地址
wr_byte(0x00); //所有DGRAM寫0,清屏
wr_byte(0x00);
}
for(i=0;i<=63;i++) //虛擬緩存清零
for(j=0;j<=15;j++)
{huancun[i][j]=0;}
wr_command(0x36); //打開圖形顯示
wr_command(0x30); //進入基本指令動作
}
/ ************************************************************/
/ ****** 函數名稱: photo_disp(const unsigned char *s) ******/
/ ****** 功 能: 顯示圖形子程序 ******/
/ ****** ******/
/ ****** 參 數: 圖形數組指針S ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void photo_disp(const unsigned char *s)//定義一個指針型的變量 ,s指的是要顯示出的圖形
{
COUNT3=0X02; //2,1共兩次
LCD_X=0X80; //設定起始的X地址,當為圖形顯示出時候,默認的將128*64的液晶模塊
//分成了32*16的16塊,地址分別是80H-8FH,顯示時候可分為兩個部分給
//數據.這時就可以看為32*128的兩塊。
//注意圖形顯示時候的每一個字節地址所對應的位置。每行共八個模塊,
//共送兩次開始地址//80H和88H
for (;COUNT3!=0;COUNT3--) //循環兩次,第一次80H-87H(8塊);第二次88H-8FH(8塊)
{
LCD_Y=0X80;
COUNT2=0X20;//送32行
for (;COUNT2!=0;COUNT2--)
{
COUNT1=0X10;//16個每行
photo_ready(); //寫入數據前的準備,在寫入數據前,必須進入基本指令模式
for (;COUNT1!=0;COUNT1--)
{
wr_byte(*s++);
}
LCD_Y+=1; //80H一共加三二次,共三二行,
}
LCD_X=0X88;
}
wr_command(0x36); //打開圖形顯示
wr_command(0x30); //進入基本指令動作
}
/ ************************************************************/
/ ****** 函數名稱: photo_clr() ******/
/ ****** 功 能: 顯示圖形漸漸消失子程序 ******/
/ ****** ******/
/ ****** 參 數: 圖形數組指針S ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void photo_clr(void)
{
unsigned char i,j;
for(i=0;i<=63;i++)
{
if(i/32) {LCD_X=0x80;} //y只能取0-63,x只能取0-127
else {LCD_X=0x88;}
LCD_Y=0X80+31-i2; //確定Y坐標
photo_ready(); //輸入x,y到LCD
for(j=0;j<=16;j++)
{
wr_byte(0x00);
}
delay_nms(250); //
wr_command(0x36); //打開圖形顯示
wr_command(0x30); //進入基本指令動作
}
}
/ *******************************************************/
/ ****** 函數名稱:LCD_int() ******/
/ ****** 功 能:初始化LCD ******/
/ ****** ******/
/ ****** 參 數:無 ******/
/ ****** 返回值 :無 ******/
/ *******************************************************/
void LCD_int()
{
lcdclk_out;
lcdsda_out;
lcdclk_set;
lcdsda_set;
wr_command(0x30);
delay_nus(5);
wr_command(0x0c);
delay_nus(5);
wr_command(0x01);
delay_nus(5);
wr_command(0x14);
delay_nus(5);
lcd_clr_GDRAM(); //清除上次圖像GDRAM
delay_nus(5);
}
/ *************************************************************/
/ ****** 函數名稱: lcd_quxian_int() ******/
/ ****** 功 能: 畫曲線的坐標軸 ******/
/ ****** ******/
/ ****** 參 數: ******/
/ ****** 返回值 : ******/
/ *************************************************************/
void lcd_quxian_int(void)
{
unsigned char i,j;
lcd_clr_GDRAM(); //清除上次圖像GDRAM
for(i=0;i<=127;i++) //畫x軸
{
lcd_wrpot(i,0,1);
}
for(i=0;i<=63;i++) //畫y軸
{
lcd_wrpot(0,i,1);
}
for(j=1;j<=2;j++) //畫y軸,10的點
{
for(i=1;i<=6;i++)
{
lcd_wrpot(j,i*10,1);
}
}
for(j=1;j<=2;j++) //畫x軸,10的點
{
for(i=1;i<=12;i++)
{
lcd_wrpot(i*10,j,1);
}
}
}
const unsigned char huitu[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF8,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFD,0xFF,0xFF,0xE0,0x07,0xFF,0xFC,0x1F,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xE0,0x7F,0xFF,0xE0,0x07,0xFF,0xF8,0x07,0xFC,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xC0,0x3F,0xFF,0xF0,0x0F,0xFF,0xF0,0x07,0xFF,0x00,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xC0,0x1F,0xFF,0xF8,0x1F,0xFF,0xE0,0x07,0xFF,0xC0,0x00,0x00,
0x00,0x00,0x1F,0xFF,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0xF0,0x00,0x00,
0x00,0x00,0x7F,0xFF,0x80,0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0xF8,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,0x07,0xFF,0xFC,0x00,0x00,
0x00,0x01,0xFF,0xFF,0xC0,0x1F,0xFF,0xFE,0x7F,0xFF,0xF0,0x0F,0xFF,0xFE,0x00,0x00,
0x00,0x03,0xFF,0xFF,0xE0,0x3F,0xFF,0xF0,0x07,0xFF,0xFC,0x1F,0xFF,0xFF,0x00,0x00,
0x00,0x03,0xFF,0xFF,0xF8,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,
0x00,0x0F,0xFF,0xFF,0xF0,0x7F,0xFF,0x0F,0xF8,0x7F,0xFF,0x7F,0xFF,0xFF,0xC0,0x00,
0x00,0x0F,0xFF,0xFF,0x80,0x0F,0xFE,0x3F,0xFC,0x3F,0xF8,0x03,0xFF,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xFE,0x00,0x07,0xFC,0x3F,0xFE,0x3F,0xE0,0x00,0xFF,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xFC,0x1F,0xC3,0xFC,0x7F,0xFF,0x1F,0xC3,0xF0,0x7F,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xF8,0x7F,0xF1,0xF8,0xFF,0xFF,0x1F,0x8F,0xFC,0x3F,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xF0,0xFF,0xFC,0xF8,0xFF,0xFF,0x1F,0x1F,0xFE,0x1F,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xF9,0xFF,0xFC,0x71,0xFF,0xFF,0x8E,0x7F,0xFF,0x1F,0xFF,0xF0,0x00,
0x00,0x1F,0xFF,0xF3,0xFF,0xFE,0x79,0xFF,0xFF,0xBC,0x7F,0xFF,0x9F,0xFF,0xF0,0x00,
0x00,0x1F,0xFF,0xF3,0xFF,0xFE,0x3F,0xFF,0xFF,0xBC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,
0x00,0x1F,0xFF,0xE7,0xFF,0xFF,0x1F,0xFF,0xFF,0xB8,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,
0x00,0x1F,0xFF,0xE7,0xFF,0xFF,0x9F,0xFF,0xFF,0xF9,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,
0x00,0x0F,0xFF,0xE7,0xFF,0xFF,0x8F,0xFF,0xFF,0xF3,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,
0x00,0x0F,0xFF,0xE7,0xFF,0xFF,0xCF,0xFF,0xFF,0xE3,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,
0x00,0x07,0xFF,0xE7,0xFF,0xFF,0xE7,0xFF,0xFF,0xE7,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,
0x00,0x07,0xFF,0xE7,0xFF,0xFF,0xE3,0xFF,0xFF,0xC7,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,
0x00,0x03,0xFF,0xF7,0xFF,0xFF,0xF3,0xFF,0xFF,0x8F,0xFF,0xFF,0xCF,0xFF,0x00,0x00,
0x00,0x03,0xFF,0xF7,0xFF,0xFF,0x71,0xFF,0xFF,0x9E,0xFF,0xFF,0xCF,0xFF,0x00,0x00,
0x00,0x61,0xFF,0xF3,0xFF,0xFE,0x79,0xFF,0xFF,0x3C,0xFF,0xFF,0xDF,0xFE,0x40,0x00,
0x00,0x7C,0xFF,0xF9,0xFF,0xFE,0x3C,0x7F,0xFE,0x3C,0xFF,0xFF,0x9F,0xFD,0x88,0x00,
0x04,0xBF,0xFF,0xF1,0xFF,0xF8,0x7C,0x7F,0xFC,0x7C,0x3F,0xFF,0x3F,0xF9,0xF6,0x00,
0x06,0xFF,0xBF,0xF8,0x7F,0xF0,0xFE,0x1F,0xF8,0xFE,0x1F,0xFE,0x3F,0xF3,0xFE,0x00,
0x06,0xDB,0x8F,0xFC,0x3F,0xE0,0xFF,0x0F,0xE1,0xFE,0x0F,0xF8,0x3F,0xCF,0xFD,0x80,
0x03,0xEF,0x07,0xFE,0x07,0x01,0xFF,0x83,0xC3,0xFF,0x03,0xE0,0x7F,0x87,0xFF,0x80,
0x01,0x3E,0x71,0xFF,0x00,0x07,0xFF,0xE0,0x0F,0xFF,0xC0,0x01,0xFE,0x1F,0xFF,0x80,
0x01,0xFE,0xFC,0x7F,0xC0,0x1F,0xFF,0xFF,0xFF,0xFF,0xE0,0x03,0xF8,0x4F,0xFE,0x00,
0x00,0xCD,0xFE,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x1F,0xE0,0x3F,0xFC,0x00,
0x00,0xCB,0xDF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xFF,0xFE,0x00,
0x00,0x07,0x3F,0xC1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x03,0xFC,0x7E,0x00,
0x00,0x0F,0x7F,0x07,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x0F,0xFD,0x00,0x00,
0x00,0x1F,0xF7,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xC3,0xEF,0xC0,0x00,
0x00,0x13,0xFE,0xFE,0x08,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x39,0xCF,0xCD,0xC0,0x00,
0x00,0x01,0xFC,0x3F,0xE7,0xF1,0xFF,0xFF,0xFF,0xFE,0x03,0x3C,0xFE,0xFF,0x80,0x00,
0x00,0x00,0x78,0x1B,0xDF,0xB8,0x21,0xF8,0xF8,0x00,0xDF,0x03,0xE8,0x7B,0x00,0x00,
0x00,0x00,0x20,0xFC,0x7B,0xE1,0xF8,0x07,0x07,0xDD,0xFF,0xFF,0x70,0x38,0x00,0x00,
0x00,0x00,0x07,0xEE,0x0F,0xBD,0xFB,0x77,0x07,0xB8,0x1D,0xFE,0xF0,0xF0,0x00,0x00,
0x00,0x00,0x00,0x0E,0x79,0xE3,0x3F,0xFF,0xE0,0x66,0xFF,0xC7,0x78,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x87,0xFF,0x30,0x7F,0xEF,0xFF,0x77,0x87,0xB8,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x17,0x39,0xFE,0x77,0xEE,0x60,0x7D,0x8B,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0x7F,0xE0,0x60,0x3B,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x76,0x30,0x70,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x07,0xF1,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void lcd_clr(void)
{
wr_command(0x01);
delay_nus(5);
}
/ ************************************************************/
/ ****** 函數名稱: lcd_wrpot(uchar x,unchar y,unchar z)******/
/ ****** 功 能: 點亮坐標為(x,y)的點 ******/
/ ****** z=1時有效(點亮) ******/
/ ****** 參 數: x,y,z ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_wrpot(unsigned char x,unsigned char y,unsigned char z)
{
unsigned char m,n,a[2]; //m,n為確定顯示點位于哪塊后,以塊單元左下角為
//坐標原點,新x,y坐標.數組a[2]用于裝X的兩個8位數
/
/ ****** 函數名稱: lcd_clpot(uchar x,unchar y,unchar z)******/
/ ****** 功 能: 點暗坐標為(x,y)的點 ******/
/ ****** z=1時有效(點暗) ******/
/ ****** 參 數: x,y,z ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_clpot(unsigned char x,unsigned char y,unsigned char z)
{
unsigned char m,n,a[2]; //m,n為確定顯示點位于哪塊后,以塊單元左下角為
//坐標原點,新x,y坐標.數組a[2]用于裝X的兩個8位數
/
/ ****** 函數名稱: lcd_quxian_all(udouble *da) ******/
/ ****** 功 能: 數據采集完成后,顯示曲線 ******/
/ ****** ******/
/ ****** 畫出以數據數組指針da數據為y軸,每 ******/
/ ****** n位數據產生一個點,由左至右畫點. ******/
/ ****** 其中,xc可理解為X軸壓縮系數。C為yc ******/
/ ****** 軸即,每行代表多少 ******/
/ ****** 參 數: *da,xc,yc ******/
/ ****** 返回值 : ******/
/ **************************************************************/
void lcd_quxian_all(double *da,unsigned int xc,double yc)
{
unsigned int i; //必須是INT型
for(i=0;i<=127;i++)
{
lcd_wrpot(i,(unsigned char) (da[i*xc]/yc),1);
}
}
/ **************************************************************/
/ ****** 函數名稱: lcd_send_data(uchar x,uchar y,uint data) ******/
/ ****** 功 能: 數據采集完成后,顯示曲線 ******/
/ ****** ******/
/ ****** 畫出以數據數組指針da數據為y軸,每 ******/
/ ****** n位數據產生一個點,由左至右畫點. ******/
/ ****** 其中,xc可理解為X軸壓縮系數。C為yc ******/
/ ****** 軸即,每行代表多少 ******/
/ ****** 參 數: *da,xc,yc ******/
/ ****** 返回值 : ******/
void lcd_char_data1(unsigned char x,unsigned char y,unsigned char data1,unsigned char data2)
{
unsigned char wy[6];
unsigned int data;
data=data1*100+data2;
data=600000/data;
wy[0]=data/1000+0x30;
wy[1]=(data00)/100+0x30;
wy[2]='.';
wy[3]=(data0)/10+0x30;
wy[4]=data+0x30;
wy[5]=0;
LCD_write(x,y,wy);
}
void lcd_char_data2(unsigned char x,unsigned char y,unsigned char data1,unsigned char data2)
{
unsigned char wy[6];
unsigned int data;
data=data1*100+data2;
data=400000/data;
wy[0]=data/1000+0x30;
wy[1]=(data00)/100+0x30;
wy[2]='.';
wy[3]=(data0)/10+0x30;
wy[4]=data+0x30;
wy[5]=0;
LCD_write(x,y,wy);
}
void lcd_int_data(unsigned char x,unsigned char y,int data)
{
unsigned char wy[7];
if(data>=0) wy[0]='+';
else {wy[0]='-';data=data*(-1);}
wy[1]=data/10000+0x30;
wy[2]=data000/1000+0x30;
wy[3]=data00/100+0x30;
wy[4]=data0/10+0x30;
wy[5]=data+0x30;
wy[6]=0;
LCD_write(x,y,wy);
}
復制代碼
作者:
hongniu
時間:
2015-6-25 23:01
12864曲線顯示增強版——曲線放大功能
主要功能是將已經顯示出來的曲線分成四段,可選擇的分別放大。
廢話不多說,看程序。注釋很清楚。
此程序基于mage128單片機
博客里/+*不能連打,只能在中間加了一個空格,所以復制的時候請將注釋前的空格刪掉。
此程序原創,辛辛苦苦編了幾天的東西,而且還無私的分享給大家,希望大家轉載請注明。
/ ****************************************************************/
/ ******12864曲線放大文件 配合12864文件使用——2009.8.20 追雪*****/
/ ****************************************************************/
/ ****************************************************************/
/ ****** lcd_sup_1() 選擇第一區域,畫邊線 ******/
/ ****** lcd_sup_2() 選擇第二區域,畫邊線 ******/
/ ****** lcd_sup_3() 選擇第三區域,畫邊線 ******/
/ ****** lcd_sup_4() 選擇第四區域,畫邊線 ******/
/ ****** lcd_sup_inte() 開各種中斷,打開放大曲線功能 ******/
/ ****** INIT0_Int() 還原為普通圖 ******/
/ ****** INIT1_Int() 放大曲線圖 ******/
/ ****** INIT2_Int() 左移一個區域 ******/
/ ****** INIT3_Int() 右移一個區域 ******/
/ ****************************************************************/
unsigned int bigpot=0;
#define left 2 //定義中斷號
#define right 3
#define amplify 1
#define reduce 0
/ ************************************************************/
/ ****** 函數名稱: lcd_sup_1() ******/
/ ****** 功 能: 選擇第一區域,畫邊線 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_sup_1()
{
unsigned char i;
if(bigpot==2) //判斷是否從第二區來
{
for(i=1;i<=63;i++) //i=1坐標線不擦
{
lcd_clpot(64,i,1); //擦除第二區右邊線
}
lcd_wrpot(64,(unsigned char) (shuju[256]/yc),1);//補上一步誤擦曲線點
}
else
{
for(i=1;i<=63;i++) //i=1坐標線不畫略微提高速度
{
lcd_wrpot(32,i,1); //直接畫出右邊線
}
}
bigpot=1; //區域標識位設置
EIMSK&=~(1<<left); //關閉左移,防止出現死機
}
/ ************************************************************/
/ ****** 函數名稱: lcd_sup_2() ******/
/ ****** 功 能: 選擇第二區域,畫邊線 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_sup_2(void)
{
unsigned char i;
if(bigpot==3) //判斷是否從第三區來
{
for(i=1;i<=63;i++) //i=1坐標線不擦
{
lcd_clpot(96,i,1); //擦除第三區右邊線
}
lcd_wrpot(96,(unsigned char) (shuju[384]/yc),1);//補上一步誤擦曲線點
for(i=1;i<=63;i++)
{
lcd_wrpot(32,i,1); //畫左邊界
}
}
else
{
for(i=1;i<=63;i++) //i=1坐標線不畫略微提高速度
{
lcd_wrpot(64,i,1); //保證有放大還原時還出區域線
lcd_wrpot(32,i,1);
}
}
bigpot=2; //區域標識位設置
EIMSK|=(1<<left); //打開左移
}
/ ************************************************************/
/ ****** 函數名稱: lcd_sup_3() ******/
/ ****** 功 能: 選擇第三區域,畫邊線 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_sup_3(void)
{
unsigned char i;
if(bigpot==2) //判斷是否從第二區來
{
for(i=1;i<=63;i++) //i=1坐標線不擦
{
lcd_clpot(32,i,1); //擦除第二區左邊線
}
lcd_wrpot(32,(unsigned char) (shuju[128]/yc),1); //補上一步誤擦曲線點
for(i=1;i<=63;i++)
{
lcd_wrpot(96,i,1); //畫右邊界
}
}
else
{
for(i=1;i<=63;i++) //i=1坐標線不畫略微提高速度
{
lcd_wrpot(64,i,1); //保證有放大還原時還出區域線
lcd_wrpot(96,i,1);
}
}
bigpot=3; //區域標識位設置
EIMSK|=(1<<right); //打開右移
}
/ ************************************************************/
/ ****** 函數名稱: lcd_sup_4() ******/
/ ****** 功 能: 選擇第四區域,畫邊線 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_sup_4(void)
{
unsigned char i;
if(bigpot==3) //判斷是否從第三區來
{
for(i=1;i<=63;i++) //i=1坐標線不擦
{
lcd_clpot(64,i,1); //擦除第三區左邊線
}
lcd_wrpot(64,(unsigned char) (shuju[256]/yc),1); //補上一步誤擦曲線點
}
else
{
for(i=1;i<=63;i++) //i=1坐標線不畫略微提高速度
{
lcd_wrpot(96,i,1); //保證有放大還原時還出區域線
}
}
bigpot=4; //區域標識位設置
EIMSK&=~(1<<right);
}
/ ************************************************************/
/ ****** 函數名稱: lcd_sup_inte() ******/
/ ****** 功 能: 初始化,開各種中斷 ******/
/ ****** 同時是打開此功能的函數 ******/
/ ****** 參 數: x,y,z ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
void lcd_sup_inte(void)
{
DDRD=0x00; //對應中斷腳設為上拉輸入
PORTD=0xff;
SEI();
EIMSK|=(1<<left)|(1<<right)|(1<<amplify);//不打開還原,放大
EICRA|=0x00; //經測試,低電平觸發最穩定
}
/ ************************************************************/
/ ****** 函數名稱: INIT0_Int() ******/
/ ****** 功 能: 還原為普通圖 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
#pragma interrupt_handler INIT0_Int:2
void INIT0_Int(void)
{
CLI();
if(bigpot!=0) //不加此句,有問題
{
lcd_clr_GDRAM(); //清除虛擬和硬件緩存
lcd_quxian_int(); //畫坐標軸
lcd_quxian_all(shuju,4,1); //每四個畫一個點,還原曲線
switch(bigpot) //還原后畫出區域邊界
{
case 1: {lcd_sup_1();break;}
case 2: {lcd_sup_2();break;}
case 3: {lcd_sup_3();break;}
case 4: {lcd_sup_4();break;}
default:break;
}
}
EIMSK|=(1<<left)|(1<<right)|(1<<amplify);//打開左右移動,放大
EIMSK&=~(1<<reduce); //關閉還原
SEI();
}
/ ************************************************************/
/ ****** 函數名稱: INIT1_Int() ******/
/ ****** 功 能: 放大曲線圖 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
#pragma interrupt_handler INIT1_Int:3
void INIT1_Int(void)
{
CLI();
if(bigpot!=0)
{
lcd_clr_GDRAM(); //清除虛擬和硬件緩存
lcd_quxian_int(); //畫坐標軸
lcd_quxian_all(&shuju[(bigpot-1)*128],1,1); //從選擇區域的左邊界坐標開始
} //連續畫128個點,放大曲線
EIMSK&=~((1<<left)|(1<<right)|(1<<amplify)); //關閉左右移動,放大
EIMSK|=(1<<reduce); //打開還原
SEI();
}
/ ************************************************************/
/ ****** 函數名稱: INIT2_Int() ******/
/ ****** 功 能: 左移一個區域 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
#pragma interrupt_handler INIT2_Int:4
void INIT2_Int(void)
{
CLI();
if(bigpot>=2||bigpot==0) //判斷區域移動方向
{
switch(bigpot) //畫邊界區域
{
case 0: {lcd_sup_4();break;}
case 2: {lcd_sup_1();break;}
case 3: {lcd_sup_2();break;}
case 4: {lcd_sup_3();break;}
default:break;
}
}
EIMSK|=(1<<amplify); //打開放大
SEI();
}
/ ************************************************************/
/ ****** 函數名稱: INIT3_Int() ******/
/ ****** 功 能: 右移一個區域 ******/
/ ****** ******/
/ ****** 參 數: 無 ******/
/ ****** 返回值 : 無 ******/
/ ************************************************************/
#pragma interrupt_handler INIT3_Int:5
void INIT3_Int(void)
{
CLI();
if(bigpot<=3) //判斷區域移動方向
{
switch(bigpot) //畫邊界區域
{
case 0: {lcd_sup_1();break;}
case 1: {lcd_sup_2();break;}
case 2: {lcd_sup_3();break;}
case 3: {lcd_sup_4();break;}
default:break;
}
}
EIMSK|=(1<<amplify); //打開放大
SEI();
}
復制代碼
作者:
rslgr
時間:
2015-6-29 14:44
樓主寫得真好,學習中
作者:
shiheyu
時間:
2015-7-15 11:14
請問基于51單片機的曲線顯示怎么寫呢?
作者:
stewart_leung
時間:
2015-8-13 19:03
可以可以
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
av成人在线观看
|
久久久久久国产精品
|
欧美久久久久久
|
天天看天天操
|
亚洲国产区
|
国产一区二区精品在线观看
|
日韩中文在线
|
国产精品久久久久久久久久久免费看
|
天天玩天天操天天干
|
日韩在线观看视频一区
|
国产亚洲精品综合一区
|
久久中文一区二区
|
www.伊人.com
|
日韩在线看片
|
国产精品99久久久久久久久久久久
|
亚洲www
|
午夜影院网站
|
亚洲精品乱码久久久久久蜜桃
|
久久99精品久久久久久
|
欧美日韩在线免费
|
xxx视频
|
精品免费国产视频
|
av天天爽
|
黄色在线观看
|
伦理午夜电影免费观看
|
精品自拍视频在线观看
|
久久免费看
|
国产精品一二区
|
色偷偷噜噜噜亚洲男人
|
亚洲网站在线观看
|
成人精品一区
|
欧美二三区
|
欧美一区二区三区在线看
|
久草在线
|
91免费电影
|
午夜一区二区三区
|
久久久久久久久久久爱
|
日韩一区在线播放
|
久久精品一区二区三区四区
|
97国产一区二区
|
免费黄色网址视频
|