
ATmega168のADC0にCdS(明るさのセンサ)を接続し、AD値を取る。そのAD値をグラフとテキストにしてLCDに描画した。
小型LCD→Dontronics :: 4d-Micro-LCD Old
SourceCode, hex, Makefile(avr-gcc 3.4.6)
ここまでに作った関数だけで全部できた。
引き続き。ドントロニクスの小型LCDをいじってます。
文字列を表示する関数 lcd_sendStr()、文字1つを表示する関数 lcd_sendTextを作りました
■文字列関数
/*文字を表示する*/
voidlcd_sendText(chart,charcolumn,charrow,char*sb){
loop_until_bit_is_set(UCSR0A,UDRE0);//送信データレジスタ空きまで待機
UDR0=’T’;
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=t;
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=column;
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=row;
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=sb[0];
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=sb[1];
}/*文字列を表示する*/
voidlcd_sendStr(char*str,charcolumn,charrow,char*sb){
while(*str!=NULL){
lcd_sendText(*str,column,row,sb);//1文字表示
*str++;//1文字進む
column++;//表示位置ずらす
lcd_waitRes();
}
}
動いた。ATmega168からUARTでコマンドを送って、動かす。
SourceCode, hex, Makefile(avr-gcc 3.4.6)
データシートにはマイコンが5Vの場合、マイコンのTXDとLCDの間に1kΩの抵抗を入れろと書いてあったが、なぜかVCCとの間に入れてプルアップにしたら小気味よく動いた。RXDはそのまま。
■カラーコードの変換関数
前のs.h.log: Dontronics uLCD128のカラーコード変換もちょっと間違いがあったので直した
voidcolorToSb(char*color,char*sb){
//msb
sb[0]=((color[0]&0b11111)< <3)//RED
+((color[1]&0b111000)>>3);//GREEN-A
//lsb
sb[1]=((color[1]&0b111)< <5)//GREEN-B
+(color[2]&0b11111);//BLUE;
}