深入理解ARM體系架構(gòu)(S3C6410)---ad轉(zhuǎn)化實(shí)例
本文引用地址:http://www.ex-cimer.com/article/201611/317830.htm
lcd相關(guān)代碼:
lcd字符顯示子程序:
ad轉(zhuǎn)化器相關(guān)代碼:
[cpp] view plaincopyprint?
- void
adc_init() - {
char preScaler = 66500000/2500000 - 1; //PCLK=66M rADCCON = (1<<14)|(preScaler<<6)|(0<<3)|(0<<2);//通道AIN0 // rADCCON =0x44c1;//通道AIN0 - }
- int
read_adc() - {
rADCCON |= 0x01; //start ADC while(rADCCON & 0x1); //check if Enable_start is low while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high return ( (int)rADCDAT0 & 0x3ff ); - }
- void
delay_adc() - {
int i,j; for(i=0;i<10000000;i++) for(j=0;j>10000000;j++); - }
lcd相關(guān)代碼:
初始化子程序:
[cpp] view plaincopyprint?
- void
LCD_Init(void) - {
//設(shè)置LCD調(diào)光 //rGPFCON |= (1<<30); //設(shè)置LCD調(diào)光管腳GPF15(PWM1)為輸出 //rGPFDAT |= (1<<15); //rGPFDAT = 0x00002000; //rGPFPUD &= ~(1<<30); //rGPFPUD = 0x00000000; //設(shè)置VD0~15 rGPICON = 0xaaaaaaaa; //設(shè)置GPI0~15為L(zhǎng)CD VD0~15 rGPIPUD = 0xffffffff; //設(shè)置VD16~23和HSYNC、VSYNC、VDEN、VCLK rGPJCON = 0x00aaaaaa; rGPJPUD = 0xffffffff; rWINCON0 &= ~(1<<0); //LCD寄存器設(shè)置 rSPCON &= (~0x3); rSPCON |= (1<<0); //設(shè)置RGBI/F配置 rMIFPCON &= ~(1<<3); //設(shè)置LCD支路為一般模式 rVIDCON0 = (0<<29)|(0<<26)|(0<<17)|(1<<16)|(9<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2); rVIDCON1 = 1<<7; //1=RGB類型LCD設(shè)備在VCLK上升沿得到視頻數(shù)據(jù) //設(shè)置屏的時(shí)序 rVIDTCON0 = (0x00<<16)|(0x00<<8)|(0x02<<0); rVIDTCON1 = (0x2d<<16)|(0x04<<8)|(0x06<<0); rVIDTCON2 = (271<<11)|(479<<0); //設(shè)置窗口格式 rWINCON0 = 11<<2; //設(shè)置24BPP //設(shè)置窗口位置 rVIDOSD0A = (0<<11)|(0<<0); rVIDOSD0B = (479<<11)|(271<<0); rVIDOSD0C = (((480*272)&0xffffff)<<0); //4.3屏幕分辨率480*272 //設(shè)置Window1的開始和結(jié)束的緩存地址與地址在內(nèi)存中的存放地址以及緩存的大小 rVIDW00ADD0B0 = ((addr>>24)<<24)|(addr&0xffffff); rVIDW00ADD1B0 = (addr&0xffffff + 480*272); rVIDW00ADD2 = (0<<13)|(480<<0); //設(shè)置抖動(dòng) rDITHMODE=(1<<5)|(1<<3)|(1<<1)|(1<<0); //開顯示 rVIDCON0 |= (3<<0); rWINCON0 |= (1<<0); - }
lcd字符顯示子程序:
[cpp] view plaincopyprint?
- void
Paint_text(unsigned int x, unsigned int y, unsigned int color, unsigned char ch[], unsigned int lengx,int lengy){ int i, j, test, t = -1; for(i = 0; i < lengy; i++){ for(j = 0; j < lengx; j++){ if(j%8 == 0){ test = 0x80; t++; } if(ch[t] & test) LCD_BUFFER[y+i][x+j] = color; else LCD_BUFFER[y+i][x+j] = 0xffffff; test >>= 1; } } - }
頭文件中字符數(shù)據(jù)定義:
[cpp] view plaincopyprint?
- unsigned
char charnum[10][16]={ - {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
- {0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},
- {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},
- {0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
- {0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00},
- {0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
- {0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
- {0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},
- {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},
- {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00}};
- unsigned
char charnumc[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00}; - unsigned
char charnumo[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00}; - unsigned
char charnumn[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00}; - unsigned
char charnumv[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x10,0x10,0x00,0x00}; - unsigned
char charnume[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x40,0x42,0x3C,0x00,0x00}; - unsigned
char charnumr[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x32,0x20,0x20,0x20,0x20,0xF8,0x00,0x00}; - unsigned
char charnums[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x40,0x3C,0x02,0x42,0x7C,0x00,0x00}; - unsigned
char charnumi[]={0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00};
主函數(shù)程序:
[cpp] view plaincopyprint?
- adc_init();
- LCD_Init();
- Paint_background(0xffffff,0,0,480,272);
- while(1)
- {
- adc_data
= read_adc(); - adc_data
= (adc_data*32226); - adc_data_tmp[0]
= adc_data/100000/100; - //adc_data_tmp[1]
= ((adc_data/100)0000)/10000; - adc_data_tmp[1]
= adc_data000000/1000000; - adc_data_tmp[2]
= adc_data00000/100000; - adc_data_tmp[3]
= adc_data0000/10000; - adc_data_tmp[4]
= adc_data000/1000; - adc_data_tmp[5]
= adc_data00/100; - adc_data_tmp[6]
= adc_data0/10; - adc_data_tmp[7]
= adc_data; - Paint_text(124+8*0,
20, 0x0,charnum[adc_data_tmp[0]],8, 16); - Paint_text(124+8*1,
20, 0x0,charnum[adc_data_tmp[1]],8, 16); - Paint_text(124+8*2,
20, 0x0,charnum[adc_data_tmp[2]],8, 16); - Paint_text(124+8*3,
20, 0x0,charnum[adc_data_tmp[3]],8, 16); - Paint_text(124+8*4,
20, 0x0,charnum[adc_data_tmp[4]],8, 16); - Paint_text(124+8*5,
20, 0x0,charnum[adc_data_tmp[5]],8, 16); - Paint_text(124+8*6,
20, 0x0,charnum[adc_data_tmp[6]],8, 16); - Paint_text(124+8*7,
20, 0x0,charnum[adc_data_tmp[7]],8, 16); - delay_adc();
- }
評(píng)論