picからsg12864を制御しています。
直線の描画を行った際、まっすぐな縦線が点線のようになってしまいます。
横線・斜線は問題なく描画できます。また、ビットマップをそのまま表示した場合も問題なく描画できます。
後閑さんのプログラムを使用しています。下記のlcd_Lineを使用しています。
for文を使用して、1秒間隔でlcd_Pixelで点を打って直線を描画て動作を確認したところ、一度は黒いドットが表示されますが、消えてしまう箇所がありました。消えてしまう箇所はいつも同じです。
どなたか、解決方法がわかる方はいらっしゃいませんでしょうか?
#defineabs(a)(((a)>0) ? (a) : -(a))
void lcd_Line(int x0, int y0, int x1, int y1)
{
int steep, t;
intdeltax, deltay, error;
int x, y;
int ystep;
/// 差分の大きいほうを求める
steep = (abs(y1 - y0) > abs(x1 - x0));
/// x、yの入れ替え
if(steep){
t = x0; x0 = y0; y0 = t;
t = x1; x1 = y1; y1 = t;
}
if(x0 > x1) {
t = x0; x0 = x1; x1 = t;
t = y0; y0 = y1; y1 = t;
}
deltax = x1 - x0;// 傾き計算
deltay = abs(y1 - y0);
error = 0;
y = y0;
/// 傾きでステップの正負を切り替え
if(y0 < y1) ystep = 1; else ystep = -1;
/// 直線を点で描画
for(x=x0; x<x1; x++) {
if(steep) lcd_Pixel(y,x,1); else lcd_Pixel(x,y,1);
error += deltay;
if((error << 1) >= deltax) {
y += ystep;
error -= deltax;
}
}
}
void lcd_Pixel(int Xpos, int Ypos, char On){
char cs, data, page, pos, count, i;
/* if colum >127 then do nothing */
if(Xpos<128){
if(Xpos>63){// 64=<colum<=127?
Xpos = Xpos-64;// shift 64 dot
cs = 1;
}
else
cs = 2;
page = (char)(7-Ypos/8);// set page
lcd_Write(cs, 0xB8+page, 1);
lcd_Write(cs, 0x40+Xpos, 1);// set colum
data = lcd_Read(cs,0);// get current data
lcd_Write(cs, 0x40+Xpos, 1);// set colum ????
data = lcd_Read(cs,0);// get current data????
pos =1;// set bit position
count = (char)(7-Ypos%8);// set bit
for(i=0; i<count; i++)// caluculate 2^n
pos *= 2;
lcd_Write(cs, 0x40+Xpos, 1);// back address
if(On==1)// set or reset bit
lcd_Write(cs, data | pos, 0);// set 1
else
lcd_Write(cs, data & ~pos, 0);// set 0
}
}
No.1ベストアンサー
- 回答日時:
>pos =1;// set bit position
>count = (char)(7-Ypos%8);// set bit
>for(i=0; i<count; i++)// caluculate 2^n
>pos *= 2;
の部分で、countが0のときでも、pos は pos *=2 を通って
pos = 2となり、
count = 7のときは、pos = 256 => pos = 0となり
点が表示されないところがあるのではないですか?
pos = 1 の状態が存在しないように思いますが...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大学教授の社会的地位は高いで...
-
2分の1より100分の50のほうが明...
-
池上さん、大間違い・・・知識...
-
右脳はひらめきとイメージ。左...
-
昔読んだ絵本のタイトルが分か...
-
現在の深海潜水の技術で、液体...
-
辞めたゼミの調査書作成をバッ...
-
勉強について相談です。 自分は...
-
パクリの語源って韓国の人名の...
-
障害者雇用で6月に面接予定です...
-
INFP-aとINFP-tの違いを教えて...
-
身長の高い女の人って小顔の人...
-
どうして大人になると勉強しな...
-
シリアに旅行できますか?また...
-
判子に朱肉つけて下にゴムをし...
-
動画で蛇口前にペットボトルを...
-
戒名と輪廻転生
-
自動車免許の問題について質問...
-
cmolc kg⁻¹はなんと読みますか?
-
wisc 知能検査
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Unityのビルドエラーについて助...
-
撮り鉄ってSNSやYouTubeに動画...
-
松本人志さんが居なくなっても...
-
ジャニーズ事務所の性加害問題...
-
林修
-
ジャニーズ事務所の性加害問題
-
ジャニーズの被害者達 今頃にな...
-
ドラえもんとコナンは同じ小学...
-
picからsg12864を制御しています。
-
名前の読み方教えてください
-
昭和のプロ野球オープニング音楽
-
ジャニーズまた会見やる必要あ...
-
昔のプロ野球ニュースで
-
恋仲で
-
東京に人が集まるのが不満。
-
テレビの番組は星野リゾートば...
-
おしりに数字の「2」のついた...
-
テレビや飲食店でのBGM
-
松本人志が悪いと決まったわけ...
-
ブスな女子アナはいますか?
おすすめ情報