A 回答 (10件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
まったく書けないの、それとも途中まで書いたの?
どちらにしても、どのような構造にするかまでは決まっていますか?
クロックは25MHz?
時計はタイマーの割り込みで時間を加算しているのですか?
時刻を刻むことができるなら、なにか構造体を定義して、そこに時間をセットしているんですよね、それとも別な機能を使っていますか?
この回答への補足
まったく書けません。
1つ目のスイッチで設定できるようにし、
2つ目でアップ、3つ目でセットできるようにできたらいいかと思います。
クロックは25MHzです。
割り込みを使って時間を加算しています。
このような感じです↓
/*メイン関数*/
int main(void)
{
lcd_init();
lcd_puts(str);
start_itu0();
EI;
for(;;) {
if (cnt >=100) {
cnt = 0;
sec++;
if (sec >=60) {
sec = 0;
min++;
if (min >= 60) {
min = 0;
hour++;
if (hour >= 24) hour = 0;
}
str[6] = '0' + hour /10;
str[7] = '0' + hour %10;
str[9] = '0' + min /10;
str[10] = '0' + min %10;
str[12] = '0' + sec /10;
str[13] = '0' + sec %10;
lcd_home();
lcd_puts(str);
}
}
}
return 0;
}
/*IMIA0割り込み処理関数*/
void int_imia0(void)
{
DI; /*割り込み禁止*/
TSR0 &=0xfe;
cnt++;
EI; /*割り込み許可*/
}
No.2
- 回答日時:
こんにちは。
実現方法は何パターンか存在しますが、簡単(?)な方法を記述します。
まず10~20ms定周期処理を作りボタンの入力処理を作る。
ボタン入力に関してですが、内部プルアップで未入力時はHi、入力時は
LOがポートに入るものとして話を進めます。
まず入力ポートがHiからLOに切り替わった地点から3回10~20ms
間隔でポートサンプリングし3回Loを検出した段階で入力確定とします。
(チャタリングによる誤入力防止)
入力が確定したら単純に時間バッファをインクリメントしてやる。
単純になにも考えなければ上記で良いと思います。
ボタンも4つではなく3つ(時間、分、秒)でいけると思います。
どうしても4つ使わなければいけないのであれば、ボタンAを
モード切替ボタン(入力の度に設定モードと時計モードを切り替える)
ボタンB、C、Dを時間設定ボタンとし設定モード以外の入力は無効
といった感じに仕様を考えていって下さい。
(私なら2ボタン仕様にしますが・・・)
簡単ですが参考にして下さい。
また何か有れば回答しますので、補足下さい。
この回答への補足
ご丁寧にありがとうございます。
しかし,言葉ではわかるのですがそれをプログラムに直すことができないのですがどうしたらいいのでしょうか。
No.3
- 回答日時:
こんにちは#2です。
>1つ目のスイッチで設定できるようにし、
>2つ目でアップ、3つ目でセットできるようにできたらいいかと思います。
ということは1つめのスイッチで設定個所の切替(時間→分→秒)
スイッチ2,3で設定個所の時間表示をUP or Downすると
いうことですね。
それじゃぁまず100ms毎にタイマ割込みを発生させる為に
別タイマ割込み処理を作りましょう。
今回は入力処理を簡単にする為にノイズに関しては特に考えない仕様
にします。100ms間隔でポートをサンプリングしポートがHI→LO
またはLO→HIになった段階で入力確定とします。
(例)ポート入力判定処理(設定切替SW)
void Sel_Swin(void)
{
□□if((ポート前回値 == HI)&&
□□□(ポート取得値 == LO))/* HI→LO検出? */
□□{
□□□□++時間データテーブルの添え字;
□□□□if( 時間データテーブルの添え字 == テーブル終端? )
□□□□{
□□□□□□時間データテーブルの添え字 = 0;
□□□□}
□□}
□□ポート前回値バッファ = ポート取得値;
}
(例)ポート入力判定処理(時間UPSW)
void Up_Swin(void)
{
□□if((ポート前回値 == HI)&&
□□□(ポート取得値 == LO))/* HI→LO検出? */
□□{
□□□□++時間データテーブル[時間データテーブルの添え字];/* オーバーフロー対策すること */
□□}
□□ポート前回値バッファ = ポート取得値;
}
□は半角スペースです。
時間データは配列変数に格納します。
[0]が時間、[1]が秒といった感じ。
上記の処理のままだと、表示の更新タイミングは1秒毎のまま
なのでちょっと違和感ありますね。
その辺も意識して作って見てください。
また何かあれば補足下さい。ちょくちょく見にきますんで。
この回答への補足
本当に本当にご丁寧にありがとうございます!!!
なぜそんなに親切なのですか??
今すぐに試したいのですが,時間がないため夜ごろになりそうです!
もし何かわからないことがあったとき,またご迷惑をかけるかもしれません。本当にすみませんがご協力お願いします。
また,私にできることがあればできる限りの範囲で力になれればと思います!!
No.4
- 回答日時:
こんにちは。
#3です。>ポート前回値 ポート取得値 時間データテーブルの添え字 ポート前回値バッファ には,具体的にどのようなものが入るのですか??
ポート前回値、ポート前回値バッファは同じバッファです。
ポート前回値 or 時間データテーブルの添え字には単純に変数名が入ります。
グローバル変数を用意して、置換えして下さい。
あとポート取得値に関してですが、マイコンのレジスタにアクセスする
為のdefine定義が有ると思いますのでそれを使用して下さい。
(例)http://www.sendai-ct.ac.jp/~ckuma/micom/3052/305 …
(例ポート11をSW入力とした場合)
□□□(P1.B1 == LO))/* HI→LO検出? */
URLのレジスタ定義を使用すると上記のような記述になります。
一応こんな感じの回答で良いですか?
また何かあれば補足下さい。
この回答への補足
このような感じですか??
P4.PCR.BYTE = 0xff;
j = str[];
if((P4.DDR == HI)&&(P4.PCR.BYTE == LO))
{
++j;
if(j == 13)
{
j = 0;
}
}
P4.DDR = P4.PCR.BYTE;
}
/* 時間UPSW */
void Up_Swin(void)
{
if((P4.DDR == HI)&&(P4.PCR.BYTE == LO))
{
++str[0];
}
P4.DDR = P4.PCR.BYTE;
}
No.5
- 回答日時:
こんにちは#4です。
一応私のイメージを貼り付けときます。
#define HI 1/* ポート状態HI */
#define LO 0/* ポート状態LO */
#define TIM_TBL_END 3/* テーブル終端判定用定義 */
char SelSwPrev;/*設定切替SW前回値*/
char UpSwPrev;/*時間UPSW前回値*/
char TimTbl[3];/*時間テーブル[0]=時間[1]=分[2]=秒 */
char TimTblIdx;/*時間テーブルインデックス*/
/* スイッチ入力初期化処理 */
void SwIn_Init(void)
{
□□P4.DDR = 0x00;/*ポート4を入力ポートとして設定*/
□□P4.PCR.BYTE = 0xff;/*ポート4をプルアップ設定*/
□□SelSwPrev = HI;/*設定切替SW情報格納バッファ初期化*/
□□UpSwPrev = HI;/*UP SW情報格納バッファ初期化*/
□□TimTblIdx = 0;/*テーブルインデックスバッファ初期化*/
}
/* 設定切替SW入力判定処理 */
void Sel_Swin(void)
{
□□if((SelSwPrev == HI)&&
□□□(P4.DR.BX == LO))/* HI→LO検出? */
□□{
□□□□++TimTblIdx;
□□□□if( TimTblIdx >= TIM_TBL_END )
□□□□{
□□□□□□TimTblIdx = 0;
□□□□}
□□}
□□SelSwPrev = P4.DR.BX;
}
P4.DR.BXのX部分には設定切替SW入力のポート番号が入る
/* UPSW入力判定処理 */
void Up_Swin(void)
{
□□if((UpSwPrev == HI)&&
□□□(P4.DR.BX == LO))/* HI→LO検出? */
□□{
□□□□++TimTbl[TimTblIdx];/* オーバーフロー対策すること */
□□}
□□UpSwPrev = P4.DR.BX;
}
P4.DR.BXのX部分にはUPSW入力のポート番号が入る
ここどーなってんの??みたいな所があれば補足下さい。
これの秒が表示されないのはなぜですか??
/*メイン関数*/
int main(void)
{
lcd_init();
lcd_puts(str);
start_itu0();
EI;
for(;;) {
if (cnt >=100) {
cnt = 0;
sec++;
if (sec >=60) {
sec = 0;
min++;
if (min >= 60) {
min = 0;
hour++;
if (hour >= 24) hour = 0;
}
str[6] = '0' + hour /10;
str[7] = '0' + hour %10;
str[9] = '0' + min /10;
str[10] = '0' + min %10;
str[12] = '0' + sec /10;
str[13] = '0' + sec %10;
lcd_home();
lcd_puts(str);
}
}
}
return 0;
}
/*ITUOの初期設定*/
void start_itu0(void)
{
TCR0 = ITU_CLEAR_GRA + ITU_CLOCK8;
TIOR0 = 0;
GRA0 = 31250;
TIER0 = ITU_IE_IMFA;
TSTR = 1;
}
No.6
- 回答日時:
こんにちは。
#5です。>In function 'SwIn_Init'や'P4PCRBYTE'undeclaredがでてきました・・・
P4PCRBYTE→P4.PCR.BYTE
「.」が抜けてませんか?
No.9
- 回答日時:
こんにちは。
LUMINOQ-です。>ソースすべてを見ていただきたいのですが,文字数がオーバーしてしまって書ききれないのですよ;;
公開しても問題ないような物でしたら、適当な所にアップロードすれば
よいと思いますよ。
(参考)http://up00.hyperbit.info/up/trash-box/
上記URLの下部の「アップロードフォームに行く。」をクリックで
最大50MBまでファイルをアップロードできるようです。
ソースファイル一式を圧縮してアップしてみて下さい。
No.10
- 回答日時:
こんにちは。
LUMINOQ-です。確認してみましたが無くなってました。
私が紹介したURLの所で良いんですよね??
すみませんがもう一度UPしてもらえますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
- エアコン・クーラー・冷暖房機 日立のエアコンのリモコン 5 2023/04/01 00:25
- その他(パソコン・スマホ・電化製品) 腕時計の設定の仕方について 5 2022/08/21 13:40
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Android(アンドロイド) Androidスマホの時刻の自動同期の頻度を短くしたい 4 2022/12/02 17:29
- その他(ソフトウェア) OMRON PLC CP2Eのプログラム 1 2022/11/24 10:57
- 物理学 動き続けたときの双子のパラドックス。 12 2023/02/02 17:29
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- その他(プログラミング・Web制作) Windows上のプログラム。「予め決められた時刻に自分で起動して処理して自分で終了する」って可能? 3 2023/01/04 14:29
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
double型が正常に認識されてい...
-
C言語 While文(ループ)内の...
-
数字以外が入力されたらエラー...
-
プログラムC言語の整数の約数に...
-
C言語 逆ピラミッドの作り方
-
2進数の1の数を数える問題
-
4桁の数字以外を入力したらエラ...
-
ダメだ・・・分からない。while...
-
入力値が1以下、かつ数字以外の...
-
VBでの日付入力値のフォーマッ...
-
c言語でひらがなのしりとりをで...
-
scanfが2回使えない・・・?;
-
Eclipseでコマンドラインを入力...
-
プログラム(C)
-
C言語でのカレンダー作成
-
キーボード入力の終了につきま...
-
C言語 for文をつかって記号を表...
-
C言語でつるかめ算をするにはど...
-
プログラミング初心者です。 Py...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
double型が正常に認識されてい...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
if文の条件にscanf関数を使うと…?
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
ワードで文字を入力する時の変...
-
cout関数を使っているのですが...
-
batプログラム上で文字列を入力...
-
Userformの入力順序をタブオー...
-
scanf が無視されます
-
C言語 逆ピラミッドの作り方
-
gets_sがうまく動かない
-
Excel VBAで、Application.Inpu...
おすすめ情報