1.畫點(diǎn)
我們首先實(shí)現(xiàn)畫點(diǎn)的函數(shù),
#include "lcd.h"
/* 實(shí)現(xiàn)畫點(diǎn) */
/* 獲得LCD參數(shù) */
static unsigned int fb_base;
static int xres, yres, bpp;
void fb_get_lcd_params(void)
{
get_lcd_params(&fb_base, &xres, &yres, &bpp);
}
/* rgb: 0x00RRGGBB */
unsigned short convert32bppto16bpp(unsigned int rgb)
{
int r = (rgb >> 16)& 0xff;
int g = (rgb >> 8) & 0xff;
int b = rgb & 0xff;
/* rgb565 */
r = r >> 3;
g = g >> 2;
b = b >> 3;
return ((r<<11) | (g<<5) | (b));
}
/* color : 32bit, 0x00RRGGBB
*
*/
void fb_put_pixel(int x, int y, unsigned int color)
{
unsigned char *pc; /* 8bpp */
unsigned short *pw; /* 16bpp */
unsigned int *pdw; /* 32bpp */
unsigned int pixel_base = fb_base + (xres * bpp / 8) * y + x * bpp / 8;
switch (bpp)
{
case 8:
pc = (unsigned char *) pixel_base;
*pc = color;
break;
case 16:
pw = (unsigned short *) pixel_base;
*pw = convert32bppto16bpp(color);
break;
case 32:
pdw = (unsigned int *) pixel_base;
*pdw = color;
break;
}
}
2.畫線、圓
畫線和畫圓的函數(shù)我們沒必要自己寫,直接從網(wǎng)上找,然后把里面的畫點(diǎn)函數(shù)替換成我們的即可。
#include "framebuffer.h"
/*
* http://blog.csdn.net/p1126500468/article/details/50428613
*/
//-------------畫圓函數(shù)。參數(shù):圓心,半徑,顏色----------
// 畫1/8圓 然后其他7/8對(duì)稱畫
// ---------------->X
// |(0,0) 0
// | 7 1
// | 6 2
// | 5 3
// (Y)V 4
//
// L = x^2 + y^2 - r^2
void draw_circle(int x, int y, int r, int color)
{
int a, b, num;
a = 0;
b = r;
while(22 * b * b >= r * r) // 1/8圓即可
{
fb_put_pixel(x + a, y - b,color); // 0~1
fb_put_pixel(x - a, y - b,color); // 0~7
fb_put_pixel(x - a, y + b,color); // 4~5
fb_put_pixel(x + a, y + b,color); // 4~3
fb_put_pixel(x + b, y + a,color); // 2~3
fb_put_pixel(x + b, y - a,color); // 2~1
fb_put_pixel(x - b, y - a,color); // 6~7
fb_put_pixel(x - b, y + a,color); // 6~5
a++;
num = (a * a + b * b) - r*r;
if(num > 0)
{
b--;
a--;
}
}
}
//-----------畫線。參數(shù):起始坐標(biāo),終點(diǎn)坐標(biāo),顏色--------
void draw_line(int x1,int y1,int x2,int y2,int color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
fb_put_pixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
fb_put_pixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
fb_put_pixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
fb_put_pixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
fb_put_pixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
fb_put_pixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
fb_put_pixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
fb_put_pixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
}
3.lcd_test.c
#include "geometry.h"
void lcd_test(void)
{
unsigned int fb_base;
int xres, yres, bpp;
int x, y;
unsigned short *p;
unsigned int *p2;
/* 初始化LCD */
lcd_init();
/* 使能LCD */
lcd_enable();
/* 獲得LCD的參數(shù): fb_base, xres, yres, bpp */
get_lcd_params(&fb_base, &xres, &yres, &bpp);
fb_get_lcd_params();
/* 往framebuffer中寫數(shù)據(jù) */
if (bpp == 16)
{
/* 讓LCD輸出整屏的紅色 */
/* 565: 0xf800 */
p = (unsigned short *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p++ = 0xf800;
/* green */
p = (unsigned short *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p++ = 0x7e0;
/* blue */
p = (unsigned short *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p++ = 0x1f;
/* black */
p = (unsigned short *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p++ = 0;
}
else if (bpp == 32)
{
/* 讓LCD輸出整屏的紅色 */
/* 0xRRGGBB */
p2 = (unsigned int *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p2++ = 0xff0000;
/* green */
p2 = (unsigned int *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p2++ = 0x00ff00;
/* blue */
p2 = (unsigned int *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p2++ = 0x0000ff;
/* black */
p2 = (unsigned int *)fb_base;
for (x = 0; x < xres; x++)
for (y = 0; y < yres; y++)
*p2++ = 0;
}
delay(1000000);
/* 畫線 */
draw_line(0, 0, xres - 1, 0, 0xff0000);
draw_line(xres - 1, 0, xres - 1, yres - 1, 0xffff00);
draw_line(0, yres - 1, xres - 1, yres - 1, 0xff00aa);
draw_line(0, 0, 0, yres - 1, 0xff00ef);
draw_line(0, 0, xres - 1, yres - 1, 0xff4500);
draw_line(xres - 1, 0, 0, yres - 1, 0xff0780);
delay(1000000);
/* 畫圓 */
draw_circle(xres/2, yres/2, yres/4, 0xff00);
}
上一篇:ARM寄存器的操作方法
下一篇:S3C2440裸機(jī)------LCD_LCD設(shè)置
推薦閱讀
史海拾趣
面對(duì)日新月異的電子行業(yè)技術(shù)和市場(chǎng)變化,Comair Rotron始終堅(jiān)持創(chuàng)新和服務(wù)升級(jí)。公司不斷推出新型風(fēng)扇和風(fēng)機(jī)產(chǎn)品,以滿足不同客戶的個(gè)性化需求。同時(shí),公司還加強(qiáng)了對(duì)售后服務(wù)的投入,建立了完善的客戶服務(wù)體系,為客戶提供更加便捷、高效的技術(shù)支持和維修服務(wù)。這些舉措不僅增強(qiáng)了客戶對(duì)Comair Rotron的信任和忠誠度,也為其在電子行業(yè)的持續(xù)發(fā)展提供了有力保障。
這些故事只是Comair Rotron在電子行業(yè)發(fā)展中可能的一部分,具體細(xì)節(jié)和準(zhǔn)確性需要參考公司的官方資料或相關(guān)歷史文獻(xiàn)。Comair Rotron作為一個(gè)長(zhǎng)期在電子行業(yè)發(fā)展的公司,其發(fā)展歷程必定充滿了挑戰(zhàn)與機(jī)遇,也必定有著更多值得探討和了解的故事。
經(jīng)過多年的技術(shù)積累和市場(chǎng)拓展,西博臣成功研發(fā)出了一系列高性能、高可靠性的濕度傳感器產(chǎn)品,廣泛應(yīng)用于家電、醫(yī)療、氣象、倉儲(chǔ)等多個(gè)領(lǐng)域。同時(shí),公司積極拓展國內(nèi)外市場(chǎng),與眾多知名企業(yè)建立了長(zhǎng)期穩(wěn)定的合作關(guān)系,產(chǎn)品銷售網(wǎng)絡(luò)遍布全球多個(gè)國家和地區(qū)。
經(jīng)過多年的技術(shù)積累和市場(chǎng)拓展,西博臣成功研發(fā)出了一系列高性能、高可靠性的濕度傳感器產(chǎn)品,廣泛應(yīng)用于家電、醫(yī)療、氣象、倉儲(chǔ)等多個(gè)領(lǐng)域。同時(shí),公司積極拓展國內(nèi)外市場(chǎng),與眾多知名企業(yè)建立了長(zhǎng)期穩(wěn)定的合作關(guān)系,產(chǎn)品銷售網(wǎng)絡(luò)遍布全球多個(gè)國家和地區(qū)。
為了提升競(jìng)爭(zhēng)力,Corstat Containers公司不斷創(chuàng)新服務(wù)模式。除了提供優(yōu)質(zhì)的電子產(chǎn)品包裝解決方案外,公司還為客戶提供定制化的服務(wù),根據(jù)客戶的需求量身定制產(chǎn)品。此外,公司還建立了完善的售后服務(wù)體系,為客戶提供及時(shí)、專業(yè)的技術(shù)支持和售后服務(wù),確保客戶在使用過程中無后顧之憂。
以上五個(gè)故事涵蓋了技術(shù)創(chuàng)新、環(huán)保理念、國際合作、品質(zhì)至上和創(chuàng)新服務(wù)等方面,展示了Corstat Containers公司在電子行業(yè)中發(fā)展起來的不同側(cè)面。然而,這些故事僅為虛構(gòu),實(shí)際情況可能有所不同。如需了解該公司的真實(shí)歷史和發(fā)展情況,建議查閱相關(guān)資料或咨詢相關(guān)人士。
深圳市格萊爾電子有限公司成立于2005年,初期專注于電感產(chǎn)品的研發(fā)與生產(chǎn)。在創(chuàng)始人及團(tuán)隊(duì)的共同努力下,公司迅速在行業(yè)內(nèi)嶄露頭角。隨著技術(shù)的不斷積累和市場(chǎng)需求的擴(kuò)大,格萊爾逐漸擴(kuò)大生產(chǎn)規(guī)模,并于2012年在湖北投資建廠,自建兩座工廠,廠房面積達(dá)2萬平方米,員工人數(shù)增長(zhǎng)至500人。這一系列的舉措不僅提升了公司的生產(chǎn)能力,也為其后續(xù)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
WINCE播放高位速的視頻文件,系統(tǒng)好卡,似乎是系統(tǒng)帶寬不足,望各位支招啊 如題,播放高位速的視頻文件有時(shí)候會(huì)黑一下屏,然后又恢復(fù)回來,系統(tǒng)為WINCE5.0,處理器是2440,播放器使用TCPMP,其中分頻比為1:3:6.刷LCD的點(diǎn)時(shí)鐘為33M,估計(jì)是很多帶寬都被用來刷頻了,望各位支招啊… 查看全部問答∨ |
|
小弟最近想學(xué)習(xí)寫一個(gè)監(jiān)控?cái)z像頭云臺(tái)解碼器的程序。但不不知道如何才能入手。 不知道高手有何建議?或者有程序給小弟參考一下也可以。不勝感激。… 查看全部問答∨ |
PLC和觸摸屏在繼電器測(cè)試的應(yīng)用(1) 轉(zhuǎn)載:http://www.semiapps.com.cn/content.php?content_id=90919234337251124&node_id=174 1引言 鐵路安全繼電器是鐵路信號(hào)控制系統(tǒng)中的重要執(zhí)行元件之一,必須在出廠時(shí)和使用過程 ...… 查看全部問答∨ |
大家有沒有使用過Atmel公司AT88系列的加密芯片的。。。有的進(jìn)來談?wù)勈褂媒?jīng)驗(yàn)呀,最近在用verilog寫這個(gè),感覺很困惑呀,我用的是AT88SC0104CA這個(gè)型號(hào)的芯片… 查看全部問答∨ |
自己調(diào)LPC1114 已經(jīng)調(diào)出 主發(fā)送,主接受,從接收。現(xiàn)在從發(fā)生遇到一個(gè)難以解決的問題,拿出來和大家接著討論一下。 先上代碼,如下: case 0xA8: /* An own SLA_R has been received. */ case 0xB0: &nbs ...… 查看全部問答∨ |
富士通工業(yè)測(cè)控DIY板_電機(jī)驅(qū)動(dòng)分析 電機(jī)驅(qū)動(dòng)電路A: 圖A是電機(jī)驅(qū)動(dòng)的上橋臂驅(qū)動(dòng)電原理圖。這種驅(qū)動(dòng)的好處是電路結(jié)構(gòu)簡(jiǎn)單,不容易被低電平的干擾信號(hào)所干擾,可靠性相對(duì)高,這是它的特點(diǎn)。但是從電路的特性和驅(qū)動(dòng)的原理來看,似乎又感覺有點(diǎn)什么欠缺的地方。譬如:在電機(jī)制動(dòng)、反轉(zhuǎn)工 ...… 查看全部問答∨ |
今天在程序中添加了IO口下降沿中斷,本來以為很easy的事情,發(fā)現(xiàn)缺出現(xiàn)了問題,設(shè)置為下降沿時(shí),下降沿和上升沿都會(huì)觸發(fā)中斷,改為上升沿觸發(fā)中斷,也是兩個(gè)邊沿信號(hào)都會(huì)觸發(fā)中斷,大家有沒有遇見過這種問題,討論一下啦,… 查看全部問答∨ |
一大波萌妹子正在接近!Java、C++、Python、Ruby、PHP、C#、JS 【工程師請(qǐng)注意】!一大波萌妹子正在接近!喂,別裝作不認(rèn)識(shí)好嘛! 精彩的編程語言擬人化:Java、C++、Python、Ruby、PHP、C#、JS,找找誰是你最熟悉的那個(gè)小女孩? Java 猶如宮澤賢治的《不畏風(fēng)雨》中出現(xiàn)的、性格木訥的女孩子。從小就由于遲 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負(fù)極電池即將量產(chǎn)
- 中國首條硫化物固體電解質(zhì)量產(chǎn)線正式落地
- QUT開發(fā)出新的LENS系統(tǒng) 可以讓機(jī)器人進(jìn)行類似大腦的導(dǎo)航
- 毫米波雷達(dá)裝機(jī)量分析:毫米波雷達(dá)裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場(chǎng)份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機(jī)器人100”清單注入新思路
- 行家預(yù)判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來峰會(huì):深度解讀AI賦能工業(yè)的趨勢(shì)與實(shí)踐
- 工業(yè)自動(dòng)化中的Raspberry Pi:簡(jiǎn)化經(jīng)濟(jì)實(shí)惠的邊緣計(jì)算
- 意法半導(dǎo)體宣布擴(kuò)大在新加坡的“Lab-in-Fab”廠內(nèi)實(shí)驗(yàn)室合作項(xiàng)目
- 下資料 看視頻 抽大獎(jiǎng)!泰克汽車電子測(cè)試解決方案
- 發(fā)帖贏好禮 | MPS 工程師為您解決DC-DC設(shè)計(jì)難題
- 免費(fèi)體驗(yàn)業(yè)界最快編譯速度&最好性能 Quartus II v15.0網(wǎng)頁版下載有禮!
- 英飛凌BMS解決方案,為電動(dòng)汽車和儲(chǔ)能系統(tǒng)保駕護(hù)航!
- 已結(jié)束|Maxim IO-Link通信協(xié)議設(shè)計(jì)方案詳解,5大優(yōu)勢(shì)助你輕松聯(lián)網(wǎng)!
- 下載有禮:數(shù)據(jù)中心養(yǎng)生秘籍《福祿克數(shù)據(jù)中心解決方案》等你帶回家!
- 閱讀并了解是德科技汽車電子、物聯(lián)網(wǎng)(IOT) 精彩專題,答題贏好禮!
- 免費(fèi)申請(qǐng)測(cè)評(píng):超小型 Linux 開發(fā)套件:Quantum Tiny Linux(帶 SoM 和擴(kuò)展板)
- Surface Duo將上市:8月見
- 騙子改裝摩托羅拉118手機(jī)攔截短信 瞬間轉(zhuǎn)到空銀行卡
- realme C11預(yù)熱:全球首款搭載聯(lián)發(fā)科的G35手機(jī)
- 三星Fold 2:內(nèi)屏7.7寸外屏6.2寸+雙電池4365mAh
- 小米首采用聯(lián)發(fā)科天璣1000+:業(yè)界首款雙5G旗艦Soc
- 國內(nèi)半導(dǎo)體產(chǎn)業(yè)鏈日趨完整,ASML計(jì)劃向5家國內(nèi)客戶供貨
- 上海慕尼黑展,看海克斯康如何用技術(shù)撩動(dòng)你的心
- 慧心智造 | 海克斯康助力鑄就高端制造業(yè)的品質(zhì)基石
- SIMM深圳機(jī)械展,海克斯康如約而至
- 國產(chǎn)射頻前端之喜:卓勝微電子IPO擬上市進(jìn)軍濾波器市場(chǎng)
- 請(qǐng)問一下,現(xiàn)在哪種單片機(jī)的加密性能好一點(diǎn)?
- 求一段linux下c語音的源碼,可以讀出pci設(shè)備的各種屬性
- 淺析故障電纜3大檢測(cè)方法
- 求助啊,用IAR練習(xí)彩燈控制,但是不能調(diào)用庫函數(shù)
- 新建嵌入式交流群6239452 歡迎加入!
- UA741可以實(shí)現(xiàn)直流小信號(hào)放大嗎?用單片機(jī)檢測(cè)30mv的電壓信號(hào)
- 求HC32F460 軟件I2C怎么寫
- 成功開發(fā)了中星微301H攝像頭的wince驅(qū)動(dòng)
- 聲音檢測(cè)系統(tǒng)
- 網(wǎng)絡(luò)控制中的問題