欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī) 幾個(gè)未定義錯(cuò)誤 麻煩大佬幫忙看看具體怎么定義
[打印本頁]
作者:
liyihang
時(shí)間:
2020-4-12 15:17
標(biāo)題:
51單片機(jī) 幾個(gè)未定義錯(cuò)誤 麻煩大佬幫忙看看具體怎么定義
51單片機(jī),基本功能已全部完成,有幾個(gè)未定義錯(cuò)誤,麻煩大佬幫忙看看具體怎么定義謝謝!
電路工程文件和源程序在附件里
要實(shí)現(xiàn)的功能如下:
密碼檢測狀態(tài):系統(tǒng)啟動(dòng)時(shí),進(jìn)入密碼檢測狀態(tài),默認(rèn)顯示PA----
若正確輸入4位密碼時(shí),進(jìn)入學(xué)號顯示狀態(tài)
若輸入密碼錯(cuò)誤,數(shù)碼管顯示EE----,蜂鳴器在密碼錯(cuò)誤時(shí)發(fā)生報(bào)警,仍處于密碼檢測狀態(tài)
學(xué)號顯示狀態(tài):學(xué)號顯示nE+學(xué)號后四位,一直閃爍直到離開本狀態(tài)
按下按鍵*,可實(shí)現(xiàn)工作狀態(tài)切換
DAC輸出狀態(tài):DAC輸出狀態(tài)啟動(dòng)DAC0832,實(shí)時(shí)顯示dAC+3位輸出值,默認(rèn)值為255
單片機(jī)源程序如下:
#include<reg51.h>
sbit BEEP = P2^3;
sbit DACS = P2^4;
sbit DAWR = P2^5;
sbit DULA = P2^6;
sbit WELA = P2^7;
unsigned char code segCC[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//共陰數(shù)碼管段碼
unsigned char code segCA[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//共陽數(shù)碼管段碼
//關(guān)鍵性變量
unsigned char sysflg; //系統(tǒng)狀態(tài)變量,0-密碼檢測,1-密碼錯(cuò)誤檢測,2-學(xué)號顯示,3-DAC轉(zhuǎn)換
//3-1、增加狀態(tài)變量,修改顯示函數(shù)Display0()
unsigned char segWE6[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20};
unsigned char segDU6[] = { 0x8C, 0x88, 0xBF, 0xBF, 0xBF, 0xBF};
unsigned char segDU2[] = { 0xAB, 0x86, 0xC0, 0xF9, 0xA4, 0xB0};
unsigned char segDU3[] = { 0xA1, 0x88, 0xC6, 0xA4, 0x92, 0x92};
void Delay(unsigned int i)//延時(shí)函數(shù)
{
unsigned int j;
while(i--)
{
for(j=0;j<32;j++); //延時(shí)
}
}
//-----------------------顯示密碼檢測界面-----------------------//
void Display0()
{
char i;
for( i = 0; i < 6; i++)
{
DULA = 0;
WELA = 0;
P0 = segWE6[i]; WELA = 1; WELA = 0;
P0 = segDU6[i]; DULA = 1; DULA = 0;
Delay(5);
}
}
//-----------------------顯示學(xué)號界面-----------------------//
void Display2()
{
char i;
for(i = 0; i < 6; i++)
{
DULA = 0;WELA = 0;
P0 = segWE6[i];WELA = 1;WELA = 0;
P0 = segDU2[i];DULA = 1;DULA = 0;
Delay(5);
}
}
//-----------------------顯示dac界面-----------------------//
void Display3()
{
char i;
for( i = 0; i < 6; i++)
{
DULA = 0;WELA = 0;
P0 = segWE6[i]; WELA = 1; WELA = 0;
P0 = segDU3[i]; DULA = 1; DULA = 0;
Delay(5);
}
}
//------------按鍵掃描函數(shù),返回值為對應(yīng)的按鍵編碼--------------//
unsigned char GetKey()
{
unsigned char i,j,k = 0,l;
unsigned char KeyScanCode[] = { 0xef, 0xdf, 0xbf, 0x7f}; //行列掃描的行列碼
unsigned char KeyCodeTable[] = { 0xee, 0xed, 0xeb, 0xde, 0xdd, 0xdb, 0xbe, 0xbd, 0xbb, 0x7e, 0x7d, 0x7b};
P3 = 0x0f;
if(P3 != 0x0f) //如果有按鍵被按下
{
for( i = 0; i < 4; i++) //依次進(jìn)行掃描
{
P3 = KeyScanCode[i];
for( j = 0; j < 3; j++)
{
k = i*3+j; //計(jì)算對應(yīng)的按鍵編碼
if(P3 == KeyCodeTable[k])
{
l = k+1; //根據(jù)鍵值調(diào)整到對應(yīng)按鍵
if(l == 11) l = 0; //按鍵0,調(diào)整鍵值為0
if(l == 12) l = 11; //按鍵#,調(diào)整鍵值為11,按鍵*鍵值仍為10
return l; //返回按鍵編碼
}
}
}
}
else
{
return 0xFF; //或者返回0xff
}
return 0;
}
void main(void)
{
unsigned char code pwd[]={1,2,3,4}; //存儲(chǔ)的密碼
unsigned char keyA = 0,keyB = 0,segidx = 0,errflg = 0,sysCNT = 0;
while(1)
{
//-----1、數(shù)碼管顯示部分-----//
if(sysflg == 0)
{
segDU6[0] = 0x8C;
segDU6[1] = 0x88;
Display0();
}
else if(sysflg == 1)
{
segDU6[0] = 0x86;
segDU6[1] = 0x86;
Display0();
BEEP = 0;
Delay(5);
BEEP = 1;
Delay(3);
}
else if(sysflg == 2)
{
P1=0; //關(guān)閉DAC
DACS=1;
DAWR=1;
//閃爍顯示學(xué)號
if(sysCNT < 200)Display2();
else
{
DULA = 0;WELA = 0;
P0 = 0;WELA = 1;WELA = 0;
P0 = 0;DULA = 1;DULA = 0;
}
}
else if(sysflg == 3)
{
DACS=0; //開啟DAC
DAWR=0;
P1=DAC;
Display3();
}
//-----2、按鍵檢測部分-----//
keyA = GetKey();
if(keyB != keyA)
{
keyB = keyA;
if((keyA >= 0) && (keyA < 10))
{ if(sysflg <= 1)
{ segDU6[segidx+2] = 0xBD;
if(keyA != pwd[segidx]) errflg = 1;
segidx++;
if(segidx == 4)
{
segidx = 0;
if(errflg == 1) sysflg = 1;
else if(errflg == 1) sysflg = 2;
errflg = 0;
segDU6[2] = 0xBF;segDU6[3] = 0xBF;
segDU6[4] = 0xBF;segDU6[5] = 0xBF;
}
}
else if(sysflg == 3)
{ segDU3[segidx+3] = segCA[keyA];
DACtmp = DACtmp*10+keyA;
segidx++;
if(segidx == 3)
{
segidx = 0;
if(DACtmp >=255)
{ DACtmp = 255;
segDU3[3] = 0xA4;
segDU3[4] = 0x92;
segDU3[5] = 0x92;
}
DAC = DACtmp;
DACtmp = 0;
}
}
else if(keyA == 10)
{
if(sysflg == 2) sysflg = 3;
else if(sysflg == 3) sysflg = 2;
}
else if(keyA == 11)
{ }
}
//-----3、延時(shí)計(jì)數(shù)部分-----//
sysCNT++;
if(sysCNT == 500) sysCNT = 0;
Delay(5);
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
2020.4.12.rar
(39.5 KB, 下載次數(shù): 13)
2020-4-12 15:11 上傳
點(diǎn)擊文件名下載附件
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1