|
/*有問題的我都注釋了,下面應(yīng)該要有程序明細(xì)介紹*/
/************************************************************************
* 工 程 名: xxxxxxxx
* 單片機(jī)型號: xxxxxxxx
* 晶 振: xxxxxxxx
* 接口說明:
* 例如 數(shù)碼管段選什么IO,位選什么IO,數(shù)碼管驅(qū)動芯片有哪些,分別接到了哪些IO。
* 按鍵接到哪個IO,有沒有跳帽 等 等 等 等 等 等 !
* 還可以寫更詳細(xì),客戶一看就都知道了。
************************************************************************/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9的數(shù)組 (共陽極)
sbit key = P1^0; //定義按鍵
void Delay_ms(uint z); //聲明延時函數(shù)
//主函數(shù)
void main(void)
{
uint i=50; /* i=50; 在這里初始化 ,運(yùn)行程序就會顯示50 */
while(1)
{
if(key == 0) //判斷按鍵是否按下
{
Delay_ms(10); //延時10ms
if(key == 0) //再次判斷
{
i++; /* i=50; i++; 不能放在這里初始化,否則每一次按鍵都是50, i++; 留著 */ //按鍵次數(shù)
while(key == 0); //判斷是否松開按鍵
if(i == 100) i=0; //如果到達(dá)99,下一次回到0
}
}
/*
這里基本上全錯了,P2->十位, P3->個位 這不亂套了嗎? 段選有兩個IO口的嗎???
位選 居然看不到 是哪個IO? 有沒有驅(qū)動芯片?
P2 = table[i/10]; //顯示十位
P3 = table[i%10]; //顯示各位
要么我猜 P2 位選? P3 段選? 還是位選直接接了電源正極嗎???
*/
// 亂猜開始,數(shù)碼管延時函數(shù)值可能要調(diào)一調(diào),不然會閃
P2 = 0x01; //位選開 P20
P3 = table[i/10]; //顯示十位 P3 段選
Delay_ms(5);
P2 = 0x00; //關(guān)閉數(shù)碼管顯示
Delay_ms(5);
//
P2 = 0x02; //位選開 P21
P3 = table[i%10]; //顯示個位 P3 段選
Delay_ms(5);
P2 = 0x00; //關(guān)閉數(shù)碼管顯示
Delay_ms(5);
// 亂猜結(jié)束,IO不對那就自己改,問題不明確,我也沒辦法。
}
}
//延時函數(shù) 12.000MHz
void Delay_ms(uint z)
{
while(z--) //while 這種少用,容易出問題,特別是while很多的時候。 用for吧,不改了,這種小程序錯誤實(shí)在太多
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
|
|