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ランキング
-
保守勢力って単純に戦前の日本...
-
なぜちいかわみたいに子供向け...
-
国立大の法人化で日本はイラン...
-
子供向けのコンテンツで、相手...
-
5教科(国語、数学、英語、社会...
-
パソコンで学習するより本のほ...
-
これ『何持ち』ってゆーんか知...
-
小学生の習い事事情
-
意外なことで治った病気は有り...
-
若い世代(1桁からティーンまで...
-
レポート文字数
-
世の中、冥界から何かが下りて...
-
戸籍の危うさ
-
赤信号フル無視や、注意不足 朝...
-
IQ107っていうのは具体的にどの...
-
教えて! goo終了
-
私は、〜賞ほど愚劣なモノはな...
-
日本語のわからない日本人がな...
-
TOEIC800点って才能いりますか?
-
老子ってどう思いますか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文化放送は、どこのテレビ局と...
-
未来日記の高山あゆみ
-
24時間テレビ嫌いな人ってどう...
-
TBSのニュース、テレ朝のニュー...
-
Unityのビルドエラーについて助...
-
民間テレビ局 不調だけど。 最...
-
北海道旭川
-
picからsg12864を制御しています。
-
先日の「それって実際どうなの...
-
昭和のプロ野球オープニング音楽
-
大谷翔平1人だけで ジャニーズ...
-
関空にVISA
-
Panasonic製FAXの子機
-
うちにテレビがないけどパリオ...
-
撮り鉄ってSNSやYouTubeに動画...
-
ジャニーズまた会見やる必要あ...
-
テレビの番組は星野リゾートば...
-
rabin法
-
林修
-
YouTubeチャンネルにあるテレビ...
おすすめ情報
