想把一个别的程序移植到自己的硬件上,纯小白,不会改,求帮助求帮助求帮助。。
原图
我的图
主程序
- #include
- #include "delay.h" //延时头文件
- #include "LCD1602.h"
- #include "speaker.h"
- #include "key4x4.h"
- #include "AT24C02.h"
- #include "t1.h"
- /***************************************************************/
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- /**************************************************************/
- ***it led=P2^3; //仿真软件使用接口
- uint dumima,old_mima,new_mima,shige;
- uchar code chushimima_tab[]={1,2,3,4,5,6}; //设定系统第一次初始密码为123456
- uchar data dumima_tab1[6]={0}; //从24C02中读取写入的初始或修改的密码保存
- uchar data dumima_tab2[6]={0}; // 用于读取密码是保存在内存中, 启动打开密码锁时用到
- uchar data shurumima_tab1[6]={0}; //从键盘输入的密码保存,以便和读取的密码对比 修改密码时用到
- uchar data shurumima_tab2[6]={0}; //从键盘输入的密码保存,以便和读取的密码对比 修改密码时用到
- void main()
- {
- uchar j,mm=5; //j显示位置字符,mm提示报警次数计数及显示输入错误机会次数为5次
- led=1;
- speak=1;
- init(); //1602初始化
- jiemian(); //1602显示界面
- ding_time=50000; //设定T1定时器定时时长50ms
- timer1_init( ); //T1定时器初始化
- TR1=1; //T1定时器启动开始定时
- /*************************************************************/
- dumima=AT24C02_read_byte(0x02);//读取02地址的数据判断是否写入初始或修改的密码
- if(dumima!=1) //如果不等于1,则判断没写初始或修改的密码,需要写入
- {
- AT24C02_write_byte(0x02,0x01); //在第2个地址中写入1,以便判断下次不用写入
- delay_ms(10);
- for(j=0;j<6;j++)
- { //从第4个地址开始写初始密码数据
- AT24C02_write_byte(j+4,chushimima_tab[j]);
- delay_ms(10);
- }
- }
- for(j=0;j<6;j++) //从第4个地址开始写初始密码数据
- { //从24C02中读取写入的初始或修改的密码保存
- dumima_tab1[j]=AT24C02_read_byte(j+4);
- delay_ms(10);
- }
- /*************************************************************/
- been(); //初始化读写密码完成之后提示声音,同时进入主程序大循环
- while(1) //进入程序大循环
- {
- key4x4(); //查询按键是否有按下(只对启动和修改密码按键有效)
- /*********************************************************/
- if(start_stop==1) //启动按键密码输入打开密码锁
- {
- ok=0; //取消其他按键误动作及退出判断
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0;
- TR1=0;//关闭定时器
- been(); // 启动按键提示音
- write_com(0x80); //第一行显示“Please input You”
- for(j=0;j<16;j++)
- {
- write_data(you_table[j]);
- delay_us(10);
- }
- write_com(0xc0); //第二行显示“Password: ”
- for(j=0;j<16;j++)
- {
- write_data(table3[j]);
- delay_us(10);
- }
- num=0; start4x4=1; //num输入显示计数位置设置及等待输入密码循环开始
- while(start4x4==1) //等待数字键按下作为密码输入
- {
- key4x4(); //只对数字按键和取消按键有效
- if(key_valu==1) //在输入密码过程中,可以随时去取消输入重来
- { //但是输入满6位的时候不能取消,必须按确认键
- ok=0; //取消其他按键误动作及退出判断
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0; been(); //输入按键提示声音
- write_com(0xca+num); //第二行适当位置ca起显示输入的密码
- write_data(key_table[i]); //显示对应的数字密码,
- write_data(xing_tab[0]); //用*号代替数字保密 /*更改此处可显示数字*/
- dumima_tab2[num]=key_table2[i]; //将输入的密码进行保存以便核对
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- num++; //显示下一个字符
- if(num==6) //按下6个数字的操作,等待确认按下
- {
- num=0; start4x4=0;dengdai_ok=1; //进入下一个显示环节,等待按确认键确认密码
- while(dengdai_ok==1)
- {
- key4x4();
- if(ok==1) //确认按键按下,进行密码对比
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0; dengdai_ok=0;
- start_stop=0;
- //密码逐位对比判断(密码对比)
- if(dumima_tab2[0]==dumima_tab1[0]&&dumima_tab2[1]==dumima_tab1[1]
- &&dumima_tab2[2]==dumima_tab1[2]&&dumima_tab2[3]==dumima_tab1[3]
- &&dumima_tab2[4]==dumima_tab1[4]&&dumima_tab2[5]==dumima_tab1[5])
- { //密码输入正确的操作
- been(); //输入密码正确按键提示声音
- baojing=0; mm=5; //消除报警和输入限制次数清零
- write_com(0xc0); //第二行显示"Password: -OK!- "
- for(j=0;j<16;j++)
- {
- write_data(table4[j]);
- delay_us(10);
- }
- led=0; //执行密码正确指令功能 /*更改此处可修改功能*/
- delay_ms(2000); //成功或者不成功 延时5秒钟之后判断显示界面
- jiemian(); //显示界面信息
- TR1=1; time=0;xian1=0;xian2=1; //启动定时器开锁工作
- delay_ms(5000);led=1; //指示灯延时5秒之后关闭
- }
- else //执行密码输入错误 操作
- {
- been();delay_ms(50);been();delay_ms(500); //输入密码错误提示
- write_com(0xc0); //第二行显示"Password: -No!- "”
- for(j=0;j<16;j++)
- {
- write_data(table5[j]);
- delay_us(10);
- }
- delay_ms(2000);
- mm--; //输入机会减少1次 最高最低各5次
- if(mm>0) //少于5次时显示输入机会
- {
- write_com(0x80); //第二行显示" Sorry! You have"
- for(j=0;j<16;j++)
- {
- write_data(chan_tab1[j]);
- delay_us(10);
- }
- write_com(0xc0); //第二行显示" "
- for(j=0;j<16;j++) //清楚第二行内容,
- {
- write_data(kong_tabb[j]);
- delay_us(10);
- }
- write_com(0xc3); //第二行显示"12345“
- write_data(chan_tab3[mm]);
- delay_us(5);
- write_com(0xc7); //第二行显示" Chance!!!"
- for(j=0;j<9;j++)
- {
- write_data(chan_tab2[j]);
- delay_us(10);
- }
- delay_ms(5000);
- start_stop=1; //返回继续等待重新输入密码开锁
- }
- else //mm=0;执行密码错误指令功能:输错5次报警
- {
- been();delay_ms(50);been();delay_ms(50);been();delay_ms(500);
- P1=0x00;mm=1; //锁定键盘,同时限制输入次数只能为1次
- jiemian(); //显示界面之后再进行报警
- TR1=1; time=0;xian1=0;xian2=1;
- baojing=1; // 只有输入成功才能给5次机会,同时撤出报警
- speaker(); //蜂鸣器执行报警程序 报警完毕之后延长时间停止再次输入
- for(j=0;j<20;j++) //延时20秒不输入,锁定键盘
- { //同时又开始锁定时间,让键盘功能无效 6000
- delay_ms(1000);
- } //延时时间到重启输入,但是只给一次机会
- TR1=0; //关闭定时器显示提示输入信息界面,
- write_com(0x80); //第二行显示" Sorry! You have"
- for(j=0;j<16;j++)
- {
- write_data(chan_tab1[j]);
- delay_us(10);
- }
- write_com(0xc0); //第二行显示" "
- for(j=0;j<16;j++) //清楚第二行内容,
- {
- write_data(kong_tabb[j]);
- delay_us(10);
- }
- write_com(0xc1); //第二行显示" 12345"
- write_data(chan_tab3[mm]);
- delay_us(5);
- write_com(0xc3); //第二行显示" Chance!!!"
- for(j=0;j<9;j++)
- {
- write_data(chan_tab2[j]);
- delay_us(10);
- }
- write_com(0xcd); //第二行显示" ok?"
- for(j=0;j<3;j++)
- {
- write_data(ok_tab[j]);
- delay_us(10);
- }
- delay_ms(2000);
- dengdai_ok=1; been();delay_ms(50);been();delay_ms(50);been();delay_ms(500);
- while(dengdai_ok==1) //提示最后输入密码
- {
- key4x4();
- if(ok==1) //等待确认按键按下再次输入密码开锁
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- start_stop=0;
- dengdai_ok=0;
- start_stop=1; //返回继续等待重新输入密码开锁
- }
- }
- }
- }
- }
- }
- }
- }
- if(quxiao==1) //按下取消按键则显示界面联系电话
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0;
- dengdai_ok=0; start4x4=0; been();
- jiemian(); //开启定时器,显示界面和欢迎和电话信息
- TR1=1;time=0;xian1=0;xian2=1;
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- }
- }
- }
- /*********************************************************/
- /*********************************************************/
- /*********************************************************/
- if(xiugaimima==1) //修改密码程序
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- start_stop=0;
- xiugaimima=0; been();
- TR1=0;//关闭定时器T1
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(old_table[j]);//显示"Please input Old"
- delay_us(100);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(table3[j]); //显示"password: "
- delay_us(10);
- }
- start4x4=1; //修改密码等待有效
- while(start4x4==1) //等待数字键按下作为密码输入
- {
- key4x4(); //只对数字按键和取消按键有效
- if(key_valu==1) //在输入密码过程中,可以随时去取消输入重来
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- start_stop=0;
- xiugaimima=0; been(); //输入密码提示音
- write_com(0xca+num); //显示输入密码
- write_data(key_table[i]); //显示对应的数字密码,
- write_com(0xca+num); //显示输入密码 ,调到键盘松开之后可以显示数字
- write_data(xing_tab[0]); //用*号代替保密 但是需要将前面两个注释去掉
- dumima_tab2[num]=key_table2[i]; //将输入的密码进行保存以便核对
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- num++; //显示下一个字符
- if(num==6) //按下6个数字的操作,等待确认和取下
- {
- num=0; dengdai_ok=1;start4x4=0;
- while(dengdai_ok==1)
- {
- key4x4();
- if(ok==1) //确认按键按下,进行密码对比
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0; dengdai_ok=0;
- start_stop=0; //密码逐位对比判断是否正确,进入密码修改
- if(dumima_tab2[0]==dumima_tab1[0]&&dumima_tab2[1]==dumima_tab1[1]
- &&dumima_tab2[2]==dumima_tab1[2]&&dumima_tab2[3]==dumima_tab1[3]
- &&dumima_tab2[4]==dumima_tab1[4]&&dumima_tab2[5]==dumima_tab1[5] )
- { //执行密码正确的操作
- been();
- mm=5; //恢复输入错误机会为5次初值
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(new_table[j]);//显示"Please input New"
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(table3[j]); //显示"password: "
- delay_us(10);
- }
- old_mima=1;
- while(old_mima==1)
- {
- key4x4(); //只对数字按键和取消按键有效
- if(key_valu==1) //在输入密码过程中,可以随时去取消输入重来
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0; been();//输入声音提示
- write_com(0xca+num); //显示输入密码
- write_data(key_table[i]); //显示对应的数字密码,
- write_com(0xca+num);//显示输入密码 不松开按键可看见数字
- write_data(xing_tab[0]); //用*号代替保密
- shurumima_tab1[num]=key_table2[i]; //将输入的密码进行保存以便核对
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- num++; //显示下一个字符
- if(num==6) //按下6个数字的操作,等待确认和取下
- {
- num=0; dengdai_ok=1;old_mima=0;
- while(dengdai_ok==1)
- {
- key4x4();
- if(ok==1) //确认按键按下,进行密码对比
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0; //
- dengdai_ok=0; been();//进入第二次更改密码输入提示音
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(agn_table[j]);//显示" Again input new"
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(table3[j]); //显示"password: "
- delay_us(10);
- }
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- new_mima=1;
- while(new_mima==1)
- {
- key4x4(); //只对数字按键和取消按键有效
- if(key_valu==1) //在输入密码过程中,可以随时去取消输入重来
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0; been(); //输入提示音
- // write_com(0xca+num); //显示输入密码
- // write_data(key_table[i]); //显示对应的数字密码,
- write_com(0xca+num); //显示输入密码
- write_data(xing_tab[0]); //用*号代替保密
- shurumima_tab2[num]=key_table2[i]; //将输入的密码进行保存以便核对
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- num++; //显示下一个字符
- if(num==6) //按下6个数字的操作,等待确认和取下
- {
- num=0; dengdai_ok=1; new_mima=0;
- while(dengdai_ok==1)
- {
- key4x4();
- if(ok==1) //确认按键按下,进行密码对比
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0; //
- dengdai_ok=0;
- if(shurumima_tab1[0]==shurumima_tab2[0]&&shurumima_tab1[1]==shurumima_tab2[1]&&
- shurumima_tab1[2]==shurumima_tab2[2]&&shurumima_tab1[3]==shurumima_tab2[3]&&
- shurumima_tab1[4]==shurumima_tab2[4]&&shurumima_tab1[5]==shurumima_tab2[5] )
- { //判断两次输入的密码是否一样,一样就写入24c02,否则就报错。
- been();
- AT24C02_write_byte(2,1); //在第2个地址中写入1,以便判断下次不用写入
- delay_ms(10);
- for(j=0;j<6;j++)
- { //从第4个地址开始写初始密码数据
- AT24C02_write_byte(j+4,shurumima_tab1[j]);
- delay_ms(10);
- }
- //等于1,则读取密码保存在内存中,
- for(j=0;j<6;j++) //从第4个地址开始写初始密码数据
- { //从24C02中读取写入的初始或修改的密码保存
- dumima_tab1[j]=AT24C02_read_byte(j+4);
- delay_ms(10);
- }
- /*************************************************************************/
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(cag_table[j]);//显示"Changed password"
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(suc_table[j]); //显示" You Successful ";
- delay_us(10);
- }
- delay_ms(3000);
- jiemian(); //返回界面显示
- TR1=1;time=0;xian1=0;xian2=1;
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- }
- else //执行两次输入密码不一致时执行
- {
- been(); delay_ms(50);been();delay_ms(500);
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(diff_tab1[j]);//显示" 2 New passwords"
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(diff_tab2[j]);//显示"are different!!!"
- delay_us(10);
- }
- delay_ms(2000);
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(new_table[j]);//显示"Please input New"
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(table3[j]); //显示"password: "
- delay_us(10);
- }
- delay_ms(2000);
- old_mima=1; been(); //执行修改密码不一致指令功能
- }
- }
- }
- }
- }
- if(quxiao==1) //按下取消按键则显示界面联系电话
- {
- ok=0;num=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0;
- dengdai_ok=0; start4x4=0; old_mima=0;new_mima=0;
- jiemian();
- TR1=1;time=0;xian1=0;xian2=1;
- been();
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- }
- }
- }
- }
- }
- }
- if(quxiao==1) //按下取消按键则显示界面联系电话
- {
- ok=0;num=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0;
- dengdai_ok=0; start4x4=0; old_mima=0;new_mima=0;
- jiemian();
- TR1=1;time=0;xian1=0;xian2=1;
- been();
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- }
- }
- }
- else //第一次执行密码错误操作
- {
- been(); delay_ms(50);been();delay_ms(500);
- write_com(0xc0); //第二行显示"password: No! ";
- for(j=0;j<16;j++)
- {
- write_data(table5[j]);
- delay_us(10);
- }
- delay_ms(2000);
- mm--;
- if(mm>0)
- {
- write_com(0x80); //第二行显示" Sorry! You have"
- for(j=0;j<16;j++)
- {
- write_data(chan_tab1[j]);
- delay_us(10);
- }
- write_com(0xc0); //第二行显示" "
- for(j=0;j<16;j++)
- {
- write_data(kong_tabb[j]);
- delay_us(10);
- }
- write_com(0xc3); //第二行显示" 12345"
- write_data(chan_tab3[mm]);
- delay_us(5);
- write_com(0xc7); //第二行显示" Chance!!!"
- for(j=0;j<9;j++)
- {
- write_data(chan_tab2[j]);
- delay_us(10);
- }
- delay_ms(2000);
- xiugaimima=1; //进入修改界面
- }
- else //mm=5;执行密码错误指令功能:输错5次报警
- {
- been();delay_ms(50);been();delay_ms(50);been();delay_ms(500);
- P1=0x00;mm=4; //锁定键盘,同时限制输入次数只能为1次
- baojing=1; // 只有输入成功才能给5次机会,同时撤出报警
- speaker(); //蜂鸣器执行报警程序
- for(j=0;j<20;j++) //延时20秒不输入,锁定键盘
- { //同时又开始锁定时间,让键盘功能无效 6000
- delay_ms(1000);
- }
- TR1=0; //关闭定时器显示界面,提示输入信息
- write_com(0x80); //第二行显示" Sorry! You have"
- for(j=0;j<16;j++)
- {
- write_data(chan_tab1[j]);
- delay_us(10);
- }
- write_com(0xc0); //第二行显示" "
- for(j=0;j<16;j++) //清楚第二行内容,
- {
- write_data(kong_tabb[j]);
- delay_us(10);
- }
- write_com(0xc1); //第二行显示"54321"
- write_data(chan_tab3[mm]);
- delay_us(5);
- write_com(0xc3); //第二行显示" Chance!!!"
- for(j=0;j<9;j++)
- {
- write_data(chan_tab2[j]);
- delay_us(10);
- }
- write_com(0xcd); //第二行显示" ok?"
- for(j=0;j<3;j++)
- {
- write_data(ok_tab[j]);
- delay_us(10);
- }
- delay_ms(3000);
- dengdai_ok=1; been();delay_ms(50);been();delay_ms(50);been();delay_ms(500);
- while(dengdai_ok==1) //提示最后输入密码
- {
- key4x4();
- if(ok==1) //等待确认按键按下再次输入密码开锁
- {
- ok=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- start_stop=0;
- dengdai_ok=0;
- xiugaimima=1; //返回继续等待重新输入密码开锁
- }
- }
- }
- }
- }
- }
- }
- }
- if(quxiao==1) //按下取消按键则显示界面联系电话
- {
- ok=0;num=0; //取消按键误动作
- quxiao=0;
- key_valu=0;
- xiugaimima=0;
- start_stop=0;
- dengdai_ok=0; start4x4=0;
- jiemian();
- TR1=1;time=0;xian1=0;xian2=1;
- been();
- while(dengdai==1) //将P1端口的值读出判断按键是否松开,
- {
- tem=P1;
- if(tem!=0xf0) dengdai=1; //按下就继续等待
- else dengdai=0; //松开就返回
- }
- }
- }
- }
- }
- }
复制代码
LCD1602.h
- #ifndef __LCD1602_H__
- #define __LCD1602_H__
- #include
- #include "delay.h"
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- //*********************************************
- ***it rs=P2^7; //定义控制引脚 仿真软件使用控制端口
- ***it rw=P2^6; //定义控制引脚 仿真软件使用控制端口
- ***it e=P2^5; //定义控制引脚 仿真软件使用控制端口
- /******LCD1602显示内容************************************/
- uchar code table0[]=" Welcome to use "; //第一行地址80H显示 滚动显示
- uchar code table1[]="The Keypad Lock!"; //第一行地址80H显示 滚动显示
- uchar code table2[]="TEL: 15885015778"; //第一行地址80H显示 宣传显示用
- uchar code table3[]="Password: "; //第二行地址C0H显示 输入密码显示
- uchar code table4[]="Password: 0pen! "; //第二行地址C0H显示 解密成功显示
- uchar code table5[]="Password: Errer! "; //第二行地址C0H显示 解密失败显示
- uchar code key_table[]=" 789456123*0#"; //显示密码数字字符
- uchar code key_table2[]={0,7,8,9,4,5,6,1,2,3,0,0}; //显示密码数字字符
- uchar code xing_tab[]="*"; //输入密码时显示*号
- uchar code you_table[]="Please input You";
- uchar code old_table[]="Please input Old";
- uchar code new_table[]="Please input New";
- uchar code agn_table[]=" Again input New";
- uchar code cag_table[]="Changed Password";
- uchar code suc_table[]=" You Successful!";
- uchar code chan_tab1[]=" Sorry! You have";
- uchar code chan_tab2[]="Chance!!!";
- uchar code chan_tab3[]=" 123456";
- uchar code ok_tab[]="ok?";
- uchar code kong_tabb[]=" ";
- uchar code diff_tab1[]=" 2 New Passwords";
- uchar code diff_tab2[]="are different!!!";
- /*********************************************************/
- void write_com(uchar com) /*写指令*/
- {
- e=0; rs=0; rw=0;
- P3=com;
- delay_ms(10); //500us
- e=1;
- delay_ms(10);
- e=0;
- }
- void write_data(uchar dat) /*写数据*/
- {
- e=0; rs=1; rw=0;
- P3=dat;
- delay_ms(10); //500us
- e=1;
- delay_ms(10);
- e=0;
-
- }
- void init()
- {
- delay_ms(15);
- write_com(0x38);
- delay_ms(5);
- write_com(0x38);
- delay_ms(5);
- write_com(0x38);
- write_com(0x38);
- write_com(0x08);
- write_com(0x01);
- write_com(0x06);
- write_com(0x0c);
- }
- void jiemian()
- {
- uchar j;
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(table0[j]);
- delay_us(10);
- }
- write_com(0xc0);
- for(j=0;j<16;j++)
- {
- write_data(table2[j]);
- delay_us(10);
- }
- }
- ***************************************************/
- #endif
复制代码
AT24C02.h
key4*4.h
- #ifndef __KEY4X4_H__
- #define __KEY4X4_H__
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形0~65536
- #include
- /*********************************************/
- uint temp,tem,k,i,key_ok,num,key_valu,dengdai,start4x4;
- uchar xiugaimima=0,start_stop=0,quxiao=0,ok=0,deng_ok,dengdai_ok;
- uchar key_valu1,key_valu2,key_valu3,key_valu4,key_valu5,key_valu6;
- uchar valu;
- void key4x4()
- {
- P1=0x0f; //高四位为0,低四位为1
- temp=P1; //键盘自己接P1口,研展电子仿真电路板不P2口为矩阵键盘,
- if(temp!=0x0f) //但是与LCD1602控制线冲突,不好使 唉!!!
- {
- delay_ms(20);
- if(temp!=0x0f)
- {
- key_ok=1;
- }
- }
- if(key_ok==1)
- {
- key_ok=0;
- P1=0xf0;
- tem=P1;
- temp=temp | tem; //按位相或取结果判断定位键值
- /*********************************************/
- if(temp==0xee) { i=1; key_valu=1;} // 7
- else if(temp==0xde){ i=2; key_valu=1;} // 8
- else if(temp==0xbe){ i=3; key_valu=1;} // 9
- else if(temp==0x7e) xiugaimima=1; //修改密码按键有效
- /*********************************************/
- else if(temp==0xed){ i=4; key_valu=1;} // 4
- else if(temp==0xdd){ i=5; key_valu=1;} // 5
- else if(temp==0xbd){ i=6; key_valu=1;} // 6
- else if(temp==0x7d) start_stop=1; //启动按键有效
- /*********************************************/
- else if(temp==0xeb){ i=7; key_valu=1;} // 1
- else if(temp==0xdb){ i=8; key_valu=1;} // 2
- else if(temp==0xbb){ i=9; key_valu=1;} // 3
- else if(temp==0x7b) quxiao=1; //取消输入密码有效
- /*********************************************/
- else if(temp==0xe7){ i=10; key_valu=1;} // *无效
- else if(temp==0xd7){ i=11; key_valu=1;} // 0
- else if(temp==0xb7){ i=12; key_valu=1;} // #无效
- else if(temp==0x77) ok=1; //确认按键有效
- /*********************************************/
- }
- dengdai=1;
- }
- #endif
复制代码
delay.h
- #ifndef __DELAY_H__
- #define __DELAY_H__
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- #include
- /*********************************************
- 功能:延时函数
- 延时时间:在12MHz晶振下延时约 1ms
- *********************************************/
- void delay_ms(uint ms)
- {
- uint x,y;
- for(x=ms;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*********************************************
- 功能:延时函数
- 延时时间:在12MHz晶振下延时约 1us
- *********************************************/
- void delay_us(uint us)
- {
- uint x;
- for(x=us;x>0;x--)
- {
- _nop_();
- }
- }
- #endif
复制代码
been.h
- #ifndef __BEEN_H__
- #define __BEEN_H__
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- #include
- /*********************************************/
- ***it been=P3^5;
- uint time=0;
- void been( )
- {
- speak=0;
- delay_ms(200);
- speak=1;
- }
- #endif
复制代码
speaker.h
- #ifndef __BEEN_H__
- #define __BEEN_H__
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- #include
- /*********************************************/
- ***it speak=P2^4; //定义控制引脚 仿真软件定义端口
- //***it speak=P3^5; //定义控制引脚 研展仿真电路板使用控制端口
- uint tim=0,baojing=0;
- void speaker( )
- {
- while(baojing==1)
- {
- speak=0;
- delay_ms(200);
- speak=1;
- delay_ms(50);
- tim++;
- if(tim==100)
- {
- baojing=0; tim=0;
- }
- }
- }
- void been( )
- {
- speak=0;
- delay_ms(200);
- speak=1;
- }
- #endif
复制代码
T1.h
- #ifndef __T1_H__
- #define __T1_H__
- #define uchar unsigned char // 无符号字符整形 0~ 256
- #define uint unsigned int //定义无符号整形 0~65536
- uint time,j;
- uint ding_time;
- uchar xian1=1,xian2=0;
- //使用定时器T1 定时50ms计数
- void timer1_init( )
- {
- TMOD=0x10; //16位计数
- TH1=(65535-ding_time)/256; TL1=(65535-ding_time)%256; //修改ding_time即为定时时间
- EA=1; ET1=1; TR1=0; //如:ding_time=50000,即为50ms。由主程序设置
- }
- //中断服务函数
- void timer1_service() interrupt 3
- {
- time++; //50ms 加1 满20次即为1s
- TH1=(65535-ding_time)/256; TL1=(65535-ding_time)%256; //重新装初值。设为50ms
- if(time==60) //定时满1s钟 20*50ms=1000ms=1s 修改该参数可以改变显示的频率
- {
- time=0;
- if(xian1==1)
- {
- xian1=0;
- xian2=1;
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(table1[j]);
- delay_us(10);
- }
- }
- else if(xian2==1)
- {
- xian1=1;
- xian2=0;
- write_com(0x80);
- for(j=0;j<16;j++)
- {
- write_data(table0[j]);
- delay_us(10);
- }
- }
- }
- }
- #endif
复制代码
|