找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4736|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

拿到51hei開發(fā)板后寫的第一個程序,請指教!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:37685 發(fā)表于 2012-4-3 02:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
設(shè)計要求:按下S4鍵則燈由上向下流動然后燈全亮,按下S5鍵則燈由下向上流動然后燈全滅,蜂鳴器報警 這個這么久我才做出來 我擦.

#include<reg52.h>
#define uint unsigned int 
#define uchar unsigned char
sbit WEI=P2^7;      //U2 74HC573的LE端    數(shù)碼管的位選端
sbit DUI=P2^6;      //U1 74HC573的LE端    數(shù)碼管的段選位
sbit SJ=P1^4;       //LED發(fā)光管的使能端

sbit spk=P2^2;   //蜂鳴器
sbit S4=P3^6;  //按鍵S4
sbit S5=P3^7;    //按鍵S5
uint num;
uint i;
uint j;
uchar code table_1[]={
0x7F,0x3F,0x1F,0x0F,
0x07,0x03,0x01,0x00
};

uchar code table_2[]={
0x01,0x03,0x07,0x0F,
0x1F,0x3F,0x7F,0xFF
};



void delay(uint Z)
{
for(i=Z;i>0;i--)
for(j=0;j<1000;j++);
}

void main()
{
SJ=0;  //開LED總使能
WEI=1;   //讓位選的U2 74hc573處于直通狀態(tài)
DUI=1;   //讓段選的U2 74hc573處于直通狀態(tài)
P0=0xff; //讓所有數(shù)碼管不顯示,防止數(shù)碼管干擾
WEI=0;   //鎖存,讓位選的74hc573保持現(xiàn)在的狀態(tài)不變,也就是一直不顯示,如果不寫這幾行,數(shù)碼管和點陣也會顯示
DUI=0;   //鎖存,讓段選的74hc573保持現(xiàn)在的狀態(tài)不變,也就是一直不顯示,如果不寫這幾行,數(shù)碼管和點陣也會顯示
while(1)
{
if( S4==0)
{
spk=1;
for(num=0;num<8;num++) 
 {P0=table_1[num];delay(100);}
}
else if (S5==0)
{
for(num=0;num<8;num++)
   {P0=table_2[num];delay(100);}
spk=0;
}
}
} 

我寫的第一個程序

用了一個多小時

遇到幾個問題,想請教一下:

 

  第一就是 電路 LED是P0控制的 跟視頻有不一樣的  能不能列個單那樣的  跟視頻不一樣的連接的地方 我找起來方便些 ,不弄也無所謂 不是什么問題


 

  編程遇到的問題  變量難道必須是 全局變量嗎  在 for(num=0;num<8;num++) 這里定義 uint num到時候 編譯錯誤 是什么情況 我搞不懂


 

  還有就是 按鍵 操作 能不能用 switch語句實現(xiàn) 我想寫 但是 switch(變量)這個變量這里不知道怎么處理,怎么去識別按鍵  這個是不是集合一個函數(shù)(假如有這么一個函數(shù),專門用來識別按鍵的,返回的是按鍵的標(biāo)志位,就像中斷返回的interrupt一樣)


[此貼子已經(jīng)被作者于2012-4-3 2:31:55編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2012-4-3 02:43 | 只看該作者

1.只有流水燈和視頻的電路不一樣哦,其他都基本一樣,只是端口的區(qū)別而已,流水燈部分的教程在:http://www.torrancerestoration.com/bbs/dpj-4882-1.html

 

2.變量當(dāng)然可以定義函數(shù)內(nèi)部的變量啊,但是一定要定義在函數(shù)的頭部哦.

 

3.switch當(dāng)然可以用,開發(fā)板附帶的的光盤提供了1個很經(jīng)典實用switch開關(guān)分支的程序“矩陣鍵盤_c_按鍵顯示1-16平方”你可以參考下他的源代碼

回復(fù)

使用道具 舉報

板凳
ID:37736 發(fā)表于 2012-4-3 18:40 | 只看該作者

1.第一部分 使能 看電路 就明白了

2.就是這程序里面的for循環(huán)num是全局變量 我可不可以寫成for(uint num=0;num<8;num++)這樣的形式來聲明呢?為什么會報錯  在vs里面這樣用是沒問題的

3.switch可以用 我只是說明了下我的想法 關(guān)于那個案例我還沒有看,具體情況可能以后會請教

回復(fù)

使用道具 舉報

地板
ID:1 發(fā)表于 2012-4-4 02:58 | 只看該作者
2.c語言里面沒有那個用法的哦,必須要先聲明了才能使用的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表