...

2.41MB - 高知工科大学

by user

on
Category: Documents
51

views

Report

Comments

Transcript

2.41MB - 高知工科大学
卒業研究報告
題目
近似式を用いて較正した温湿度系の設計と製作
報 告 者
学籍番号: 1120188
氏名:
槙山 朗也
指 導 教 員
綿森 道夫准教授
平成 24 年 2 月 10 日
高知工科大学 電子・光システム工学科
目次
第1章
序論
1-1 はじめに ・・・・・・・・・・・・・・・・・・・・・・・・・2
1-2 目的
・・・・・・・・・・・・・・・・・・・・・・・・・2
第2章
PIC について
2-1 PIC とは ・・・・・・・・・・・・・・・・・・・・・・・・・3
2-2 PIC の種類 ・・・・・・・・・・・・・・・・・・・・・・・・3
2-3 今回使用した PIC ・・・・・・・・・・・・・・・・・・・・・4
第3章
基板加工機を用いたプリント基板の設計と製作
3-1 基板加工機について ・・・・・・・・・・・・・・・・・・・・7
3-2 ドリルについて ・・・・・・・・・・・・・・・・・・・・・・8
3-3 基板の加工 ・・・・・・・・・・・・・・・・・・・・・・・・9
第4章
4 桁 7 セグ LED を用いたストップウォッチの設計と製作
4-1 概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・12
4-2 回路について ・・・・・・・・・・・・・・・・・・・・・・・13
4-3 説明 ・・・・・・・・・・・・・・・・・・・・・・・・・・・14
第5章
PIC で制御するボイスレコーダーの設計と製作
5-1 ボイスレコーダーについて ・・・・・・・・・・・・・・・・・15
5-2 回路について ・・・・・・・・・・・・・・・・・・・・・・・17
5-3 説明 ・・・・・・・・・・・・・・・・・・・・・・・・・・・17
第6章
グラフィック液晶を用いた表示回路の設計と製作
6-1 グラフィック液晶について ・・・・・・・・・・・・・・・・・18
6-2 概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・19
6-3 回路について ・・・・・・・・・・・・・・・・・・・・・・・22
6-4 説明 ・・・・・・・・・・・・・・・・・・・・・・・・・・・24
1
第7章
湿度を測定するためのアナログ回路の試作
7-1 概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・25
7-2 D/A コンバータによる正弦波と三角波の作成 ・・・・・・・・・25
7-3 回路について ・・・・・・・・・・・・・・・・・・・・・・・27
7-4 評価 ・・・・・・・・・・・・・・・・・・・・・・・・・・・30
第8章
近似式を用いて A/D 変換値から温度・湿度を求める方法の検討
8-1 概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・31
8-2 LM61biz について・・・・・・・・・・・・・・・・・・・・・31
8-3 測定方法 ・・・・・・・・・・・・・・・・・・・・・・・・・32
8-4 測定結果 ・・・・・・・・・・・・・・・・・・・・・・・・・33
第9章
近似式で較正した温湿度計の設計と製作
9-1 概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・41
9-2 回路について ・・・・・・・・・・・・・・・・・・・・・・・41
9-3 説明 ・・・・・・・・・・・・・・・・・・・・・・・・・・・42
まとめ
謝辞
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・48
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・49
参考文献
・・・・・・・・・・・・・・・・・・・・・・・・・・・・50
付録 プログラムリスト
2
第1章
序論
1-1 はじめに
私たちの周りにあるモノは、ほとんどの機械が昔のように作業の手助けをす
る程度の動作だけにとどまらなくなり、作業内容をほとんどやってくれるとい
った機器が出てくるようになった。例えば掃除機では、大容量バッテリーに充
電することでコンセントに繋げなくても動くようになり、ゴミをセンサで感知
して勝手に掃除をしてくれるようなモノが開発され、近年ではエアコンに人を
感知するセンサがついているので誰もいないときは勝手に電源を切ってくれる
ようになり、エネルギー問題が起きている現代において省エネに貢献するよう
になった。
上記のように我々の生活は電子機器があることが当たり前の時代となった。
今でも技術は少しずつ進歩しており、手の平サイズのものになったものもある。
この結果は素直に喜ぶこともできるが、その反面機器の小型化・複雑化に伴い、
中身を見ても何が何やらわからなくなり、私たち使う側はそれがどのようにし
て動いているのかを知らずに使うことができるようになった。そのため、なぜ
動くのか、どのようにして作っているのかなどを考えることがあまりなくなっ
た。
ここでは簡単に作れる温湿度計を製作し評価するが、製作するにあたってモ
ノ作りの楽しさと自分たちが学んできたことがどのような場所で使われている
のかを知ると同時に、作ることがどれだけ大変なのか、新しいものを考案する
のがどれだけ難しいかを知ることができれば大学を卒業し、技術者・研究者と
なったときに大いに役立つはずである。
1-2 目的
実際にモノを作ることでアナログ・ディジタル回路を理解し、回路作成能力
を身につける。また、PIC の使い方を覚えるとともに、回路図作成ソフト Eagle
の使い方をマスターし、そのソフトを用いて基板加工機でプリント基板を加工
できるようにする。さらにプログラミング技術とはんだ付けの技術を習得、向
上を目指し、様々なセンサの使用方法を覚える。回路を作製するにあたり、部
品の配置に気を付けるように考え、使いやすいように考案できるようになる。
物を形にすることで自分自身の技術者としての成長が目的である。
3
第2章
PIC について
2-1
PIC とは
PIC は米マイクロチップテクノロジー社が開発したものである。目的によって
8 ピンのように小型なものから 40 や 80 ピンに至る大型のタイプまで用意され
ている。
PIC はいわゆる「プログラム」で機能を実現するが、最新のマイクロコンピ
ュータに比べれば PIC の命令数は少なく、わずか 35 個だけしかないという簡単
な構造をとっている。つまりこの簡単さが PIC を「使いやすく、安価である」
と特徴づける要因となっており、現在実際に出荷されている家電製品や複数の
制御を必要とする自動車などにこの安さと使いやすさにより重宝されていると
言ってもよい。
またすごく簡単な構成要素でコンピュータとして動作し、パーソナルコンピ
ュータで動作する無料のプログラム開発ツールがあるため、教育教材としても
使えるものとなっている点が良いと思う。
2-2
PIC の種類
PIC には大きく分けてベースライン、ミッドレンジ、ハイエンドの 3 シリー
ズがある。
・ベースラインシリーズ
このシリーズは命令が 12 ビット幅(一回に扱えるデータの長さ)の最初に開
発されたもので、入出力ピンとタイマ機能だけしか持っておらず、現在の世代
から見ればかなり古くなっている。
・ミッドレンジシリーズ
ベースラインシリーズより少し性能が上がり、機能も増え最もよく使われる
シリーズである。A/D 変換機能やシリアルポートなど多くの機能を内蔵してい
るものもあり種類が豊富である。記憶方法はフラッシュメモリと同じというこ
ともあり、今回製作に当たり使用した 18 ピンの PIC16F88 や最新版で機能を拡
張した 28 ピンの PIC16F1938 はこのシリーズ属している。
4
・ハイエンドシリーズ
このシリーズでは命令が 16 ビット幅と他のシリーズ比べて広く高機能なもの
となっている。ミッドレンジシリーズで使いにくかった部分を改良し使いやす
くしたものとなっている。
2-3 今回使用した PIC
・PIC16F88
18 ピンのミッドレンジシリーズにおいて最上位の性能をもった PIC である。
プログラムメモリは約 4k ワードあり、EEPROM データメモリとデータメモリ
の容量も他の 18 ピンの PIC を圧倒している。7channel で 10bit の分解能をも
った A/D コンバータが付いている。また内部クロックが 8MHz までのクロック
を発生させることができる。
図の 2-1 と 2-2 が PIC16F88 の外観とピン配置となっていが、ピンの入出力
については 4 番と 5 番ピンと 14 番ピン以外はそれぞれ入出力であり、この 3 つ
はともに入力だけとなっている。
図 2-1
PIC16F88 の外観
5
図 2-2
PIC16F88 のピン配置とピン内容
・PIC16F1938
この PIC は最近出たもので、ピンの数が 28 ピンと多くなっているが性能と機能
がその分拡張されている。プログラムメモリは最大 32k ワードと増えており、
データメモリは PIC16F88 では 368 バイトだったものが最大 4,096 バイトとな
っている。内部クロックは PIC16F88 の倍の 16MHz となっており、さらに高
機能となっていることがわかる。またグランドにつなげるピンが 2 つになって
いることも特徴の一つである。次ページの図はそれぞれ PIC16F1938 の外観と
ピン配置である。ピン内容については機能が多いため今回は使用したものだけ
を表示している。詳しくはデータシートを参照してください。入出力について
は 1,8,19,20 番ピンだけは入力だけでその他は入力・出力となっている
6
図 2-3
図 2-4
PIC16F1938 の外観
PIC16F1938 のピン配置とピン内容
7
第3章
基板加工機を用いたプリント基板の設計と製作
3-1 基板加工機について
基板加工機は今年度から学生実験室に配備されたものである(図 3-1)。それ
までは、エッチング液を用いてプリント基板の余計な銅箔を剥がしていたが、
この機械ではドリルを用いて銅箔を削るため簡単に基板を作成できるようにな
った。しかしプリント基板を使わなくても最初から部品を取り付ける穴が開い
ているユニバーサル基板を使えばすぐに製作できる側面もまた否定できない。
加工機のほうでは基板を作れば、後は部品を取り付けるだけであるが基板を作
るのに時間がかかり、また一度削ってしまえばその後機能を拡張しようにもで
きないという欠点がある。今回は加工機を用いて製作を行う。
図 3-1
基板加工機
8
3-2 ドリルについて
基板加工機を使用する前に必ず確認しておかなければいけないのはドリルの
刃先が折れてないこと、リングの位置が通常の位置のよりずれていないかとい
うこととドリルの寿命がきていないかである。確認せずに使用するとうまく削
れず、基板が使い物にならなくなり基板をただ消費するだけとなってしまう。
ドリルの種類としては基板に穴を開ける位置に印を付けたり、部品同士を繋げ
るラインを削るためのユニバーサルカッター、印の付いた場所に穴を開けるた
めのスパイラルドリル、余計な銅箔を削り落とすためのエンドミル、加工した
部分を切り抜くために使うコンタールーターの 4 種類があり、スパイラルドリ
ルについてはさらに穴の直径がそれぞれ 0.8,1.0,1.5mm のものがある。下の
図 3-2 はそれぞれのドリルの寸法を示したものである。
図 3-2
ドリルの種類と寸法
9
3-3 基板の加工
ここでは基板加工機の使い方を述べていく。回路は次の章で作るストップウ
ォッチの回路図を用いる。
1. 回路図を書く
まずプリント基板をどのように加工するかを決める回路図のパターンを書か
なければいけない。回路図は回路図作成ソフト Eagle を用いる。このソフトは
無償で使うことができる上にとても使いやすい。まず回路図を書いていき、そ
の回路図をボード図にする。このとき回路図とボード図の両方を開いておけば
回路図を変更したときにそのままボード図に反映されるので常に両帆を開いて
おくようにする。またボード図は片面、両面でパターンを書くことが出来るが、
今回は両面基板を作成する。回路図は次の章で詳しく述べるのでここではボー
ド図だけを図 3-3 に示す。
図 3-3
ストップウォッチのボード図
10
2. パターンデータを基板加工機にエクスポートする
Eagle で作成したパターン図を加工機にインポートするが、ここで必要なファ
イルはドリルの穴の直径と場所を示したファイルと表面のパターンデータのフ
ァイル、裏面のパターンデータのファイルである。この 3 つのファイルを用い
て CircuitCAM というソフトでファイルをインポートして切削データの LMD
ファイルを作成する。この時注意する点はそのデータにずれがないかを目で確
認する。
3. 基板を削る
作成した LMD ファイルを加工機制御ソフト BoardMaster で読み込み、基板
を削る。片面基板では片方削ればそれで終わりだが、両面の場合は裏返す作業
があるため表と裏でずれる可能性が高い。そのためかなり難しく、何度も失敗
しては大量の基板をここで消費した。また銀ペーストを用いて表と裏を繋げる
作業も行う必要があり、片面よりさらに時間がかかる。ここでの注意する点は
上記のように表と裏がずれないようすることと 3-2 で述べたようにドリルの点
検である。
4. 完成
図 3-4 が完成した両面基板である。ここではラブアウトしているためはんだ
が流れてもショートすることがなくなり、初心者には一番無難である。
図 3-4
11
完成品
ここでは使わなかったが、この後にもシルク印刷とソルダーペースト作業が
ある。ソルダーは緑色の絶縁性があるインクで、ラブアウトをしなくてもはん
だをのせる範囲以外を絶縁させることができ、シルクは部品を取り付ける場所
を示すために使われる。これらは通常の電気製品にも使われている。こちらも
初心者でも安心して作ることが出来るが、その分さらに時間がかかる。下手を
すると一日かかるときがあるためあまりおすすめできない。下の図 3-5 と図 3
-6 がそのシルクとソルダーを塗った基板である。表面は乾燥時間が足りなかっ
たためソルダーがはがれてしまった。シルクについては説明書では 1 分 40 秒と
書いているが、実際には図の 3-7 の 3 分露光したほうがきれいに塗れており露
光時間は延ばしたほうが良いとおもわれる。
図 3-5
図 3-6
表面
図 3-7
3 分露光したもの
12
裏面
第4章
4 桁 7 セグ LED を用いたストップウォッチの設計と製作
4-1 概要
まずは慣れるためにストップウォッチを製作する。回路図は図 4-1 のように
なっている。機能としてはタイマ機能とスイッチによるスタート・ストップ、
桁の変更とタイマのリセットがある。
図 4-1
ストップウォッチの回路図
13
図 4-2
外観
4-2 回路について
トランジスタについては最大定格が 150mA である 2SA1015 を用いている。
ベース抵抗の計算方法は PNP 型を考慮した上で行う。エミッタ‐ベース間はダ
イオードとなっているため 0.6V 電圧降下がある。そのことからベースが Low
となったときは電源が 3V であるため 0.6V 引いた 2.4V が抵抗に加わる電圧と
なる。エミッタ‐コレクタ間に最大の 150mA を流す場合はベース電流はその
100 分の 1 となるので 1.5mA となる。このことからベース抵抗はオームの法則
電圧 V=抵抗 R×電流 I
より 2.4V を 1.5mA で割ったものとなり、ベース抵抗は 1.6kΩとなることがわ
かる。今回 LED は 10mA では暗いと思うのでそれぞれ 20mA で光らすことに
した。しかし、そうなると 7 セグ LED は 1 つの桁を全て光らすと小数点を表す
部分も含むために LED は 8 個となり電流の合計値は 160mA となりオーバーし
てしまう。それを解消するためにエミッタ‐コレクタ間に余裕を持たせて
14
200mA にし、ベース電流を 2mA とした。実際に流すと壊れるため後に説明す
る LED の部分にかかる電圧を制御するための抵抗を用いてこの電流も制御する
ようにしている。するとベース抵抗は 2.4V を 2mA で割った値となり 1.2kΩと
なることがこのことよりわかる。
この LED は赤色なので光るためにかかる電圧は約 2V のため、2V にするた
めにカソード側に抵抗を直列に接続する。すると抵抗にかかる電圧は 3V から
2V 引いた 1V となり、LED にかかる流れる電流は 20mA なのでオームの法則
より 1V を 20mA で割った 50Ωとなるが、残念ながらその値の抵抗はないため
に 51Ωの抵抗を代用した。
最後に発光の制御は RB0 から RB7 までの各 8 ピンがそれぞれ High のときは
電位が同じため電流は流れないが、Low を出力することで電位が下がり電流が
流れてその部分を光らせている。
4-3 説明
このストップウォッチは上のボタンを押すとカウントアップがスタートし、
もう一度押すとストップする。最初は何も考えずにプログラムしたため秒の桁
までしか表示させておらず、1 分たつと全ての表示が 0 に戻ってしまう。そのた
め下のボタンを使って桁の表示方法を変更できるようにした。初期の状態では
図の 4-3 のように秒の桁までを表示し、下のスイッチを押すことで図の 4-4
のように桁の位置を変えて 0.1 秒の桁を表示やめて分の桁と秒の桁だけを表示
できるようにした。また下のボタンを長押しすることでリセットできるように
したが、その際に桁表示も変更されてしまうためその点を修正する必要がある。
図 4-3
図 4-4
秒までの桁を表示
15
分と秒の桁を表示
第5章
PIC で制御するボイスレコーダーの設計と製作
5-1 ボイスレコーダーについて
このボイスレコーダーは PIC による制御を行い、マイクから入った音声を録
音しその音声を再生する。ここでは PIC だけでなく APR9600 という 60 秒まで
録音・再生が出来る IC を用いる。
APR9600 は主に録音機や玩具などに使用されている。主な性能としては外部
の IC がなくても制御することができ、不揮発性のメモリを使っているため電源
を OFF にしても録音したものは消えずに残すことができる。また録音されたメ
ッセージをランダムに再生させることが可能となっている。今回は APR9600 を
PIC で制御していろいろなモードを切り換える作品とした。図 5-1 と図 5-2
はその回路図と外観である。
図 5-1
16
回路図
図 5-2
図 5-3
外観
APR9600 のピン配置と内容
17
5-2 回路について
電源は電池を 2 個用いて 3V で使用しているが、APR9600(図 5-3 参照)は 4.5
~ 6.5V で 駆 動 す る た め こ の 電 圧 で は 動 か す こ と が 出 来 な い 。 そ の た め
PIC16F88 と APR9600 に入力する前に DC-DC コンバータで電圧を 5V に昇圧
する。また出力部分に取り付けているコンデンサはノイズが出たとき小さくす
る役目を持っている。
APR9600 は Msel1 と Msel2 の両方が Low ではテープモードとなり、Msel1
と Msel2 の片方もしくは両方が High のときはランダムアクセスモードとなる。
ランダムアクセスモードでは Msel1 と Msel2 の状態によって録音できるメッセ
ージ数が増えるが録音時間が短くなる。テープモードでは M8 が High か Low
でオートリワインド(自動巻き戻し)モードとノーマルモードの切り換えが出来
る。全てのモードの切り換えを PIC で制御する形となっている。またサンプリ
ングレートは OSCR に繋げる抵抗の値で決まるために今回は 4.2kHz のレート
に設定する抵抗値である 82kΩの抵抗を用いた。
スピーカー部分ではアンプを通して電圧を増幅しているが、このアンプは単
体で機能するために回路図のような形となっており、増幅率は 10 倍となってい
る。出力部分ではノイズと直流成分を取り除くためコンデンサを取り付けてい
る。
5-3 説明
今回ボイスレコーダーには bcd スイッチによって録音する場所を切り換える
ことができようにしている。そのため 1 つの場所に録音できる時間は 60 秒の 8
分の 1 となるため約 7.5 秒程度しかできないが、そんな長い言葉を録音しない
のでこと足りていると思う。
今回は部品を考えずに配置したため使いにくい形となってしまった。例えば
スイッチの位置が様々の場所にあるために結果としてボタンを押し難い構造と
なった。マイクについてはスピーカーに半ば隠れた状態となっているために音
を拾い難くなっている。今回は基板加工機で作ったために配置を変えることが
出来ない。次に作る機会があるときは部品配置を修正して使いやすくする必要
がある。
18
第6章
グラフィック液晶を用いた表示回路の設計と製作
6-1 グラフィック液晶について
今回用いたグラフィック液晶は SG12864A で 128 ドット×64 ドットのサイ
ズである(図 6-1)。動作電圧は 5V となっているが実際は 2.7V から 5.5V で動
作可能である。コネクタの部分は表面からみて左から 20 ピンあり、通常とは逆
となっているので注意が必要である(表 6-1 参照)。右が CS1 で左が CS2 とな
っており、それぞれの信号が High か Low で右半分か左半分、もしくは両方を
表示するようになっている。
図 6-1
グラフィック液晶の外観
19
表 6-1
ピン番号
グラフィック液晶のピン配置とピン内容
ピン内容
ピン番号
ピン内容
1
VSS
11
DB4
2
VDD
12
DB5
3
Vo
13
DB6
4
D/I
14
DB7
5
R/W
15
CS1
6
E
16
CS2
7
DB0
17
RST
8
DB1
18
VOUT
9
DB2
19
A
10
DB3
20
K
6-2 概要
この作品では温度と湿度を測るセンサを用いて、それぞれのセンサから読み
取った値をグラフィック液晶で表示させる。今回使用した温度センサは
LM35DZ と呼ばれるもので(図 6-2、図 6-3)、摂氏(℃)温度にリニアに比例し
て出力電圧が上昇し、1℃ごとに+10.0mV となっている。そのため出力電圧温
度に複雑に計算する必要がなく簡単に使用することが出来る。このセンサのオ
フセット電圧は 0V で測定範囲は-55℃から 150℃まで測れるが、実際は 0℃か
らしか測れない。湿度センサの HS15P(図 6-4)は温度センサと違い扱いが難し
い。その理由としてはまず電圧は直流ではなく交流でないと動作せず、定格で
は周波数が 50Hz から 1kHz の間で電圧は 1Vrms となっている。また湿度セン
サは内部抵抗の値が変化することによって出力電圧が上下するが、内部抵抗は
対数関数で変化するためにそれを変換するのが大変だという点がある。また温
度でも抵抗の値が変化するためにさらに難しく感じられる。そのため今回は湿
度センサを取り付けはするが使用しないことにした。詳しくは HS15P のデータ
シートを参照すること。
温度センサの変換式は
出力電圧 V=+10.0mV/℃×摂氏温度
となる。
20
図 6-2
図 6-3
LM35DZ の外観( 左:表面
右:裏面
)
下から見たときの LM35DZ のピン配置を内容
21
図 6-4
湿度センサ HS15P の外観
22
6-3 回路について
この回路では初めて A/D コンバータを用いた。A/D コンバータは簡単に言え
ばアナログの値をデジタル値に変換するものである。この A/D コンバータを用
いて温度・湿度センサからの出力電圧を読み込み、その値をデジタルの値に変
換することでアナログ回路への接続が可能となる。
その A/D 変換を行う際に何を基準にするかだが、電源を基準にすると電池が
消耗したとき値が変化してしまい正確な値が取れなくなってしまう。今回はそ
れを防ぐためにシャントレギュレータと呼ばれるものを用いて電圧を 2.495V
前後の値で一定にして PIC16F1938 の Vref+に入力することで値が変化しない
ようにした。
温度センサの部分では仮に 20℃としたときの電圧の値は 200mV と電圧の値
が小さいためにオペアンプを使用して電圧を増幅している。今回は出力電圧が
入力される電圧の 4 倍となるように抵抗の値を調整しており、非反転増幅回路
にしている。非反転増幅回路の式は次のようになる。
出力電圧 Vout=(1+R2/R1)×入力電圧 Vin(R1,R2:抵抗)
括弧の中の値が増幅率となるが、増幅率の決め手はどの範囲まで測定するかに
よって決まる。今回は増幅率を先に決めたので、測れる温度を 0℃からの範囲に
変換してから電圧を求めると 2050mV となり、それを増幅率で割ると 51.1℃ま
でとなる。
今回は使用しなかったが湿度センサをみるとかなり複雑な増幅回路となって
いる。この回路は対数増幅回路であり対数の変化を打ち消すために使用した。
そのため対数関数ではく比例関数となり式が簡単になり扱いやすくなる。図 6
-5 はその回路図となる。回路としては対数増幅回路を備えており実際に製作も
行ったが、湿度センサの部分の計測に関しては第 7 章以降の別作品で本格的に
取り組んだ。
23
図 6-5
表示器の回路図
24
6-4 説明
この回路はグラフィック液晶に初期画面が表示されて少しすると温度を表示
する画面に切り換わるが、今回はボタンによる操作は無しにしている。
A/D の値を表示することで温度がずれてないかを確認することが出来る。今
回 A/D 変換の基準を 2.495V ではなく PIC16F1938 についている固定電圧リフ
ァレンスと呼ばれる機能で 2.048V を基準に変更した。そのため A/D 変換で 1024
分割しても本来の 2 倍の値が表示されるので変換しやすくなる。固定電圧リフ
ァレンスは 1.024,2.048,4096V の値を選択することができ、安定した電圧を得
ることが出来る。図 6-6 はその表示である。上が LM35DZ で測定した時の結
果の表示で温度が左で A/D の値は右に表示されている。下の表示は次に使う
LM61biz のものだがこちらは第8章で説明する。
図 6-6
温度の表示
25
第7章
湿度を測定するためのアナログ回路の試作
7-1 概要
第 6 章で組み込みながら使用しなかった湿度センサを使えるようにするため
の回路を試作するのだが、対数増幅回路ではなぜか動作に不具合が生じたため
に半波整流回路と分圧を利用した回路を作製して試すことにした。また交流を
作るために PIC16F1938 に内蔵された D/A コンバータを使用し、50kHz から
1kHz までの周波数を発生させることをした。
7-2
D/A コンバータによる正弦波と三角波の作成
まず湿度センサを動作せるための交流を発生させるプログラムを作成する。
そのプログラムは下記のようになっている。
正弦波
DACCON1 = SIN[POS];
POS++;
IF( POS == 20) POS = 0;
三角波
IF( POS< 5 ) OUT_DA += 6;
ELSE OUT_DA -= 6;
POS++;
IF( POS == 10 ) POS= 0;
DACCON1 = OUT_DA;
正弦波はまずエクセルで値を作成し、その値を配列に入れて POS の数字を元に
配列からデータを読み出して DACCON1 に入れる作業を 20 回繰り返すことで
約 500kHz の周波数を作った。次に三角波は正弦波のときとは違い、POS が増え
たときに OUT_DA の値を増やしていく。POS が 5 以上になったら今度は OUT_DA
の値を減らしていく。DACCON1 に代入するタイミングとしては OUT_DA が変
化したときとなっており、1kHz の周波数を作った。上記のプログラムによる出
力をオシロスコープで見たものが次の図 7-1 と図 7-2 である。
26
図 7-1 正弦波
図 7-2 三角波
27
7-3 回路について
回路についてはほとんど 6 章と同じではあるが、変更点は 4 番ピンからコン
デンサを通したあとに直列に湿度センサを接続して較正時は純抵抗で代用し、
さらに直列に半波整流回路を通すか、又は湿度センサと抵抗で出力電圧を分圧
して、それを半波整流回路に通す回路の 2 つをそれぞれ組んでおり、図 7-6 が
その回路図となる。この回路はユニバーサル基板で組んだため、回路の増設を
容易に行うことが出来た。
半波整流回路は交流を直流にするために必要なもので、順電圧(正電圧)のみを
出力させるために用いる。順電圧の時では入力電圧はコンデンサにより直流成
分を取り除かれた状態で図 7-3 のような方向に進む。R2 では電位差がないた
め電圧が発生しない。オペアンプの出力電圧は+0.6V でダイオード D2 で消費
されて 0V になる。次に逆電圧の時は図 7-4 のように流れる。D1 は逆電圧で
は通さないため、オペアンプからの出力は D2 と R2 を通り、入力側はマイナス
の電圧のため逆向きに流れる。ここでは非反転増幅回路で説明したが、この回
路では反転増幅回路なので入力するピンを間違えないようにすることがたいせ
つである。この回路では R1 を湿度センサに見立てている。
図 7-5 に示すもう一つの分圧回路に関してであるが半波整流回路は最初の部
分では半波整流回路と同じであるが R3 は可変抵抗にして値を変えられるよう
にし、抵抗値の変化によって出力電圧がどのように変化するのかを見る。抵抗
値が大きくなれば接続点の電圧は大きくなり、逆に小さくすれば電圧は小さく
なる。この回路では可変抵抗を湿度センサに見立てて電圧を変化させている。
ダイオードを通ったあとは平滑回路となっており、半波をコンデンサで平滑し、
直流にしている。その後非反転増幅回路で増幅して A/D 変換器に導入する。
28
図 7-3 半波整流回路の順電圧時の流れ
図 7-4 半波整流回路の逆電圧時の流れ
29
図 7-5 分圧回路
図 7-6 回路図
30
7-4 評価
図 7-3、図 7-4 の半波整流回路ではちゃんと半波の信号が出ており、出力
電圧も抵抗 R1 を変化させれば同じく変化したので出力の部分に平滑回路を取
り付ければ実用化出来る。分圧を利用した半波整流回路も同じように変化し実
用化できると思う。しかし、湿度センサは対数関数で変化するためにこの2つ
の回路ではその変化を考慮した式を考えるのは難しいと感じた。試行錯誤の末、
対数増幅回路を備えた最初の回路を変形して用いる決断をした。
これらの回路を試作し試した後に最初の回路には様々な間違いがあることが
分かった。1つはオペアンプへの入力を逆にしており反転増幅回路にしなけれ
ばならないはずが非反転増幅回路となっていたために出力がでなかったことと、
2つめはダイオードの特性の問題であった。これはダイオードをショットキー
タイプから普通の PN ジャンクションタイプ変えれば解決した。3つめはプロ
グラムの問題で A/D 値を表示するための部分が間違えていたためだった。この
3つの問題を解消すると無事に動作したためこの最初の回路の変形バージョン
(図 7-7)でいくことに決めた。上記2つの回路は結局使わなかったが半波整流
回路の理解にすごく役立った。
図 7-7 測定回路
31
第8章
近似式を用いて A/D 変換値から温度と湿度を求める方法の検討
8-1 概要
測定方法として温度は 20℃から 40℃くらいまでの A/D 変換値を測定して表に
し、その表から変換式を求めることをする。湿度については湿度センサの代わ
りに 10kΩから 100MΩまでの範囲の抵抗を選び、湿度センサがある湿度の時に
対応する抵抗値になっていると仮定して、A/D 変換値を温度と同じようにして
測定する。
8-2 LM61biz について
LM61biz は LM35DZ と違い、オフセット時に 600mV の電圧を持っている。
そのため 0℃のとき 600mV の出力を生じてマイナスの温度を測定可能となって
いる点が特徴的である。その代わりに LM35DZ よりも測定温度の上限が低くな
っている。またピンの配置は LM35DZ と同じとなっており、外観も同じなので
間違えないようにする。(図 8-1)
図 8-1
下から見た LM61biz のピンの配置と内容
32
8-3 測定方法
7 章で用いた回路を再び使って温度・湿度の両方を測定していく。まず温度は
基板に LM35DZ と LM61biz の両方を取り付けて液晶に 2 つの温度センサの A/D
変換値を表示できるようにプログラムを作っておく。次に両センサから出力さ
れオペアンプで増幅された電圧も測定するために PIC の A/D 変換ピンにマルチ
メータをつなぎ、それぞれの温度センサの出力電圧、A/D 変換値を測定しエク
セルを使って記録していく。この記録から変換式を求めてずれがないかあるい
は変換式はどうなっているかを調べる。
湿度センサは温度センサの時と違い抵抗の値をいろいろ変えないといけない
ために少し大変である(図 8-2)。手順としては温度センサと同じであるが A/D
変換式を求めるために多少手順が増える。HS15P のデータシートに載っている
湿度と抵抗値の関係図を元にそれぞれの湿度のとき抵抗値はどのくらいかを調
べ、A/D 変換式を用いてそれぞれの湿度の時 A/D 変換値はどのくらいなのかを
計算する。その結果をグラフにして湿度に変換する近似式を温度でわけて求め
る必要がある。
図 8-2
湿度測定に用いた抵抗の数(最大 34 個)
33
8-4 測定結果
測定結果は表 8-1 のようになった。温度はデータシートに書かれた通りの式
となりデータシートに記された式から変更する点はなかった。変換式をもとめ
るために用いたグラフと最少二乗法による変換式を図 8-3 と図 8-4 に示す。
湿度は測定値がかなり変化するため測りにくかったが変化が落ち着いたあたり
の値を記録するようにした。結果は表 8-2 の通りである。抵抗と A/D 変換値の
関係は図 8-5 のグラフから式を求めた。HS15P 湿度計は、各湿度に対する湿
度と抵抗の値のグラフしかデータシートで与えられていないので、それぞれの
湿度において湿度とその時の抵抗の値をグラフから読み取る。これに図 8-5 よ
り求めた計算式を用いて A/D 変換値に変更して作成した表が、表 8-3 から表 8
-7 である。それぞれの温度の時の近似式が図 8-6 から 8-10 に示したもので
ある。曲線状に上がるこのグラフの形から二次元多項式のほうが精度が上がる
と思うので一次近似式は使わないことにした。この結果を用いて温湿度計を製
作する。
表 8-1
LM35DZ と LM61biz の測定結果
LM35DZ
A/D値
400
420
440
460
480
500
520
540
560
580
600
620
640
660
680
700
720
740
760
780
800
820
840
LM61biz
温度[℃]
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
A/D値
800
810
820
830
840
850
860
870
880
890
900
910
920
930
940
950
960
970
980
990
1000
1010
1020
34
温度[℃]
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
LM35DZ
45
40
温度「℃」
35
30
25
20
変換式
y = 0.05x
R² = 1
15
10
5
0
0
200
図 8-3
400
600
A/D変換値
800
1000
LM35DZ の測定結果グラフ
LM61biz
45
40
温度[]℃
35
30
変換式
y = 0.1x - 60
R² = 1
25
20
15
10
5
0
0
200
図 8-4
400
600
800
A/D変換値
1000
LM61biz の測定結果グラフ
35
1200
表 8-2
湿度センサの測定回路における抵抗値と A/D 値の関係
抵抗の値[Ω] 出力電圧[V] A/D値
1.00E+04
1.899
949
2.00E+04
1.814
907
3.90E+04
1.734
867
6.00E+04
1.689
844
8.00E+04
1.657
828
1.00E+05
1.633
817
2.00E+05
1.564
782
4.00E+05
1.495
748
6.00E+05
1.455
728
8.00E+05
1.428
714
1.00E+06
1.405
702
2.00E+06
1.339
669
4.00E+06
1.28
640
6.00E+06
1.251
626
8.00E+06
1.217
610
1.00E+07
1.197
598
2.00E+07
1.115
554
4.00E+07
1.038
516
6.00E+07
1.014
502
8.00E+07
0.988
491
1.00E+08
0.955
477
図 8-5
HS15P の測定回路の抵抗と A/D 値の関係
36
表 8-3
温度 5℃の時の A/D 変換値と湿度の関係
湿度(%) 抵抗[kΩ] A/D値
20 1.90E+05
444.61
30 1.20E+04
582.46
40 2.00E+03
671.89
50 4.50E+02
746.33
60 1.50E+02
801.16
70 4.80E+01
858.03
80 1.80E+01
906.98
90 7.00E+00
954.12
図 8-6
温度 5℃の時の湿度
37
表 8-4
温度 15℃の時の A/D 変換値と湿度の関係
湿度(%)
20
30
40
50
60
70
80
90
抵抗[kΩ] A/D値
1.80E+04
562.22
3.00E+03
651.65
6.00E+02
731.97
1.80E+02
792.06
5.00E+01
855.99
2.00E+01
901.73
8.00E+00
947.46
2.50E+00 1005.51
図 8-7
温度 15℃の時の湿度
38
表 8-5
温度 25℃の時の A/D 変換値と湿度の関係
湿度(%) 抵抗[kΩ] A/D値
20 8.00E+03
602.70
30 1.00E+03
706.48
40 2.10E+02
784.37
50 6.00E+01
846.89
60 2.20E+01
896.97
70 9.00E+00
941.58
80 3.50E+00
988.72
90 1.60E+00 1027.78
図 8-8
温度 25℃の時の湿度
39
表 8-6
温度 35℃の時の A/D 変換式と湿度の関係
湿度(%) 抵抗[kΩ] A/D値
20 2.50E+03
660.75
30 3.60E+02
757.47
40 8.00E+01
832.54
50 2.80E+01
884.93
60 9.00E+00
941.58
70 4.50E+00
976.17
80 1.90E+00 1019.21
90 8.80E-01 1057.62
図 8-9
温度 35℃の時の湿度
40
表 8-7
温度 45 度の時の A/D 変換値と湿度の関係
湿度(%) 抵抗[kΩ] A/D値
20 9.00E+02
711.74
30 1.50E+02
801.16
40 3.50E+01
873.80
50 1.30E+01
923.23
60 5.10E+00
969.93
70 2.10E+00 1014.21
80 1.00E+00 1051.24
90 5.00E-01 1085.83
図 8-10
温度 45℃の時の湿度
41
第9章
近似式で較正した温湿度計の設計と製作
9-1 概要
7、8 章でやってきたことをこの章で活用して温湿度計を製作する。理想とす
る温湿度計は温度・湿度の表示が基本だが、今回は両センサの A/D 変換値と変
換式を表示できるようにし、両センサの詳細をいつでも確認できるように設計
する。
9-2 回路について
回路については 7,8 章で作った回路を組み合わせただけであるが変更点とし
ては LED を取り付けたことと対数増幅器の+側入力を 0V に接続して、0V を基
準に対数増幅を行うことがあげられる(正確にはダイオードの順方向電圧変化分
が 0V から変わるので 0.4V から 0.7V 位の電圧を出力する)。これは、この後の
出力を再度オペアンプで 3 倍に非反転増幅して A/D 変換器に入力するので、0V
から電圧変化するほうが都合が良いためである。LED は電源が入っている状態
などの確認に使うことで状態を把握しやすくなる。また湿度センサの部分では
抵抗を用いた較正が出来るようにスイッチで切り換えできる構造にしている。
また平滑回路も取り付けて直流に変換できるようにした。
42
図 9-1
最終回路図
9-3 説明
最終作品であるこの温湿度計の機能は電源を入れた直後の画面は温度と湿度
を表示するようになっている、その部分のプログラムは以下のようになってい
る。その際に温度の測定は、2 つの温度計から得られた A/D 変換値が、LM35DZ
だけが正しい出力を行う場合と LM61biz だけが正しい出力を行う場合、両方の
センサが正しい出力を行う場合で場合分けをして結果を表示する様になってい
る。
kekka1 = heikin / 20;
if(heikin> 8460 ) {
ondo = kekka1;
43
}
else {
cond = 1;
if( heikin2 < 6000 ) {
ondo = 1000 + 600 - heikin / 10;
cond = 2;
}
else {
kekka2 = heikin2 / 10 - 600;
ondo = (kekka1 + kekka2 ) /2;
cond = 0;
まずそれぞれの A/D 変換値を 10 回足した平均をだす。LM35DZ はオペアンプ
で 4 倍にしており、A/D 変換する電圧を 2.048V と 2 倍にしているために heikin
を 20 で割っている。LM61biz は A/D 変換の電圧を 2.048V による 2 倍とオペ
アンプでの 2 倍が相殺するため 10 で割っている。0℃を下回るときは LM61biz
のみの値で温度を表示する。マイナスを表記するために 100 の位の桁を 1 にし
てマイナスを表現するようにした。この状態を cond は 2 としている。次に 0℃
から 42.3℃までは LM35DZ と LM61biz の 2 つのセンサで感知した温度の平均
をとるようにしており cond の状態は 0 としている。それ以上の温度の時は
LM35DZ のみの値を画面に表示し cond の状態を 1 にしている。cond の状態に
よって表示する変換式を変更している。右のボタンを押すと温度の詳細画面へ
移行する。この詳細画面では温度の表示にのみ限定し、2 つの温度センサからの
A/D 変換値と変換式が表示されるようになっており、再びそのボタンを押すと
初期表示の画面に戻る。
次に左のボタンを押すと湿度の詳細画面に移行する。以下がそのプログラム
となっている。温度が 10℃の間隔で式が分けられており、例えば 5℃が 15℃の
間の温度の時は 5℃の時の湿度と 15℃の時の湿度が計算され、実際の湿度で比
例配分した値が取れるように式で補正している。
if( ondo<= 50) {
c1 = ( float )( ondo/ 10 );
x1 = ( float )( heikin3 /10 );
savg = cal5do( x1);
}
44
if( ondo> 1000) {
c1 = ( float )( (ondo-1000)/ 10 );
c1 = -c1;
x1 = ( float )( heikin3 /10 );
savg = cal5do( x1);
}
if( (ondo>50) && (ondo<=150) ){
c1 = ( float )( ondo/ 10 ) ;
x1 = ( float )( heikin3 /10 );
s1 = cal5do( x1);
s2 = cal15do( x1);
savg = (s1*(15.0 - c1) + s2 * (c1 - 5.0) )/10.0;
}
if( (ondo> 150) && (ondo<= 250)){
c1 = ( float )( ondo/ 10 ) ;
x1 = ( float )( heikin3 /10 );
s1 = cal15do(x1);
s2 = cal25do(x1);
savg = (s1*(25.0 - c1) + s2 * (c1 - 15.0) )/10.0;
}
if( (ondo> 250) && (ondo<= 350)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10 );
s1 = cal25do(x1);
s2=cal35do(x1);
savg = (s1*(35.0 - c1) + s2 * (c1 - 25.0) )/10.0;
}
if( (ondo> 350) && (ondo<= 450)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10);
s1 = cal35do(x1);
s2=cal45do(x1);
savg = (s1*(45.0 - c1) + s2 * (c1 - 35.0) )/10.0;
}
45
if((ondo>450) && (ondo< 1000)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10 );
savg= cal45do(x1);
}
if(savg< 0.0)savg = 0.0;
if(savg> 100.0)savg= 100.0;
shitsudo= (unsigned char )savg;
こちらは温度と違い小数点を持つ数字を扱うためフロート型呼ばれる変数を
用いている。このフロート型はかなりメモリをとるため注意が必要である。最
後の 3 つの文は計算した湿度が 0 より下になったときは強制的に 0 にしており、
逆に 100 を超えたときは強制的に 100 になるようにしている。
次に 8 章で求めた式は関数で用いておりプログラムは以下のようになって
いる
float cal5do(float x){
return (0.00018 * x * x-0.10845* x + 33.39);
}
float cal15do(float x){
return (0.00014 * x * x -0.05974 * x + 9.083);
}
float cal25do(float x ){
return (0.00022 * x * x - 0.19806 * x + 57.619);
}
float cal35do(float x ){
return (0.00026 * x * x -0.27251 *x + 86.084);
}
float cal45do(float x ){
return (0.00028 * x * x -0.32497 * 107.332);
}
A/D 変換値をxにいれて温度によって呼び出す関数を変更している。湿度の詳
細画面で表示される変換式は温度が全ての過程を表現するスペースがないため
46
に 2 次元多項式の定数部分をアルファベットに置き換えており A/D 変換値とと
もに表示している。図 9-1 から図 9-4 はその完成品の表示画面である。
問題点としてはやはり温度センサのある場所だと感じており、この場所だと
持ち難いため次に製作するときはもっと工夫するようにしたい。
図 9-2 外観と初期表示
47
図 9-3
温度詳細画面
図 9-4
湿度詳細画面
48
まとめ
4 回生となり本格的に卒業研究が始まってから様々な作品を製作してきたこ
とで様々な知識と技術を学ぶことが出来たと思います。研究室に入りたての頃
は回路については一切わからない状態であり、トランジスタの使用用途やオペ
アンプの増幅率の計算以前に抵抗の分圧の式などの基本的なものまでわからな
いほどでした。しかし綿森准教授の講義形式による説明により少しずつではあ
りますが理解していくことが出来ました。
本研究を始める前まではプログラムとなると今まではわからないために抵抗
を持っていましたが、現在はその抵抗感がなくなり少しではありますが自分で
もプログラムを作ることが出来るようになったと思います。
技術面では今まではユニバーサル基板に取り付けるような普通のサイズの抵
抗を使っていましたが、目で見るのがやっとのサイズのチップ抵抗のはんだ付
けにこの研究で初めて取り組みました。はんだ付けするのがとても難しく最初
は全くつけることが出来ませんでしたが、今では一瞬でとは言えませんが最初
よりも早くはんだ付けできるようになりました。はんだ付けについてはかなり
未熟ではありますが、感覚が掴めたような気がします。
また今年度から導入された基板加工機は最初はどのように操作するのかわか
りませんでしたが今では操作がスムーズにできるようになったと思います。
本研究を通してものを作る楽しさを知ることが出来ました。1 月から製作に取
り掛かりとても大変でしたが、回路図を見ながら試行錯誤し、失敗してもなに
がいけないのかを考えるのはとても楽しく貴重な経験が出来たと思います。
49
謝辞
今回の卒業研究並びに卒業論文を作成するにあたり、終始に丁寧かつ熱心な
ご指導とご助成を賜りました高知工科大学工学部電子・光システム工学科綿森
道夫准教授に、心から感謝を申し上げます。本研究は綿森道夫准教授のご助成
がなければ完成することはなかったと思います。
また高知工科大学工学部電子・光システム工学科在学中に本研究実験遂行や
学生生活、その他各過程で終始ご厚意と協力を頂きました、高知工科大学電子・
光システム工学科長 岩下 克教授、河東田隆教授、成沢忠教授、真田克教授、
橘昌良教授、八田章光教授、野中弘二教授、古田寛准教授、星野孝総准教授、
山本真行准教授、植田和憲講師、密山幸男講師、杉田彰久教育講師、高崎敬雄
教育教師、安岡 文子秘書、中山 愛秘書の皆様には重ねて感謝の意を述べさ
せていただきます。
50
参考文献
電子工作のための PIC16F 活用ガイドブック
後閑 哲也
・改訂版
著
:
技術評論社
・PIC マイコンの基礎
後閑
・基礎入門
哲也
著 :
毎日コミュニケーションズ
センサ活用の素①
後閑 哲也
著
:
技術評論社
・PIC マイコン
中尾
・トランジスタ技術 SPECIAL
No.71
51
真治
著
:
オーム社
OP アンプから始めるアナログ技術
付録
プログラムリスト
52
ストップウォッチ
53
#include <htc.h>
__CONFIG(CCPRB3 & LVPDIS & BORDIS &UNPROTECT & MCLRDIS & PWRTDIS
& WDTDIS & XT);
__CONFIG(FCMDIS & IESODIS);
// PIC16F88 のコンフィグレーション
#define _XTAL_FREQ 4000000
unsigned char pattern[10] = {
0b11000000,
//0 のパターン
0b11111001,
//1 のパターン
0b10100100,
//2 のパターン
0b10110000,
//3 のパターン
0b10011001,
//4 のパターン
0b10010010,
//5 のパターン
0b10000010,
//6 のパターン
0b11011000,
//7 のパターン
0b10000000,
//8 のパターン
0b10010000
//9 のパターン
};
unsigned char keta[6];
unsigned char pressed,pressed2,mode,state;
main()
{
ANSEL = 0;
//A/D 変換、利用しない
TRISA = 0b00110000; //RA4,5 入力設定、RA0-3 出力設定
TRISB = 0;
//PORTB 全出力設定
T1CON = 0b00000000; //timer1 on prescaler 1:1
CCPR1H = 0x27;
CCPR1L = 0x0f; //limit count 9999
CCP1CON = 0b00001011; //compare special ebent trigger
CCP1IE= 1;
//ccp1 interrupt enable
CCP1IF=0;
//PEIE = 1;
54
//GIEO = 1;
INTCON = 0b11000000; //gie = 1, geie = 1
keta[0] = 0;
keta[1] = 0;
keta[2] = 0;
keta[3] = 0;
keta[4]=0;
keta[5]=0;
pressed=0;
pressed2=0;
state=0; //stop state
mode=0; //10msec display, mode11sec desplay
while(1){
PORTA = 0b00000111;
if(!mode)
PORTB = pattern[keta[0]];
else
PORTB=(pattern[keta[2]] & 0b01111111);
__delay_ms(2);
PORTA = 0b00001011;
if(!mode)
PORTB =pattern[keta[1]];
else
PORTB=pattern[keta[3]];
__delay_ms(2);
PORTA = 0b00001101;
if(!mode)
PORTB = (pattern[keta[2]]& 0b01111111 );
else
PORTB=(pattern[keta[4]] &0b01111111);
55
__delay_ms(2);
PORTA = 0b00001110;
if(!mode)
PORTB =pattern[keta[3]];
else
PORTB=pattern[keta[5]];
__delay_ms(2);
if (!RA4){
if(pressed==1){
if(!state){
T1CON= 1;
state=1;
}else{
T1CON=0;
state=0;
}
pressed=2;
}else if(!pressed){
pressed = 1;
}
}
if(RA4) pressed=0;
if (!RA5){
if(pressed2==1){
mode=!mode;
}
if(pressed2==125 && !state) {
keta[0]=keta[1]=keta[2]=keta[3]=keta[4]=keta[5]=0;
}
if(pressed2 < 250)pressed2++;
}
if(RA5) pressed2=0;
}
56
}
interrupt changetime()
{
if (CCP1IF ){
CCP1IF=0;
keta[0]++;
if(keta[0] == 10){
keta[0] = 0;
keta[1]++;
if(keta[1] == 10){
keta[1]=0;
keta[2]++;
if(keta[2]==10){
keta[2]=0;
keta[3]++;
if(keta[3]==6){
keta[3]=0;
keta[4]++;
if(keta[4]==10){
keta[4]=0;
keta[5]++;
if (keta[5]==10)keta[5]=0;
}
}
}
}
}
}
}
57
ボイスレコーダー
58
#include<htc.h>
__CONFIG(CCPRB3 & LVPDIS & BORDIS & UNPROTECT & MCLRDIS & PWRTDIS
& WDTDIS & INTIO);
__CONFIG(FCMDIS & IESODIS);
#define _XTAL_FREQ 4000000 //コンパイラに 4MHz 使用を教える
void t0delay10m(void);
void t0delay100m(void);
unsigned char bcd_val,prev_sw7,mode,i;
main()
{
OSCCON = 0b01100000;
ANSEL = 0;
// クロック4MHz を利用
// アナログポートを使用しない
OPTION = 0b00000101;
//PORTB の内部プルアップ有効,プリスケーラ1:6
4
//
TRISA = 0b11111110;
// RA5 は入力
//
TRISB = 0b11001111;
// RB4-6 出力
TRISA = 0b00100000;
// RA5 は入力
TRISB = 0b10001111;
// RB4-6 出力
//
T1CON = 0b0000000;
//タイマー1 プリスケーラ1:1 内部クロ
ック利用
T2CON = 0b00100010;
//タイマー2
プリスケーラ 1:16 ポストスケ
ーラ 1:5
PR2 = 124;
//上限値 125 回で0に戻る
/*
ピンの接続
59
RA0->M8
RB0=BCD1
RA1->M1
RB1=BCD2
RA2->M2
RB2=BCD4
RA3->M3
RB3=BCD8
RA4->M4
RB4=MSEL1
RA5->sw
RB5=MSEL2
RA6->M5
RB6=M7
RA7->M6
RB7=sw
bcd_val にはbcdスイッチの値が入る
prev_sw7 には前回の RB7 のスイッチが入る。1で押している。0で離している。
2メッセージモード専用プログラム
*/
PORTA = 0b11011110;
PORTB = 0b01100000;
//msel1 low, msel2 high
prev_sw7 = 0; //RB7 のスイッチはまだ押されていない
while (1){
bcd_val = ( ~PORTB ) & 0x0f;
//BCD スイッチの値を読む
if(RB7 == 0){
t0delay10m();
if(RB7 == 0) {
if(prev_sw7 == 0){
if (bcd_val == 0 || bcd_val == 9){
}else{
}
prev_sw7= 1;
}
}
}else prev_sw7=0;
60
if (RA5 == 0) {
t0delay10m();
if (RA5 == 0){
if(bcd_val< 5) PORTA=0b11011101;
else PORTA=0b11011011;
}
}else {
PORTA = 0b11011111;
}
t0delay100m();
}
}
void t0delay10m(void)
{
TMR2 = 0;
TMR2ON = 1;
//タイマー2 を動かす
TMR2IF = 0;
while(TMR2IF == 0){}
TMR2ON = 0;
//タイマー2 を止める
}
void t0delay100m(void)
{
for(i = 0; i < 10; i++) t0delay10m();
}
61
温湿度計
62
#include <pic.h>
__CONFIG(
FOSC_INTOSC
&PWRTE_OFF
&
& WDTE_OFF
BOREN_OFF
&CP_OFF
&
MCLRE_OFF
&FCMEN_OFF & IESO_OFF &CPD_OFF &
CLKOUTEN_OFF);
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_ON & LVP_OFF );
#define _XTAL_FREQ
4000000
//コンパイラにクロック 4MHz 使用を教える
void writeLCD(unsigned char data, unsigned char di, unsigned char cs);
void LCD_clear(void);
void LCD_init(void);
void LCD_disp(const unsigned char pat[][128]);
void disp_numA(unsigned char y, unsigned char x, unsigned char cs, unsigned char
num);
void disp_numB(unsigned char y, unsigned char x,unsigned char cs);
void disp_numC(unsigned char y, unsigned char x,unsigned char cs);
void to4keta(unsigned intatai);
void to4keta2(unsigned intatai);
void to4keta3(unsigned intatai);
void to4keta4(unsigned intatai);
float cal5do(float x);
float cal15do(float x);
float cal25do(float x );
float cal35do(float x );
float cal45do(float x );
const unsigned char ondohyouji[8][128] ={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x2A,
0x2A,0x2A,0x2A,0xFE,0x00,0x00,0x08,0x08,0x88,0x68,0x18,0x0E,0x08,0x08,0xE8,0x0
8,
0x08,0x08,0x08,0x00,0xE0,0x10,0x08,0x04,0x04,0xFC,0x04,0x04,0x04,0x08,0x10,0xE0,
0x00,0x00,0x10,0x22,0x04,0x00,0x00,0x7C,0x54,0x54,0x54,0x54,0x54,0x7C,0x00,0x00,
63
0x00,0xFC,0x04,0x24,0x24,0xF4,0xA4,0xA6,0xA4,0xF4,0x24,0x24,0x04,0x00,0x00,0x00
,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x22,0x04,0x00,
0x00,0x3E,0x2A,0xAA,0x2A,0xAA,0x2A,0x3E,0x00,0x00,0x00,0xFC,0x04,0x24,0x24,0x
F4,
0xA4,0xA6,0xA4,0xF4,0x24,0x24,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x04,0x24,0x20,0x11,0x0F,
0x01,0x3F,0x21,0x21,0x30,0x00,0x02,0x01,0x3F,0x00,0x20,0x21,0x21,0x21,0x3F,0x21,
0x21,0x21,0x20,0x00,0x03,0x04,0x08,0x08,0x06,0x01,0x10,0x10,0x10,0x08,0x04,0x03,
0x00,0x00,0x30,0x0C,0x03,0x00,0x20,0x3E,0x22,0x3E,0x22,0x3E,0x22,0x3E,0x20,0x00
,0x30,0x0F,0x00,0x20,0x22,0x26,0x2A,0x12,0x12,0x2A,0x26,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0C,0x03,0x00,
0x22,0x2C,0x20,0x3F,0x20,0x3F,0x20,0x28,0x26,0x00,0x30,0x0F,0x00,0x20,0x22,0x26,
0x2A,0x12,0x12,0x2A,0x26,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x30,0x80,0x40,
0x20,0x10,0x10,0x10,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,
64
0x20,0x40,0x40,0x40,0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE0,0x10,0xE0,0x00,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x60,0x19,0x06,0x39,0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char lm35d[8][128] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x44,0x08,0x00,0x7C,0x54,0x54,0x54,0x7C,0x00,0x00,0x00,0x00,0xF8,0x28,
0x28,0xF8,0xA8,0xAC,0xA8,0xF8,0x28,0x28,0x00,0x54,0x54,0x54,0x54,0x00,0x94,0x98
,0xF0,0x98,0x94,0x90,0x00,0x90,0xE8,0xA4,0x90,0xC0,0x00,0xF8,0x88,0xF8,0x88,0xF
8,
0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x48,0x28,0x88,0x48,0xB8,0x4C,0x78,0x08,0x08,
0x28,0x48,0x00,0x10,0xFC,0x80,0x10,0xF8,0x34,0x14,0x7C,0x50,0xF0,0x00,0x00,0x90,
65
0x90,0x90,0x90,0x90,0x10,0xFC,0x10,0x14,0x18,0x10,0x00,0x04,0x08,0x30,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x98,0x86,0x90,0x9F,0x91,0x9F,0x91,0x9F,0x91,0x9F,0x90,0x80,0x98,0x87,0x90,
0x92,0x96,0x8A,0x8A,0x8A,0x96,0x90,0x90,0x80,0x9D,0x95,0x95,0x9D,0x80,0x84,0x84
,0x9F,0x84,0x84,0x84,0x80,0x8E,0x80,0x9F,0x80,0x8E,0x80,0x9F,0x90,0x9F,0x90,0x9F,
0x80,0x80,0x83,0x8C,0x90,0x80,0x80,0x90,0x94,0x94,0x8A,0x8B,0x85,0x8D,0x8B,0x90
,0x90,0x90,0x80,0x91,0x9F,0x80,0x92,0x8A,0x86,0x83,0x82,0x86,0x8A,0x92,0x80,0x90,
0x90,0x9F,0x88,0x88,0x80,0x80,0x83,0x84,0x88,0x9C,0x80,0x90,0x88,0x86,0x81,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0xE0,0x80,0x00,0x80,0xE0,0x40,0x20,0x20,
0xC0,0x00,0xE0,0xA0,0xA0,0x20,0x00,0x00,0xC0,0x20,0x10,0x00,0x00,0x80,0x60,0xE0
,0x00,0x40,0x20,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x20,0xC0,0x00,
0x20,0x50,0x20,0xC0,0x20,0x20,0x20,0x20,0x40,0x00,0x00,0x00,0x40,0x20,0xF0,0x20,
0x40,0x00,0x00,0x00,0x10,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x00,0x0F,0x01,0x0E,0x01,0x0F,0x04,0x09,0x09,
0x06,0x00,0x04,0x08,0x08,0x07,0x00,0x00,0x07,0x08,0x10,0x00,0x06,0x05,0x04,0x0F,
0x04,0x04,0x09,0x09,0x06,0x00,0x08,0x08,0x00,0x00,0x00,0x0C,0x0A,0x09,0x08,0x00,
0x00,0x00,0x00,0x07,0x08,0x08,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,
0x00,0x00,0x00,0x00,0x10,0x08,0x07,0x00,0x00,0x00,0x7C,0x13,0x13,0x7C,0x00,0x60,
0x18,0x06,0x01,0x00,0x7F,0x41,0x41,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
66
0x40,0x88,0x10,0x00,0xF8,0xA8,0xA8,0xA8,0xF8,0x00,0x00,0x00,0x00,0xF0,0x50,0x50
,
0xF0,0x50,0x58,0x50,0xF0,0x50,0x50,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0xC0,
0x30,0x08,0x00,0x00,0x00,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x00,
0xF0,0x10,0x10,0x20,0xC0,0x00,0x80,0xE0,0x18,0x00,0xD0,0x10,0xD0,0x78,0x50,0xD
0,
0x10,0x00,0x00,0x08,0x30,0xC0,0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x00,0x60,0x10,
0x10,0xE0,0x00,0x00,0xE0,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x0C,0x20,0x3E,0x22,0x3E,0x22,0x3E,0x22,0x3E,0x20,0x00,0x30,0x0F,0x20,0x24
,
0x2D,0x15,0x15,0x15,0x2D,0x20,0x20,0x00,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x07,
0x18,0x20,0x00,0x00,0x1E,0x05,0x04,0x05,0x1E,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,
0x1F,0x10,0x10,0x08,0x07,0x00,0x00,0x3F,0x00,0x00,0x3F,0x20,0x2F,0x29,0x29,0x2F,
0x20,0x00,0x00,0x20,0x18,0x07,0x00,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x18,0x16,
0x11,0x10,0x00,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char heikin1[8][128] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x44,0x08,0x00,0x7C,0x54,0x54,0x54,0x7C,0x00,0x00,0x00,0x00,0xF8,0x28,
0x28,0xF8,0xA8,0xAC,0xA8,0xF8,0x28,0x28,0x00,0x54,0x54,0x54,0x54,0x00,0x94,0x98
,0xF0,0x98,0x94,0x90,0x00,0x90,0xE8,0xA4,0x90,0xC0,0x00,0xF8,0x88,0xF8,0x88,0xF
8,
0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x48,0x28,0x88,0x48,0xB8,0x4C,0x78,0x08,0x08,
0x28,0x48,0x00,0x10,0xFC,0x80,0x10,0xF8,0x34,0x14,0x7C,0x50,0xF0,0x00,0x00,0x90,
67
0x90,0x90,0x90,0x90,0x10,0xFC,0x10,0x14,0x18,0x10,0x00,0x04,0x08,0x30,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x98,0x86,0x90,0x9F,0x91,0x9F,0x91,0x9F,0x91,0x9F,0x90,0x80,0x98,0x87,0x90,
0x92,0x96,0x8A,0x8A,0x8A,0x96,0x90,0x90,0x80,0x9D,0x95,0x95,0x9D,0x80,0x84,0x84
,
0x9F,0x84,0x84,0x84,0x80,0x8E,0x80,0x9F,0x80,0x8E,0x80,0x9F,0x90,0x9F,0x90,0x9F,
0x80,0x80,0x83,0x8C,0x90,0x80,0x80,0x90,0x94,0x94,0x8A,0x8B,0x85,0x8D,0x8B,0x90
,
0x90,0x90,0x80,0x91,0x9F,0x80,0x92,0x8A,0x86,0x83,0x82,0x86,0x8A,0x92,0x80,0x90,
0x90,0x9F,0x88,0x88,0x80,0x80,0x83,0x84,0x88,0x9C,0x80,0x90,0x88,0x86,0x81,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFE,0x80,0x80,0x80,0x00,0xFE,0x18,0xE0,0x18,0xFE,0x44,0x92,0x92,0x6C,0x00,0x4
E,
0x8A,0x8A,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFE,0x80,0x80,0x80,0x00,0xFE,0x18,0xE0,0x18,0xFE,0x7C,0x92,0x92,0x64,0x00,0x0
0,
0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x24,0x48,0x00,0xBC,0xAC,0xAC,0xAC,0xBC,0x00,0x00,0x00,0xF8,0xA8,0xA8,0x
F8,
0xAC,0xF8,0xA8,0x28,0x00,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0xF0,0x08,0x04,0x00,0x0
0,
0xF0,0x08,0x04,0x00,0x00,0xF0,0x08,0x04,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x60,
0x80,0x60,0xF8,0x10,0x48,0x48,0xB0,0x00,0x38,0x28,0x28,0xC8,0x00,0x00,0xE0,0x10,
68
0x08,0xF8,0x08,0x08,0x10,0xE0,0x00,0xE0,0x98,0x98,0xE0,0x00,0x00,0xC0,0x30,0x0C
,
0x00,0xF8,0x08,0x08,0xF0,0x00,0x04,0x08,0xF0,0x00,0x00,0x00,0xC0,0x30,0x0C,0x00,
0x10,0x88,0x48,0x30,0x00,0xF0,0x08,0x08,0xF0,0x00,0x04,0x08,0xF0,0x00,0x00,0x00,
0x40,0xF0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x04,0x03,0x04,0x07,0x04,0x07,0x04,0x07,0x04,0x00,0x06,0x01,0x04,0x05,0x02,
0x02,0x02,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x22,0x14,0x00,0x00,
0xC1,0x22,0x14,0x00,0xE0,0x01,0x02,0x04,0x00,0xE3,0x82,0x02,0x82,0xE0,0xC3,0x20
,
0x23,0x40,0x03,0x01,0x42,0xE2,0x01,0x00,0x01,0x82,0x42,0x21,0xE0,0x20,0x21,0x42,
0x82,0x01,0x80,0x64,0x62,0x81,0x00,0x03,0x00,0xC0,0x33,0x00,0xE3,0x20,0x20,0xC0,
0x00,0x13,0x22,0xC2,0x01,0x00,0x04,0x02,0xC1,0x30,0x00,0x03,0x40,0xE0,0x00,0x00,
0xC3,0x22,0x22,0xC2,0x00,0x01,0x02,0x02,0x01,0x00,0xC4,0x22,0x21,0x40,0x00,0xC0,
0x20,0x21,0xC0,0x00,0xC0,0x20,0x20,0xC0,0x00,0x10,0x20,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x87,0x08,0x10,0x00,0x00,
0x07,0x08,0xD0,0x00,0x0F,0x88,0x88,0x08,0x00,0x0F,0x01,0x0E,0x01,0x0F,0x07,0x09,
0x09,0x06,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x08,0x08,0x07,0x00,0x10,0x08,
0x07,0x00,0x0F,0x02,0x02,0x0F,0x00,0x0C,0x03,0x00,0x00,0x00,0x0F,0x08,0x08,0x07,
0x00,0x10,0x08,0x07,0x00,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,
0x07,0x08,0x08,0x07,0x00,0x01,0x01,0x01,0x01,0x00,0x07,0x09,0x09,0x06,0x00,0x07,
0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x07,0x00,0x10,0x08,0x07,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x1F,0x00,0x00,0x30,
0x0C,0x03,0x00,0x00,0x31,0x28,0x24,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char lm61biz[8][128] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x44,0x08,0x00,0x7C,0x54,0x54,0x54,0x7C,0x00,0x00,0x00,0x00,0xF8,0x28,
69
0x28,0xF8,0xA8,0xAC,0xA8,0xF8,0x28,0x28,0x00,0x54,0x54,0x54,0x54,0x00,0x94,0x98
,
0xF0,0x98,0x94,0x90,0x00,0x90,0xE8,0xA4,0x90,0xC0,0x00,0xF8,0x88,0xF8,0x88,0xF8
,
0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x48,0x28,0x88,0x48,0xB8,0x4C,0x78,0x08,0x08,
0x28,0x48,0x00,0x10,0xFC,0x80,0x10,0xF8,0x34,0x14,0x7C,0x50,0xF0,0x00,0x00,0x90,
0x90,0x90,0x90,0x90,0x10,0xFC,0x10,0x14,0x18,0x10,0x00,0x04,0x08,0x30,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x98,0x86,0x90,0x9F,0x91,0x9F,0x91,0x9F,0x91,0x9F,0x90,0x80,0x98,0x87,0x90,
0x92,0x96,0x8A,0x8A,0x8A,0x96,0x90,0x90,0x80,0x9D,0x95,0x95,0x9D,0x80,0x84,0x84
,
0x9F,0x84,0x84,0x84,0x80,0x8E,0x80,0x9F,0x80,0x8E,0x80,0x9F,0x90,0x9F,0x90,0x9F,
0x80,0x80,0x83,0x8C,0x90,0x80,0x80,0x90,0x94,0x94,0x8A,0x8B,0x85,0x8D,0x8B,0x90
,
0x90,0x90,0x80,0x91,0x9F,0x80,0x92,0x8A,0x86,0x83,0x82,0x86,0x8A,0x92,0x80,0x90,
0x90,0x9F,0x88,0x88,0x80,0x80,0x83,0x84,0x88,0x9C,0x80,0x90,0x88,0x86,0x81,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x80,0x40,0x40,0x80,
0x00,0x00,0x80,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x00,0x80,0x40,0x40,0x80,0x00,0x40,
0xA0,0x40,0x80,0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,
0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0x10,0x10,0x10,0x00,0x1F,0x03,0x1C,0x03,0x1F,0x0F,0x12,0x12,0x0C,
0x00,0x00,0x00,0x1F,0x00,0x00,0x1F,0x11,0x11,0x0E,0x00,0x00,0x00,0x1F,0x00,0x00,
0x19,0x15,0x13,0x11,0x00,0x00,0x0F,0x10,0x20,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,
0x00,0x00,0x0F,0x10,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x08,0x10,0x3F,0x10,0x08,
0x00,0x00,0x00,0x20,0x10,0x0F,0x00,0x00,0x00,0x00,0x7C,0x13,0x13,0x7C,0x00,0x60,
0x18,0x06,0x01,0x00,0x7F,0x41,0x41,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
70
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x88,0x10,0x00,0xF8,0xA8,0xA8,0xA8,0xF8,0x00,0x00,0x00,0x00,0xF0
,
0x50,0x50,0xF0,0x50,0x58,0x50,0xF0,0x50,0x50,0x00,0x40,0x40,0x40,0x40,0x00,0x00,
0x00,0x20,0xF0,0x00,0x00,0x00,0xE0,0x10,0x10,0xE0,0x00,0x00,0xE0,0x10,0x10,0xE0
,
0x00,0x00,0xE0,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xE0,0x10,
0x10,0x60,0x00,0x00,0xE0,0x10,0x10,0xE0,0x00,0x00,0xE0,0x10,0x10,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x08,0x00,0x00,0x00,0xC0,0x30,0xC0,
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x00,0xF0,0x10,0x10,0x20,0xC0,0x00,0x00,0x08,
0x30,0xC0,0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x00,0x60,0x10,0x10,0xE0,0x00,0x00,
0x00,0x00,0x30,0x0C,0x20,0x3E,0x22,0x3E,0x22,0x3E,0x22,0x3E,0x20,0x00,0x30,0x0F
,
0x20,0x24,0x2D,0x15,0x15,0x15,0x2D,0x20,0x20,0x00,0x02,0x02,0x02,0x02,0x00,0x00,
0x00,0x00,0x1F,0x00,0x00,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,0x0F,0x10,0x10,0x0F,
0x00,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,0x01,0x01,0x0F,0x01,0x01,0x00,0x0F,0x11,
0x11,0x0E,0x00,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,0x0F,0x10,0x10,0x0F,0x00,0x00,
0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x07,0x18,0x20,0x00,0x00,0x1E,0x05,0x04,0x05,
0x1E,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x1F,0x10,0x10,0x08,0x07,0x00,0x00,0x20,
0x18,0x07,0x00,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x18,0x16,0x11,0x10,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
71
const unsigned char situdosyousai[8][128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x44,0x08,0x00,0x7C,0x54,0x54,0x54,0x54,0x54,0x7C,0x00,0x00,0xF8,0x28,
0x28,0xF8,0xA8,0xAC,0xA8,0xF8,0x28,0x28,0x00,0x54,0x54,0x54,0x54,0x00,0x94,0x98
,
0xF0,0x98,0x94,0x90,0x00,0x90,0xE8,0xA4,0x90,0xC0,0x00,0xF8,0x88,0xF8,0x88,0xF8
,
0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x48,0x28,0x88,0x48,0xB8,0x4C,0x78,0x08,0x08,
0x28,0x48,0x00,0x10,0xFC,0x80,0x10,0xF8,0x34,0x14,0x7C,0x50,0xF0,0x00,0x00,0x90,
0x90,0x90,0x90,0x90,0x10,0xFC,0x10,0x14,0x18,0x10,0x00,0x04,0x08,0x30,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x98,0x86,0x80,0x80,0x96,0x90,0x9F,0x90,0x9F,0x90,0x96,0x80,0x98,0x87,0x90,
0x92,0x96,0x8A,0x8A,0x8A,0x96,0x90,0x90,0x80,0x9D,0x95,0x95,0x9D,0x80,0x84,0x84
,
0x9F,0x84,0x84,0x84,0x80,0x8E,0x80,0x9F,0x80,0x8E,0x80,0x9F,0x90,0x9F,0x90,0x9F,
0x80,0x80,0x83,0x8C,0x90,0x80,0x80,0x90,0x94,0x94,0x8A,0x8B,0x85,0x8D,0x8B,0x90
,
0x90,0x90,0x80,0x91,0x9F,0x80,0x92,0x8A,0x86,0x83,0x82,0x86,0x8A,0x92,0x80,0x90,
0x90,0x9F,0x88,0x88,0x80,0x80,0x83,0x84,0x88,0x9C,0x80,0x90,0x88,0x86,0x81,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7C,0x13,0x13,0x7C,0x00,0x60,0x18,0x06,0x01,0x00,0x7F,0x41,0x41,0x3E,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
72
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x00,0xE0,0xA0,0xA0,0xA0,0xA0,0xA0
,
0xE0,0x00,0x00,0xC0,0x40,0x40,0xC0,0x40,0x60,0x40,0xC0,0x40,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x00,0x00,0xC0,0x20,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x60,0x00,0xC0,0x40,0x40,0x80,0x00,0x00,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,
0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x60,0x00,0xC0,0x40,0x40,0x80,0x00,0x00,0x00,0x20,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x32,0x00,0x00,0xB3,0x82,0xFA,0x82,0xFA,0x82,
0xB3,0x00,0xC0,0x3F,0x81,0x91,0xB7,0x55,0x55,0x55,0xB7,0x81,0x81,0x00,0x09,0x09,
0x09,0x09,0x00,0x00,0x78,0x17,0x10,0x17,0x78,0x00,0x1B,0x04,0x3F,0x04,0x1B,0x00,
0x00,0x1F,0x60,0x80,0x00,0x00,0x78,0x17,0x10,0x17,0x78,0x00,0xC0,0x30,0x0E,0x01,
0x00,0x00,0x7F,0x40,0x40,0x20,0x1F,0x00,0x00,0x80,0x60,0x1F,0x00,0x00,0x1B,0x04,
0x3F,0x04,0x1B,0x00,0x00,0x1F,0x60,0x80,0x00,0x00,0x78,0x17,0x10,0x17,0x78,0x00,
0xC0,0x30,0x0E,0x01,0x00,0x00,0x7F,0x40,0x40,0x20,0x1F,0x00,0x00,0x80,0x60,0x1F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0x40,0xF8,0x40,
0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0C,0x02,0x00,0x00,0x80,0x70,
0x0C,0x70,0x80,0x00,0x00,0x00,0xE0,0x18,0x06,0x00,0xFC,0x04,0x04,0x08,0xF0,0x00,
0x00,0x02,0x0C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0xF8,0x40,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x04,0x04,0x04,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x04,0x04,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x08,0x00,0x00,0x07,0x01,
0x01,0x01,0x07,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x00,
0x00,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,0x00,0x00
};
73
const unsigned char tyuui[6][64]={
0x00,0x00,0x00,0x40,0x50,0x50,0xD0,0x7C,0xD0,0x50,0x50,0xC0,0x20,0x20,0x20,0xF
C,
0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,
0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0xF0,0x10,
0x10,0x10,0x10,0x10,0x10,0x1C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x4A,0x49,0x48,0x7E,0x29,0x29,0x29,0x81,0x40,0x32,0x0C,0x0B,
0x10,0x00,0x1F,0x20,0x70,0x00,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,
0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x20,0x11,0x88,0x7F,0x00,
0x00,0x01,0xF9,0x01,0x01,0x01,0xFF,0x21,0x21,0x21,0x21,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x00,0x03,0x0C,0x00,0x00,0x00,0x03,0x0C,
0x00,0x00,0x01,0x02,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x01,0x00,0x00,
0x08,0x08,0x0F,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x10,
0x20,0x00,0x00,0x80,0x80,0x80,0x80,0x88,0x90,0xA0,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x20,0x20,0x60,0xA0,0x20,0x20,0x38,0x20,0x20,0xA0,0x60,0x20,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,
0x60,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,0x00,0x00,
0x00,0x01,0x01,0x01,0x7D,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7D,0x01,
0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x06,0x01,
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x00,0x10,0x08,0x06,0x00,0x00,0x0F,0x10,0x10,0x11,0x12,0x10,0x10,0x1C,0x00,0x00,
0x02,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char keikai[6][64]={
0x00,0x00,0x00,0x40,0x50,0x50,0xD0,0x7C,0xD0,0x50,0x50,0xC0,0x20,0x20,0x20,0xF
C,
0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,
0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0xF0,0x10,
0x10,0x10,0x10,0x10,0x10,0x1C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x4A,0x49,0x48,0x7E,0x29,0x29,0x29,0x81,0x40,0x32,0x0C,0x0B,
0x10,0x00,0x1F,0x20,0x70,0x00,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,
74
0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x20,0x11,0x88,0x7F,0x00,
0x00,0x01,0xF9,0x01,0x01,0x01,0xFF,0x21,0x21,0x21,0x21,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x00,0x03,0x0C,0x00,0x00,0x00,0x03,0x0C,
0x00,0x00,0x01,0x02,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x01,0x00,0x00,
0x08,0x08,0x0F,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x90,0xD0,
0x78,0x50,0xD0,0x78,0x50,0xD0,0x10,0x40,0x20,0xF8,0x20,0x20,0xE0,0x20,0x20,0x00,
0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xF8,0x40,0x40,0x48,
0x50,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x20,0x23,
0x22,0xAA,0xAB,0xA8,0xAC,0xAB,0xA8,0xA8,0xAC,0xAA,0xA9,0x21,0x22,0x24,0x24,0
x00,
0x00,0x10,0x10,0x10,0xFF,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x0F,0x70,0x80,0x60,
0x18,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1E,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x1E,0x00,0x00,0x00,0x00,
0x00,0x08,0x04,0x03,0x00,0x00,0x00,0x17,0x10,0x08,0x08,0x04,0x02,0x01,0x01,0x06,
0x08,0x10,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char kesu[6][64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
75
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char sin[20] = {16, 20, 25, 28, 30, 31, 30, 28, 25, 20, 16, 11, 6, 3, 1, 0, 1, 3,
6, 11
};
Constunsigned
char
num_0a[20]
=
{0x00,0xF8,0x04,0x02,0x02,0x04,0xF8,0x00,0x00,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00};
const
unsigned
char
num_1a[20]
=
{0x00,0x00,0x04,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00};
const
unsigned
char
num_2a[20]
=
{0x00,0x18,0x04,0x02,0x02,0xC4,0x38,0x00,0x00,0x00,
0x00,0x30,0x28,0x26,0x21,0x20,0x20,0x00,0x00,0x00};
const
unsigned
char
num_3a[20]
{0x00,0x18,0x04,0x82,0x82,0x44,0x38,0x00,0x00,0x00,
0x00,0x0C,0x10,0x20,0x20,0x11,0x0E,0x00,0x00,0x00};
76
=
const
unsigned
char
num_4a[20]
={0x00,0x00,0x80,0x60,0x18,0xFE,0x00,0x00,0x00,0x00,
0x00,0x06,0x05,0x04,0x04,0x3F,0x04,0x00,0x00,0x00};
const
unsigned
char
num_5a[20]
=
{0x00,0xFE,0x42,0x22,0x22,0x42,0x82,0x00,0x00,0x00,
0x00,0x08,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00};
const
unsigned
char
num_6a[20]
=
{0x00,0xF8,0x84,0x42,0x42,0x84,0x18,0x00,0x00,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00};
const
unsigned
char
num_7a[20]
=
{0x00,0x02,0x02,0x02,0x82,0x72,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x03,0x00,0x00,0x00,0x00,0x00};
const
unsigned
char
num_8a[20]
=
{0x00,0x38,0x44,0x82,0x82,0x44,0x38,0x00,0x00,0x00,
0x00,0x0E,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00};
const
unsigned
char
num_9a[20]
={0x00,0x78,0x84,0x02,0x02,0x84,0xF8,0x00,0x00,0x00,
0x00,0x0C,0x10,0x21,0x21,0x10,0x0F,0x00,0x00,0x00};
unsigned char i,out1, pos, step, step2, s, tenmetsu;
unsigned char uchiwake;
unsigned char row,column;
unsigned intkekka, kekka1, kekka2, kekka3, t, kekka4,
heikin , heikin2, heikin3,
heikin4, hk, goukei, p;
unsigned char val10, val1,vals, vol10, vol1, vols, vel10, vel1, vels, keta1,keta2, keta3,
keta4;
unsigned intondo, ondo2, heikinondo;
unsigned char ad1000, ad100, ad10, ad1;
unsigned char ad1000s, ad100s, ad10s, ad1s;
unsigned char ad1000t, ad100t, ad10t, ad1t;
77
unsigned char ad1000f, ad100f, ad10f, ad1f;
unsigned char out, out_DA;
unsigned char mode, pressed1, pressed2, pressed3;
float x1, s1, s2, savg, c1;
unsigned char shitsudo;
unsigned char prev_sw6, prev_sw7, kousin, cond, frag;
main()
{
OSCCON=0b01101000;
//4MHz を利用
ANSELA=0b00101011;
//RA0,RA1,RA2,RA4 のみアナログ入力
ANSELB = 0;
//ポート B はアナログポートとして使わない
ADCON0 = 1;
//ADC 有効
FVRCON = 0b10001010; /固定電圧レファレンス使用 D/A 及び A/D の電圧を
2.048V にする
ADCON1 = 0b10010011;
OPTION_REG = 0;
WPUB = 0b11000001;
//RB7,RB6,RB0 プルアップ
TRISA = 0b00101011;
//RA0,RA1,RA3 は入力 RA2,RA4-RA5 は出力
TRISB = 0b11000000;
//RB6,RB7 は入力、ほかは出力
TRISC = 0;
//全出力
T1CON = 1;
//プリスケーラ1:1タイマーオン
DACCON0 = 0b10101000; //D/A コンバータ有効、GND-FVR1 間を31分割
CCP1CON = 0b00001011;
//スペシャルイベントトリガー
CCPR1H = 0x00;
//タイマーの値のセット 1000(1ms)
CCPR1L = 0x64;
PEIE = 1;
CCP1IE = 1;
out = 0;
out_DA = 0;
LCD_init();
78
//LCD_disp(pattern);
//for ( i = 0; i < 30; i++ ) __delay_ms(100);
LCD_clear();
pos = 0;
CCP1IF = 0;
GIE = 1;
//割り込み許可
step= 0;
step2 = 20;
uchiwake = 0;
heikin= 0;
heikin2= 0;
heikin3 = 0;
kekka4 = 0;
t=0;
ADPREF1 = 1;
tenmetsu=0;
mode=0;
pressed1 = 0;
pressed2= 0;
pressed3 = 0;
prev_sw6 = 0;
prev_sw7 = 0;
kousin = 1;
ondo = 0;
shitsudo = 0;
kekka1 = 0;
kekka2 = 0;
frag=0;
while (1){
79
if(mode == 0){
//最初の画面表示
LCD_disp(ondohyouji);
mode = 1;
}
if( (mode == 1) && (kousin == 1) ){
//温度と湿度を表示
disp_numA(3,0,2,keta4);
disp_numA(3,7,2,keta3);
disp_numA(3,17,2,keta2);
disp_numA(3,31,2,keta1);
disp_numA(6,21,2,vel1);
disp_numA(6,31,2,vels);
if((ondo> 309) && (frag ==0) && (ondo< 1000)){
disp_numB(2,3,1);
frag=1;
RB0 = 1;
}else if((ondo ==309) && (frag == 1) ){
disp_numC(2,3,1);
frag=0;
}
kousin = 0;
}
if(mode == 3){
//温度の詳細画面表示
if(cond == 0){
LCD_disp(heikin1);
}
80
if(cond == 1){
LCD_disp(lm35d);
}
if(cond == 2){
LCD_disp(lm61biz);
}
//LCD_disp(ondosyousai);
mode = 4;
}
if((mode == 4) && (kousin == 1)){
//別形式の温度表示
if(cond == 0){
disp_numA(2,20,1,ad1000);
disp_numA(2,30,1,ad100);
disp_numA(2,40,1,ad10);
disp_numA(2,50,1,ad1);
disp_numA(2,20,2,ad1000s);
disp_numA(2,30,2,ad100s);
disp_numA(2,40,2,ad10s);
disp_numA(2,50,2,ad1s);
}
if(cond == 1){
disp_numA(2,25,2,ad1000);
disp_numA(2,35,2,ad100);
disp_numA(2,45,2,ad10);
disp_numA(2,55,2,ad1);
}
if(cond == 2){
disp_numA(2,25,2,ad1000s);
disp_numA(2,35,2,ad100s);
disp_numA(2,45,2,ad10s);
disp_numA(2,55,2,ad1s);
81
}
kousin = 0;
}
if(mode == 5){
//湿度の詳細画面表示
LCD_disp(situdosyousai);
mode=6;
}
if((mode == 6) && (kousin == 1)){
//別形式の湿度表示
disp_numA(2,20,2,ad1000t);
disp_numA(2,30,2,ad100t);
disp_numA(2,40,2,ad10t);
disp_numA(2,50,2,ad1t);
kousin = 0;
}
if( uchiwake == 0 ) {
//
ADPREF1 = 1;
ADCON0 = 0b00000001;
//channel0 adon
}
if (uchiwake == 1 ) {
//
ADPREF1 = 0;
//vref+ <- Vdd
ADCON0 = 0b00010001; //channel4 adon
}
if (uchiwake == 2 ) {
//
ADPREF1 = 1;
ADCON0 = 0b0000101;
// channel1 adon (AN1)
}
__delay_us(20);
ADGO = 1;
82
while(ADGO){}
kekka = ADRESH*256 + ADRESL;
if( uchiwake == 0) heikin +=kekka;
if (uchiwake == 1) heikin2 +=kekka;
if (uchiwake == 2) heikin3 +=kekka;
uchiwake++;
if (uchiwake == 3) {
step++;
uchiwake = 0;
}
if(step == 10){
kekka1 = heikin / 20;
if(heikin> 8460 ) {
ondo = kekka1;
cond = 1;
}
else {
if( heikin2 < 6000 ) {
ondo = 1000 + 600 - heikin / 10;
cond = 2;
}
else {
kekka2 = heikin2 / 10 - 600;
ondo = (kekka1 + kekka2 ) /2;
cond = 0;
}
}
keta4 = ondo / 1000;
keta3 = ondo / 100-keta4 * 10;
keta2 = ondo / 10 - keta3 * 10-keta4*100;
83
keta1 = ondo % 10;
to4keta3(heikin3);
to4keta(heikin);
to4keta2(heikin2);
//kekka3 = heikin3 /15 ;
//vel10 = shitsudo / 100;
//vel1 = shitsudo / 10; // - vel10 * 10;
//vels= shitsudo % 10;
/*
disp_numA(6,14,2,ad1000t);
disp_numA(6,24,2,ad100t);
disp_numA(6,34,2,ad10t);
disp_numA(6,44,2,ad1t);
disp_numA(6,18,1,vel10);
disp_numA(6,28,1,vel1);
disp_numA(6,38,1,vels);
//disp_numA(2,18,1,vol10);
//disp_numA(2,28,1,vol1);
//disp_numA(2,38,1,vols);
disp_numA(3,18,1,val10);
disp_numA(3,28,1,val1);
disp_numA(3,38,1,vals);
/*disp_numA(0,14,2,ad1000);
disp_numA(0,24,2,ad100);
disp_numA(0,34,2,ad10);
84
disp_numA(0,44,2,ad1);
disp_numA(2,14,2,ad1000s);
disp_numA(2,24,2,ad100s);
disp_numA(2,34,2,ad10s);
disp_numA(2,44,2,ad1s);
*/
if( ondo<= 50) {
c1 = ( float )( ondo/ 10 );
x1 = ( float )( heikin3 /10 );
savg = cal5do( x1);
}
if( ondo> 1000) {
c1 = ( float )( (ondo-1000)/ 10 );
c1 = -c1;
x1 = ( float )( heikin3 /10 );
savg = cal5do( x1);
}
if( (ondo>50) && (ondo<=150) ){
c1 = ( float )( ondo/ 10 ) ;
x1 = ( float )( heikin3 /10 );
s1 = cal5do( x1);
s2 = cal15do( x1);
savg = (s1*(15.0 - c1) + s2 * (c1 - 5.0) )/10.0;
}
if( (ondo> 150) && (ondo<= 250)){
c1 = ( float )( ondo/ 10 ) ;
x1 = ( float )( heikin3 /10 );
85
s1 = cal15do(x1);
s2 = cal25do(x1);
savg = (s1*(25.0 - c1) + s2 * (c1 - 15.0) )/10.0;
}
if( (ondo> 250) && (ondo<= 350)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10 );
s1 = cal25do(x1);
s2=cal35do(x1);
savg = (s1*(35.0 - c1) + s2 * (c1 - 25.0) )/10.0;
}
if( (ondo> 350) && (ondo<= 450)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10);
s1 = cal35do(x1);
s2=cal45do(x1);
savg = (s1*(45.0 - c1) + s2 * (c1 - 35.0) )/10.0;
}
if((ondo>450) && (ondo< 1000)){
c1 = (float)(ondo/ 10) ;
x1 = (float)(heikin3 /10 );
savg= cal45do(x1);
}
if(savg< 0.0)savg = 0.0;
if(savg> 100.0)savg= 100.0;
shitsudo= (unsigned char )savg;
vel1 = shitsudo / 10; // - vel10 * 10;
vels= shitsudo % 10;
kousin = 1;
heikin = 0;
heikin2 = 0;
heikin3 = 0;
step= 0;
86
}
if(RB6 == 0){
__delay_ms(10);
if(RB6 == 0) {
if(prev_sw6 == 0){
if(mode == 4 )mode = 0;
else mode = 3;
prev_sw6= 1;
}
}
}else prev_sw6=0;
if(RB7 == 0){
__delay_ms(10);
if(RB7 == 0) {
if(prev_sw7 == 0){
if(mode == 6 )mode= 0;
else mode=5;
prev_sw7= 1;
}
}
}else prev_sw7=0;
}
}
void to4keta(unsigned intatai)
{
ad1000 = atai / 10000;
atai = atai - ad1000 * 10000;
87
ad100 = atai / 1000;
atai = atai - ad100 * 1000;
ad10 = atai / 100;
atai = atai - ad10 * 100;
ad1 = atai / 10;
}
void to4keta2(unsigned intatai)
{
ad1000s = atai / 10000;
atai = atai - ad1000s * 10000;
ad100s = atai / 1000;
atai = atai - ad100s * 1000;
ad10s = atai / 100;
atai = atai - ad10s * 100;
ad1s = atai / 10;
}
void to4keta3(unsigned intatai)
{
ad1000t = atai / 10000;
atai = atai - ad1000t * 10000;
ad100t = atai / 1000;
atai = atai - ad100t * 1000;
ad10t = atai / 100;
atai = atai - ad10t * 100;
ad1t = atai / 10;
}
void to4keta4(unsigned intatai){
ad1000f = atai / 10000;
atai = atai - ad1000f * 10000;
ad100f = atai / 1000;
atai = atai - ad100f * 1000;
ad10f = atai / 100;
88
atai = atai - ad10f * 100;
ad1f = atai / 10;
}
/*
グラフィック液晶にデータを書き込むルーチン
データは data に、di に 0 を渡すと命令に、di に 1 を渡すとデータ
cs に1を渡すとパネルの左半分、cs に2を渡すとパネルの右半分、cs に 0 を渡すと両方
*/
void writeLCD(unsigned char data, unsigned char di, unsigned char cs)
{
if(di == 0) out1=0b00000000;else out1=0b00000010;
//DI をセットする
if(cs == 1) out1 = out1 + 0x10;
else if (cs == 2) out1=out1 + 0x20;
else if (cs == 0) out1=out1 + 0x30;
PORTB=out1;
RB3=1;
//Enable high
PORTC=data;
//data out
RB3=0;
}
/*
グラフィック液晶の初期化。絵を表示
*/
void LCD_disp(const unsigned char pat[][128])
{
for( row = 0; row<8; row++ ){
writeLCD( 0xb8+row, 0,1 ); //左のパネルのページを row にセット
writeLCD( 0x40, 0, 1 );
//左のパネルにアドレスを左端にする
for ( column= 0; column < 64; column++ )
writeLCD( pat[row][column], 1, 1 );
//64 個のデータを書く
89
}
for( row = 0; row<8; row++ ){
writeLCD( 0xb8+row, 0, 2 ); //右のパネルのページを row にセット
writeLCD( 0x40, 0, 2 );
//右のパネルにアドレスを左端にする
for( column= 0;column<64;column++ )
writeLCD( pat[row][column+64],1, 2 );
//64 個のデータを書く
}
}
void LCD_clear(void){
for( row = 0; row<8; row++ ){
writeLCD( 0xb8+row, 0,0 ); //左のパネルのページを row にセット
writeLCD( 0x40, 0, 0 );
//左のパネルにアドレスを左端にする
for( column= 0; column < 64; column++ )
writeLCD (0, 1, 0 );
//64 個のデータを書く
}
}
void LCD_init(void){
writeLCD( 0b11000000, 0, 0 );
//データスタートラインを0にする
writeLCD( 0b00111111, 0, 0 );
//左右のパネルの表示オン
}
interrupt ccp1warikomi(void)
{
if ( CCP1IF ){
CCP1IF = 0;
//out = ~out;
//RA6 = out;
90
/*DACCON1 = sin[pos];
pos++;
if( pos == 20) pos = 0;
*/
if( pos< 5 ) out_DA += 6;
else out_DA -= 6;
pos++;
if( pos == 10 ) pos= 0;
DACCON1 = out_DA;
}
}
void disp_numA(unsigned char y, unsigned char x, unsigned char cs, unsigned char
num)
{
const unsigned char *ps;
//配列をポインタで取り出す
writeLCD( 0xb8 + y, 0, cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
switch(num){
case 0:
ps = num_0a;
break;
case 1:
ps = num_1a;
break;
case 2:
ps = num_2a;
break;
case 3:
91
ps = num_3a;
break;
case 4:
ps = num_4a;
break;
case 5:
ps = num_5a;
break;
case 6:
ps = num_6a;
break;
case 7:
ps = num_7a;
break;
case 8:
ps = num_8a;
break;
case 9:
ps = num_9a;
break;
}
for( column= 0; column < 10; column++ )
writeLCD( ps[column], 1, cs );
writeLCD( 0xb8+y + 1, 0,cs );
//10 個のデータを書く
//右か左のパネルのページを y 行にセットする
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x 行にセットする
for( column= 0; column < 10; column++ )
writeLCD( ps[10+column], 1, cs );
92
//10 個のデータを書く
}
void disp_numB(unsigned char y, unsigned char x,unsigned char cs)
{
writeLCD( 0xb8 + y, 0, cs );
//右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( tyuui[0][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 1, 0,cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( tyuui[1][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 2, 0,cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( tyuui[2][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 3, 0,cs ); //右か左のパネルのページを y 行にセ
ット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( tyuui[3][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 4, 0,cs );
//右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
93
writeLCD( tyuui[4][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 5, 0,cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( tyuui[5][column], 1, cs );
//10 個のデータを書く
}
void disp_numC(unsigned char y, unsigned char x,unsigned char cs)
{
writeLCD( 0xb8 + y, 0, cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs ); //右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( kesu[0][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 1, 0,cs ); //右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( kesu[1][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 2, 0,cs );
//右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( kesu[2][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 3, 0,cs );
//右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
94
for( column= 0; column < 64; column++ )
writeLCD( kesu[3][column], 1, cs ); //10 個のデータを書く
writeLCD( 0xb8+y + 4, 0,cs );
//右か左のパネルのページを y 行にセット
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( kesu[4][column], 1, cs );
//10 個のデータを書く
writeLCD( 0xb8+y + 5, 0,cs );
writeLCD( 0x40 + x, 0, cs );
//右か左のパネルのページを y 行にセット
//右か左のパネルにアドレスを x にする
for( column= 0; column < 64; column++ )
writeLCD( kesu[5][column], 1, cs );
//10 個のデータを書く
}
float cal5do(float x){
return (0.00018 * x * x-0.10845* x + 33.39);
}
float cal15do(float x){
return (0.00014 * x * x -0.05974 * x + 9.083);
}
float cal25do(float x ){
return (0.00022 * x * x - 0.19806 * x + 57.619);
}
float cal35do(float x ){
return (0.00026 * x * x -0.27251 *x + 86.084);
}
float cal45do(float x ){
return (0.00028 * x * x -0.32497 * 107.332);
}
95
Fly UP