久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stc15單片機芯片換成52芯片 出現問題
[打印本頁]
作者:
深層次
時間:
2023-12-22 20:33
標題:
stc15單片機芯片換成52芯片 出現問題
單片機實現電子密碼鎖功能
這個時我嘗試實現論壇上的一個大佬文檔的電子密碼鎖,希望將其的stc15芯片換成52單片機,所以修改了部分和刪除了部分,但是為什么無法重現那個大佬的功能,問題是出在哪里?如果是都有錯,請問我應該如何修改
#include <reg52.h> //包含52頭文件
#include "intrins.h"
#define uint unsigned int //宏定義uint代替unsigned int
#define uchar unsigned char //宏定義uchar代替unsigned char
#define out P0
sbit lcdrs=P2^4;//液晶的RS端接P2.4口
sbit lcdrw=P2^5;//液晶的RW端接P2.5
sbit lcden=P2^6;// 液晶的EN使能端接P2.6口
sbit buzzer =P1^0;//蜂鳴器
uchar code keyvalue[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
uint ver=0;
void beep();
void lcd_init();//初始化1602
void write_data(uchar dat);
void check_busy(void);
void write_cmd(char cmd); //寫指令函數
void lcd_clear();
void xianshi(void);//LCD顯示函數
void right1(void); //輸入密碼正確的顯示函數
void wrong1(void); //輸入密碼錯誤后的顯示函數
void verify(); //驗證密碼
void copy(); //復制密碼
void input();//輸入密碼
void reset();//重置密碼
uchar keyscan(void);
uchar RIGHT[]="pass";
uchar WRONG[]="Password Error";
uchar SHURU[]="aaaaaaaaaa";
uchar SHUZU[]="aaaaaaaaaa";
uchar MIMA[]="000aaaaaaa";
void delayms (uint xms) //毫秒函數定義
{
uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<120;j++);
}
void main()
{ lcd_init();
lcd_clear();
while(1)
{ P1=0x0f;
if((P1&0x0f)!=0x0f)
{ delayms(15);
if((P1&0x0f)!=0x0f)
{ lcd_clear();
copy(); //先對顯示的數組進行賦值,以免出現顯示錯誤
input(); //輸入密碼
if(keyscan()==12)
lcd_clear();
copy();
input(); //若按下重置鍵,則重新輸入
if(keyscan()==13)
{ verify(); //按下確認鍵,對密碼進行驗證
if(ver==0)
{lcd_clear();
right1(); //密碼正確
}
else
{ lcd_clear();
copy();
wrong1(); //密碼錯誤
}
}
if(keyscan()==15)
{
lcd_clear();
copy();
verify(); //按下重置密碼鍵之后,先確認之前輸入的密碼是否正確
if(ver==0)
reset(); //正確則重置密碼
else
{lcd_clear();
wrong1();
}
}
P1=0xf0;
while((P1&0xf0)!=0xf0)
{ P1=0xf0;
beep();
}
}
}
}
}
uchar keyscan(void)
{
uchar j,temp,i;
uchar t=0xfe;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
for(i=0;i<4;i++)
{ P1=t;
temp=P1;
for(j=0;j<16;j++)
{ if(temp==keyvalue[j]) return(j);
}
t=_crol_(t,1);
}
}
return(16);
}
void beep(void)
{
uchar i;
for(i=0;i<10;i++)
{
delayms(50);
buzzer=~buzzer;
}
buzzer=1;
}
/**********************檢查忙標志函數************************/
void check_busy(void)
{
uchar dt;
out=0xff;
do
{
lcden=0;
lcdrs=0;
lcdrw=1;
lcden=1;
dt=out;
}while(dt&0x80);
lcden=0;
}
/**************************1602顯示****************************/
void write_cmd(char cmd) //寫指令函數
{
check_busy();
lcden=0;//再把EN拉低
lcdrs=0;
lcdrw=0;//先將RW拉低
out=cmd;
lcden=1;
lcden=0;
}
void write_data(uchar dat) //寫數據函數
{
check_busy();
lcden=0;//再把EN拉低
lcdrs=1;
lcdrw=0;//先將RW拉低
out=dat;
lcden=1;
lcden=0;
}
/***************************初始化******************************/
void lcd_init()//初始化1602
{
write_cmd(0x38);//顯示模式設置
write_cmd(0x0c);//顯示開關,光標沒有閃爍
write_cmd(0x06);//顯示光標移動設置
write_cmd(0x01);//清除屏幕
delayms(1);
}
void lcd_clear()
{ write_cmd(0x01);
delayms(5);
}
void input()
{
uchar i=0,key;
for(;i<10;)
{ P1=0xf0;
if((P1&0xf0)!=0xf0)
{ delayms(15);
if((P1&0xf0)!=0xf0)
{ if (keyscan()>=10) break; //確認有鍵按下后,如果按下的不是數字鍵0-9,則跳出循環
key=keyscan();
SHURU[i]=key+'0'; //將輸入的數字轉化為字符變量存入‘SHURU’和‘SHUZU'兩個數組中
SHUZU[i]=SHURU[i];
SHURU[i+1]='a'; //對"SHURU"數組的下一位賦值為a,避免在驗證密碼時出錯
xianshi(); //顯示函數
i++;
P1=0xf0;
while((P1&0xf0)!=0xf0)
{ P1=0xf0;
beep();
}
}
}
}
}
void xianshi(void)
{ uchar m;
uchar n=0;
for (m=0x80;m<0x90;m++)
{
write_cmd(m);
if(SHUZU[n]=='a'|| SHUZU[n]=='\0') break;
write_data(SHUZU[n]);
n++;
}
}
void right1(void)
{ uchar m;
uchar n=0;
for (m=0x80;m<0x90;m++)
{
write_cmd(m);
if(RIGHT[n]=='\0') break;
write_data(RIGHT[n]);
n++;
}
}
void wrong1(void)
{ uchar m;
uchar n=0;
for (m=0x80;m<0x90;m++)
{
write_cmd(m);
if(WRONG[n]=='\0') break;
write_data(WRONG[n]);
n++;
}
}
void verify()
{ uchar i;
ver=0;
for(i=0;MIMA[i]!='*' && MIMA[i]!='\0';i++)
{ if(SHURU[i]!=MIMA[i] || SHURU[i+1]!=MIMA[i+1]) //驗證密碼是否正確
{ver=1;
break;
}
}
}
void copy()
{ uchar i=0;
for(;i<10;i++)
{ SHUZU[i]='*';
}
}
void reset()
{ uchar i,key;
for(i=0;i<10;)
{ P1=0xf0;
if((P1&0xf0)!=0xf0)
{ delayms(15);
if((P1&0xf0)!=0xf0 )
{ if(keyscan()!=15)
{
if (keyscan()==13) break; //再確認要重置密碼后,把輸入的新密碼存入'SHUZU'數組中,若按下確認鍵則跳出
key=keyscan();
SHUZU[i]=key+'0';
xianshi();
i++;
}
P1=0xf0;
while((P1&0xf0)!=0xf0)
{ P1=0xf0;
beep();
}
}
}
}
for(i=0;i<9;i++)
{MIMA[i]=SHUZU[i];//將密碼存入“MIMA”數組中
}
lcd_clear();
copy();
}
復制代碼
作者:
597259498
時間:
2023-12-23 08:32
不能直接移植的,15系列是8952系列的升級版本,15系列的很多寄存器8952系列是沒有的
作者:
深層次
時間:
2023-12-23 17:56
597259498 發表于 2023-12-23 08:32
不能直接移植的,15系列是8952系列的升級版本,15系列的很多寄存器8952系列是沒有的
好吧,我放棄這個思路
作者:
npn
時間:
2023-12-23 20:04
597259498 發表于 2023-12-23 08:32
不能直接移植的,15系列是8952系列的升級版本,15系列的很多寄存器8952系列是沒有的
部分寄存器和中斷是STC專屬的,其他品牌單片機是沒有的。
樓主使用的 reg51.h 且沒有用到STC專屬寄存器或中斷,因此可以嘗試移植進去。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲91精品
|
国产一级网站
|
国产精品一区二区免费看
|
久久久久资源
|
久热9
|
久久久精
|
日韩精彩视频
|
99精品欧美一区二区三区综合在线
|
亚洲成a人片
|
在线播放中文字幕
|
欧美一级片黄色
|
在线看av的网址
|
久久av一区二区三区
|
懂色av蜜桃av
|
国产久
|
色婷婷综合网站
|
亚洲精彩视频
|
国产美女网站
|
国产1区2区
|
国产成人免费视频网站高清观看视频
|
亚洲性人人天天夜夜摸
|
97免费视频在线观看
|
中文字幕一区二区三区精彩视频
|
狠狠爱免费视频
|
日韩成人一区
|
午夜不卡福利视频
|
国产日韩久久
|
久久亚洲欧美日韩精品专区
|
美女人人操
|
91在线精品播放
|
中文字幕 亚洲一区
|
色又黄又爽网站www久久
|
成人做爰9片免费看网站
|
伊人精品视频
|
日韩亚洲一区二区
|
欧美成人精品在线观看
|
www.亚洲一区二区三区
|
81精品国产乱码久久久久久
|
成人影院av
|
奇米av
|
精品一区av
|