javascript×÷±íµ¥ÊäÈëÀàÐ͵ÄÑéÖ¤

本文提供了一套丰富的JavaScript函数,用于验证各种输入数据的有效性,包括日期、时间、数值、身份证号等。这些函数覆盖了从基本类型检查到复杂格式验证的各种场景。

var today = new Date();
var sError="";
String.prototype.trim = function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.ltrim = function(){
return this.replace(/^\s*/g,"");
}
String.prototype.rtrim = function(){
return this.replace(/\s*$/g,"");
}

function trim(){
if(arguments.length<1)
?? return null;
if(typeof(arguments[0])=="string")
?? return arguments[0].replace(/(^\s*)|(\s*$)/g, "");
else
?? return "";
}
function ltrim(){
if(arguments.length<1)
?? return null;
if(typeof(arguments[0])=="string")
?? return arguments[0].replace(/(^\s*)/g, "");
else
?? return "";
}
//×Ö·ûÈ¥³ý×óÓÒ¿Õ¸ñº¯Êý
function rtrim(){
if(arguments.length<1)
?? return null;
if(typeof(arguments[0])=="string")
?? return arguments[0].replace(/(\s*$)/g, "");
else
?? return "";
}
//Êý×ÖУÑ麯Êý ÊÇ·ñÊÇÊý×Ö
function __isNum(s)
{
var re = /^[0-9]+$/;
return re.test(s);
}
//ÊÇ·ñÊÇFloat
function __isFloat(s)
{
if (__isNum(s)) return true;
var re = /^[+|-]{0,1}\d*\.?\d+$/;
return re.test(s);
}
//ÊÇ·ñÊÇ¿ÆÑ§¼ÆÊý·¨Float
function __isEFloat(s)
{
??? var re = /^[+|-]{0,1}\d*\.[\.\d+]{0,1}\e[-|+]{0,1}\d+$/;
??? return re.test(s);
}
//ÊÇ·ñÓÐÌØÊâ·ûºÅ
function __isQuoteIn(s)
{
var re = /\"|\'|\¡°|\¡±|\¡®|\¡¯|\%|\$|\£¤|\¡­¡­|\¡¤|\¡ª|\-|\¡ª¡ª|\!|\£¡|\#|\@|\~|\^|\*|\,|\.|\£¬|\¡£|\?|\£¿|\;|\£»|\:|\£º|\{|\}|\\|\/|\[|\]|\(|\)|\+|\-|\¡¢|\||\<|\>/;
return re.test(s);
}
//ÕûÊý ²¢ÇÒСÓÚmax£¬´óÓÚmin ²ÎÊý ¶ÔÏóobject £¬max£¬min
function isIntegerMaxMin(ob,max,min){
var value=parseInt(ob.value);
return ((value==ob.value)&&(value<max)&&(value>min));
}
//ÊÇ·ñÊÇÕûÊý ²ÎÊý ¶ÔÏó
function isInteger(ob,type){
//var value=parseInt(ob.value);
//return (value==ob.value);
if(type=="positive")
return /^\+?\d+$/g.test(ob.value);
else if (type=="negative")
return /^-\d+$/g.test(ob.value);
else
return /^(?:-?|\+?)\d+$/g.test(ob.value);
}
//Åж϶ÔÏóµÄÖµÊÇ·ñÊÇÊý×Ö ²ÎÊý ¶ÔÏó
function checkNum(eSrc)
{
var value = eSrc.value;
return __isNum(value);

}
//Åж϶ÔÏóµÄÖµÊÇ·ñÊÇСÊýÊý×Ö ²ÎÊý ¶ÔÏó
function checkFloat(eSrc)
{
var value = eSrc.value;
return __isFloat(value);
}
//Åж϶ÔÏóµÄÖµÊÇ·ñÊÇ¿ÆÑ§¼ÆÊýÊý×Ö ²ÎÊý ¶ÔÏó
function checkEFloat(eSrc)
{
var value = eSrc.value;
return __isEFloat(value);
}
//×Ö·ûÊÇ·ñ£¿
function __isNumChar(ch)
{
return (ch >= '0' && ch <= '9');
}
//ÊÇ·ñÊǿոñ£¬×ªÐеÈ
function __isBlankChar(ch)
{
//È¥µôÁË'\v';20020522??
return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch=='\t');
}
//»ñµÃ×Ö·û´®µÄ³¤¶È?? Ò»¸öºº×ÖÕ¼2¸ö×Ö½Ú
function byteLength(str)
{
var re=/[\u4E00-\u9FA5]/g;
if(re.test(str))
??? return str.length+str.match(re).length;
else return str.length;

}
//УÑé×Ö·û³¤¶È¹«¹²º¯Êý ¶ÔÏóob,×î´ó³¤¶ÈmaxLen£¬ÏûÏ¢message
function stringLengthCheck(ob,maxLen,message){
if(byteLength(trim(ob.value))>maxLen){
?? alert(message);
?? return false;
}
return true;
}
//»ñµÃµ±Ç°ÈÕÆÚ
function __getCurrentDate()
{
var date = new Date();
var year = ""+date.getFullYear();
var month = date.getMonth()+1;
if(month<10){ month="0"+month;}
var day = date.getDate();
if(day<10){ day = "0"+day;}
return year+month+day;
}
//Êýѧº¯Êý ¸ñʽ»¯Êý¾Ý(½ØÈ¡Ð¡ÊýËÄÉáÎåÈë)?? ²ÎÊý ¶ÔÏóÖµvalue£¬Ð¡Êýλ
function __formatNum(value,scale){
var f = parseFloat(value);
if(scale<0)scale=0;
return f.toFixed(scale);
}
//Êýѧº¯Êý ¸ñʽ»¯Êý¾Ý?? ²ÎÊý ¶ÔÏóÖµvalue£¬Ð¡Êýλ
function __setScale( value , scale )
{
if( isNaN( value ) || isNaN( scale ) || parseInt( scale ) < 0 )
?? return new String( value ) ;

var strValue = new String( value ) ;
var fValue = parseFloat( value ) ;
var iScale = parseInt( scale ) ;

if( iScale == 0 )
?? return new String( ( fValue < 0.0 ? "-" : "" ) + Math.round( Math.abs( fValue ) ) ) ;
??
if( fValue == parseInt( strValue ) ) //´«ÈëµÄ²ÎÊýûÓÐСÊý²¿·Ö
{
?? strValue = new String( parseInt( strValue ) ) + "." ;

?? for( var i = 0 ; i < iScale ; i ++ )
??? strValue += "0" ;
}
else
{
?? var fDecimal = Math.abs( fValue - parseInt( strValue ) ) ;
?? fDecimal = Math.round( fDecimal * Math.pow( 10 , iScale ) ) ;
?? var strDecimal = new String( fDecimal ) ;
?? //¶ÔÓÚÏñ new String( Math.round( 0.07 * Math.pow( 10 , 2 ) ) ) == "7" but not "07" ÕâÑùµÄÇé¿öÐèÒª×÷ÒÔϲ¹Áã´¦Àí
?? if( strDecimal.length < iScale )
?? {
??? var iDecimalLength = strDecimal.length ;
???
??? for( var i = 0 ; i < iScale - iDecimalLength ; i ++ )
???? strDecimal = "0" + strDecimal ;

??? strValue = new String( parseInt( strValue ) ) + "." + strDecimal ;
?? }
?? //¶ÔÓÚÏñ new String( Math.round( 0.995 * Math.pow( 10 , 2 ) ) ) == "100" ÕâÑùµÄÇé¿öÐèÒª×÷ÒÔϲ¹Áã´¦Àí
?? else if( strDecimal.length > iScale )
?? {
??? strValue = new String( parseInt( strValue ) + 1 ) ;???
???
??? strValue += "." ;
??? for( var i = 0 ; i < iScale ; i ++ )
???? strValue += "0" ;
?? }
?? else
??? strValue = new String( parseInt( strValue ) ) + "." + strDecimal ;
}

return strValue ;
}


//Éí·ÝÖ¤µÄÑéÖ¤ ²ÎÊý Öµ
function __isIdCardNo(num)
{
var a=null;
var len = num.length, re;
if (isNaN(num)) {
?? //x½áβ
?? re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})([xX])$/);
?? a=num.match(re);
?? if(a!=null){???
?? }else{
??? alert(sotowerfunction_msg_1);
??? return false;
?? }
}else{
if (len == 15)
?? re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert(sotowerfunction_msg_2); return false;}
var a = num.match(re);
}
if (a != null)
{
if (len==15)
{
?? var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
?? var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
else
{
?? var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
?? var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
if (!B) {alert(sotowerfunction_msg_3+ a[0] +sotowerfunction_msg_4); return false;}
}
return true;
}
//УÑé½ð¶îÊÇ·ñºÏ¸ñ like 9.9999
function __checkMoney(str){
if (trim(str)==""){
?? sError=sotowerfunction_error_8;??
?? return false;
}
if(isNaN(trim(str))){
?? sError=sotowerfunction_error_9;??
?? return false;
}
var nreg = /(^[0-9]+$)|(^[0-9]+)(.[0-9]+$)/;
var nr = str.match(nreg);
if(nr==null){
?? sError=sotowerfunction_error_10;??
?? return false;
}else{
?? return true;
}
}
//ͨ³£½ð¶îÊÇÁ½Î» like 9.99
function __checkMoneyFix(str,n){
if (trim(str)==""){
?? sError=sotowerfunction_error_8;??
?? return false;
}
if(isNaN(trim(str))){
?? sError=sotowerfunction_error_9;??
?? return false;
}
var nreg = /(^[0-9]+$)|(^[0-9]+)(.[0-9]+$)/;
var nr = str.match(nreg);
if(nr==null){
?? sError=sotowerfunction_error_10;??
?? return false;
}else{
?? var index=str.indexOf(".")+1;
?? var ss=str.substring(index);
?? if(ss.length==n){
?? return true;
?? }else{
??? return false;
?? }
}
}
//УÑéÓÊÏä ²ÎÊý ¶ÔÏó.value
function __checkEmail(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
??? var splitted = email.match("^(.+)@(.+)$");
??? if(splitted == null) return false;
??? if(splitted[1] != null )
??? {
????? var regexp_user=/^\"?[\w-_\.]*\"?$/;
????? if(splitted[1].match(regexp_user) == null) return false;
??? }
??? if(splitted[2] != null)
??? {
????? var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
????? if(splitted[2].match(regexp_domain) == null)
????? {
???? var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
???? if(splitted[2].match(regexp_ip) == null) return false;
????? }// if
????? return true;
??? }
return false;
}

//checkbox ȫѡÖÐ ²ÎÊý checkboxµÄname, ÊÇ·ñture,false
function __checkAll(name,tf)
{
var a = document.getElementsByName(name);
var n = a.length;
for (var i=0; i<n; i++)<br="">a[i].checked = tf;
}
//checkbox ÊÇ·ñÓÐÑ¡ÖÐ ²ÎÊý checkboxµÄname ·µ»ØÖµÎªÑ¡ÖеĸöÊý£¬Ã»ÓÐÑ¡ÖÐʱ·µ»Ø 0
function __checkSelectCheckbox(name)
{
var a = document.getElementsByName(name);
var n = a.length;
var isCheck=0;
for (var i=0; i<n; i++){<br="">?? if(a[i].checked){
??? isCheck++;
?? }
}
return isCheck;
}
//ÈÕÆÚУÑ麯Êý 20040501

function __checkStdDate(eSrc)
{
var value = eSrc.value;
if (!__isNum(value)) {
?? sError = sotowerfunction_error_11;
?? return false;
}
if (value.length != 8) {
?? sError = sotowerfunction_error_12;
?? return false;
}

var year = value.substring(0,4);
var month = value.substring(4,6);
var day = value.substring(6,8);
var y = year * 1;
var m = month * 1;
var d = day * 1;
var bReturn = __isLegalDate(y,m,d);
return bReturn;
}
//ÈÕÆÚУÑ麯Êý 200405
function __checkStdMonth(eSrc)
{
var value = eSrc.value;
if (!__isNum(value)) {
?? sError = sotowerfunction_error_11;
?? return false;
}
if (value.length != 6) {
?? sError = sotowerfunction_error_12;
?? return false;
}

??? var year = value.substring(0,4);
var month = value.substring(4,6);
var bReturn = __isLegalMonth(year,month);
return bReturn;
}
//Ô·ÝУÑé 1--12
function __checkMonth(eSrc)
{
??? var value = eSrc.value;
??? if (!__isNum(value)) {
?? sError = sotowerfunction_error_13;
?? return false;
}
??? if(value < 1 || value > 12)
???? {
???? sError = sotowerfunction_error_14;
???? return false;
???? }
?? return true;
}
//Äê·ÝУÑé
function __checkStdYear(eSrc)
{
var value = eSrc.value;
if (value.length != 4) {
?? sError = sotowerfunction_error_12;
?? return false;
}
if (!__isNum(value)) {
?? sError = sotowerfunction_error_11;
?? return false;
}
var year = value;
var bReturn = __isLegalYear(year);
return bReturn;
}
//121212?? 12µã12·Ö12Ãë
function __checkStdTime(eSrc)
{
?? var value = eSrc.value;
if (value.length != 6) {
?? sError = sotowerfunction_error_12;
?? return false;
}
if (!__isNum(value)) {
?? sError = sotowerfunction_error_16;
?? return false;
}
var hour = value.substring(0,2);
var minute = value.substring(2,4);
var second = value.substring(4,6);
var bReturn = __isLegalTime(hour, minute, second);
return bReturn;
}
//ÄêÔÂÈÕУÑé2004/05/01
function __checkSlashStdDate(eSrc)
{
var value = eSrc.value;
if (value.length != 10) {
?? sError = sotowerfunction_error_12;
?? return false;
}
var re = /\d{4}\/\d{2}\/\d{2}/;
if (!re.test(value)) {
?? sError = sotowerfunction_error_17;
?? return false;
}
var year = value.substring(0,4);
var month = value.substring(5,7);
var day = value.substring(8,10);
var bReturn = __isLegalDate(year,month,day);
if (false == bReturn)
?? return false;
return true;
}

//ÊÇ·ñºÏ·¨µÄÈÕÆÚ£¿month »ùÓÚ0
function __isLegalDate(year,month,day)
{
???? if(year < 0 || year > 9999)
???? {
???? sError = sotowerfunction_error_18;
???? return false;
???? }
???? if(month < 1 || month > 12)
???? {
???? sError = sotowerfunction_error_14;
???? return false;
???? }
???? if(day < 1)
???? {
???? sError = sotowerfunction_error_19;
???? return false;
???? }
???? if (day > 31)
???? {
???? sError = sotowerfunction_error_20;
???? return false;
???? }
???? if(month == 2)
???? {
???? if( __isLeapYear(year) )
???? {
??????? if(day > 29)
??????? {
???????? ?? sError = sotowerfunction_error_21;
???????? ?? return false;
???????? }
?? }
?? else
?? {
??? if(day > 28)
??? {
???? sError = sotowerfunction_error_22;
???? return false;
??? }
?? }
} else
{
?? var d1, m1=month;
?? if(m1 > 7)
??? m1 = m1 + 1;
?? d1 = 30 + m1 % 2;
?? if(day > d1)
?? {
??? sError = sotowerfunction_error_23 + d1 +sotowerfunction_error_24;
??? return false;
?? }
}
return true;
}
//ÊÇ·ñÊÇÈóÄê
function __isLeapYear(year)
{
if( ( year % 400 == 0) || (( year % 4 == 0) && (year % 100 != 0)) )
?? return true;
else
?? return false;
}
//ÊÇ·ñºÏ·¨µÄÔ£¿
function __isLegalMonth(year,month)
{
???? if(year < 0 || year > 9999)
???? {
???? sError = sotowerfunction_error_18;
???? return false;
???? }
???? if(month < 1 || month > 12)
???? {
???? sError = sotowerfunction_error_14;
???? return false;
???? }
return true;
}
//ÊÇ·ñºÏ·¨µÄÄꣿ
function __isLegalYear(year)
{
???? if(year < 0 || year > 9999)
???? {
???? sError = sotowerfunction_error_18;
???? return false;
???? }
return true;
}
//ÊÇ·ñÊǺϷ¨µÄʱ·ÖÃë
function __isLegalTime(hour, minute, second)
{
???? if(hour < 0 || hour > 23)
???? {
???? sError = sotowerfunction_error_25;
???? return false;
???? }
???? if(minute < 0 || minute > 59)
???? {
???? sError = sotowerfunction_error_26;
???? return false;
???? }
???? if (second < 0 || second > 59)
???? {
???? sError = sotowerfunction_error_27;
???? return false;
???? }
return true;
}

/*********************************
*ÅжÏÊÇ·ñÊǵ¥×Ö½Úa-zA-Z0-9_-Ö®ÖÐ
**********************************/
function isSingleFormat(str)
{
var singleFormat = /^[.a-zA-Z0-9_-]+$/;
if(!singleFormat.test(str))
{
?? return false;
}
return true;
}

/**************************************
*ÅжÏÊÇ·ñÊǸºÊý
***************************************/
function checkNegative(arg){??
if(isNaN(arg)){
?? if(arg.value<0){
??? return true;
?? }
?? return false;
}
if(arg*1<0){
?? return true;
}
return false;
}
//ʱ¼ä¸ñʽµÄ¼ìÑé ÊʺÏÓÚ20:30:59¸ñʽ
function __checkTime(s){
?? var rs= /^\d{2}\:\d{2}\:\d{2}$/;
?? if(!rs.test(s)){
???? return false;
?? }
?? var arr = s.split(":");
?? if(parseInt(arr[0])>24||parseInt(arr[1])>59||parseInt(arr[2])>59){
?? return false;
?? }
?? return true;
}
//±È½Ï¿ªÊ¼ÈÕÆÚºÍ½áÊøÈÕÆÚ baixchÌí¼Ó20050416
function __compareDate(startDate,endDate){
var startD = startDate.value;
var endD = endDate.value;
if(startD==endD){
?? return 0;
?? }
else if(startD>endD){
?? return -1
}
else if(startD<endd){<br>?? return 1;
}??
}
//¼ìÑé´úÂë¸ñʽ Ò»°ãÇé¿öÏ´úÂëÖ»ÄÜÓÉÓ¢ÎÄ×Ö·û»òÊý×Ö×é³É,²»Äܺ¬ÓÐÖÐÎÄ
function __checkCode(s){
?? var rs = /^([0-9]|[a-z]|[A-Z])+$/;
?? if(!rs.test(s)){
??? return false;
?? }
?? return true;
}

//¼ìÑéIPµØÖ·µÄºÏ·¨ÐÔ ÀýÈç:10.162.11.104ÊÇÕýÈ·µÄIPµØÖ·
function __checkIp(s){
var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
if(!re.test(s)){
???? return false;
}
var ips=s.split(".");
if((ips[0].indexOf("0")==0)||(ips[1].indexOf("0")==0)||(ips[2].indexOf("0")==0)||(ips[3].indexOf("0")==0)){
???? return false;
}
if(ips[0]>255 || ips[1]>255|| ips[2]>255 || ips[3]>255 ){
???? return false;
}
return true;
}

//¼ìÑéÖйúÓʱà Ö»ÄÜÊÇ6λÊý×Ö
function __checkChinaPostCode(s){
var rs=/\d{6}/;
if(!rs.test(s)){
?? return false;
}
??????? return true;
}
//ÅжÏ×Ö·û´®ÊÇ·ñÊǹ̶¨µç»°ºÅÂë×Ö·û´®£¬ÈôÊÇÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse
function __isFixedTelephone(s){
return /^(\d{2,4}-)?((\(\d{3,5}\))|(\d{3,5}-))?\d{3,8}(-\d+)?$/g.test(s);
}
//ÅжÏ×Ö·û´®ÊÇ·ñÊÇÊÖ»úµç»°ºÅÂë×Ö·û´®£¬ÈôÊÇÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse
function __isMobileTelephone(s) {
return /^1(3\d|(58|59|56|52|53|50))\d{8}$/g.test(s);
}
//ÅжÏ×Ö·û´®ÊÇ·ñÊǵ绰ºÅÂë×Ö·û´®£¬ÈôÊÇÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse
function __isTelephone(s) {
return __isMobileTelephone(s) || __isFixedTelephone(s);
}
//ÅжÏ×Ö·û´®ÊÇ·ñÒÔ×Öĸ¿ªÍ·£¬ÆäËûΪ×ÖĸºÍÊý×Ö×éºÏ
function __checkCodeFormat(s) {
return /^[A-Za-z][A-Za-z0-9_]{0,}$/g.test(s);
}
/**
* XMLHTTP Ìá½»
**/
//ͨ¹ýxmlhttpȡֵ£¬·µ»Ø×Ö·û´®
function getHtmlStringByXmlhttp(url)
{
if(url==null)
{
alert(sotowerfunction_msg_5);
return;
}
try
?? {
?? var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
?? if(xmlhttp==null)
?? {
?? alert(sotowerfunction_msg_6+ex.description);
?? return ;
?? }
?? xmlhttp.open("POST",url,false);
?? xmlhttp.send();
?? return xmlhttp.responseText;
?? }catch(ex)
?? {
?? alert(sotowerfunction_msg_7+ex.description);
?? return "";
?? }
}

function getArrayByXmlHttp(urll){
var values=getHtmlStringByXmlhttp(urll);
???? if(values.indexOf("ûÓмǼ")>-1){
?????? return -1;
???? }
var arr=new Array();
var obs=values.split("@|@");
for(var i=0;i<obs.length;i++){ <br="">obsv=obs[i].split("@,@");
arr[i]=obsv;??
}
return arr;
}

function setButtonDisabled(condition) {
?? var canDisable = (window.event != null && window.event.srcElement != null && window.event.srcElement.tagName.toLowerCase() == "button");
?? if (canDisable&&condition) {
??? window.event.srcElement.disabled = true;
?? }
?? }

#################################################################### ## ## ## ## ## CODE SKELETON v1.0.0 ## ## ## ## TP-LINK ## ## 2013.7.9 ## #################################################################### 1. žÅÊö CODE SKELETONÊÇÌáÈ¡CODEʵÏÖµÄÖ÷Ìå¿òŒÜ¡£ËüžúʵŒÊʵÏÖ»¹Óзdz£ŽóµÄ²î Ÿà¡£·œ±ãŽóŒÒÊìÏ€CODEµÄ¹ŠÄÜ»®·ÖÒÔŒ°ŽóžÅÁËœâÓïÒô¹ŠÄÜÉæŒ°µÄһЩ±à³ÌŒŒÊõ¡£ ËüÖ÷Òª°üº¬menuconfigµÄ»ùŽ¡Ê¹Óá¢MakefileŽîœš¹€³Ì¡¢¶¯Ì¬¿âµÄʹÓᢟ²Ì¬¿â µÄʹÓᢌòµ¥ÖÕ¶ËI/O¡¢»Øµ÷º¯Êý¡¢¶àÏ̱߳à³Ì¡¢socket±à³Ì¡¢Œòµ¥Çý¶¯±à³ÌµÈ ÄÚÈÝ¡£¹ŠÄÜʵÏֱȜώֲڣ¬»¶Ó­¶ÁÕß·áž»CODE SKELETONµÄÄÚÈÝ¡£CODE SKELETON Ö»º­žÇÁËCODEʵÏÖµÄÒ»²¿·ÖÄÚÈÝ£¬Èç¹û¶ÁÕß¶ÔÓïÒôÄÚÈÝÓÐÐËÈ€¿ÉÒÔœøÒ»²œÑ§Ï° ºÍÉºóÎIJοŒ×ÊÁϵÄÄÚÈÝ¡£ 2. ¿òŒÜ CODE SKELETON°üÀšÈýžöÄ£¿é£ºÄÚºËÄ£¿é£š×Ö·ûÇý¶¯simple£©£¬·þÎñŽŠÀíÖÐ ÐÄ£šcs_server)ºÍ·þÎñÇëÇó¿Í»§¶Ë£šcs_client£©¡£cs_clientÒÔÃüÁîÐеķœÊœ œÓÊÜÓû§µÄÇëÇ󣬞ùŸÝÃüÁîÔÙÍš¹ýsocket°ÑÃüÁË͵œcs_server, cs_server ŽŠÀíºó·µ»ØÖŽÐМá¹ûžøcs_client¡£Œòµ¥œá¹¹ÍŒÈçÏÂËùÊŸ¡£ *--------* *-----------* *---------* | | | | | | | simple |<----------->| server |<---------->| client | | | | | | | *--------* *-----------* *---------* server ºÍ client Ä£¿éŸùʹÓÃÁœžöÄ£¿é£¬mini_shellºÍsocketÄ£¿é¡£Ç°Õß ·â×°ÖÕ¶ËI/OºÍ»Øµ÷º¯Êý±í¡£ºóÕß·â×°unixÓòÌלÓ×ÖÓÃÓÚœø³ÌŒäÍšÐÅ¡£ 3. ĿŒœá¹¹ TOP [code skeleton¶¥²ãĿŒ] | *---> readme [±ŸÎĵµ *-*] | *---> build [¹€³Ì±àÒë»·Ÿ³] | *---> config [ÅäÖÃĿŒ£¬µ±Ç°Ö»ÓÐmenuconfig] | *---> install [¹€³Ì±àÒëºóÉú³ÉµÄʹÓÃÎÄŒþ] | *---> code [ÔŽŽúÂë] | *---> modules [ÄÚºËÄ£¿é] | | | *---> simple [Œòµ¥×Ö·ûÇý¶¯ÊµÏÖ] | *---> apps [Óû§²ãŽúÂë] | *---> inc [¹«ÓÃÍ·ÎÄŒþ] | *---> cs_libs [¿âÎÄŒþ] | | | *---> mini_shell | | | *---> socket | *---> cs_server | *---> cs_client 4. ʹÓòœÖè 4.1 ÅäÖù€³Ì œøÈëTOP/buildĿŒ£¬ÊäÈëÏÂÃæÃüÁî¡£#ÊÇlinux shellÌáÊŸ·û£¬²»ÊôÓÚÃüÁ·Ö£¬ ºóÐøŸùÏàͬº¬Òå¡£Èç¹û²»ÊäÈëMODEL=xxx, ĬÈÏʹÓÃMODEL=TEST¡£ÅäÖÃÍê³Éºó±£ŽæÅä ÖÃÐÅÏ¢¡£ # make MODEL=xxx menuconfig 4.2 ±àÒë¹€³Ì ŒÌÐøÍ£ÁôÔÚbuildĿŒ£¬ÊäÈëÏÂÃæÃüÁî¡£ # make MODEL=xxx /* MODEL=xxx¿ÉÒÔ²»ÊäÈ룬ĬÈÏʹÓÃMODEL=TEST */ ÁíÍ⣬±àÒëʱ¿ÉÒÔÊäÈë²ÎÊýÀŽŸö¶šÊÇ·ñÆô¶¯µ÷ÊÔ¿ª¹ØŒ°µ÷ÊԵȶ±ð£¬ÈçÏÂÃüÁî # make MODEL=xxx VSDEBUG=yyy /* ÆäÖÐyyy¿ÉÒÔȡֵ error, sys, info, debugl, debugm, debugh£¬Ä¬ÈÏΪerror */ 4.3 ÔËÐгÌÐò ÏÂÃæµÄ²Ù×÷ŸùÔÚ TOP/installĿŒÏ¡£ 4.3.1 ŒÓÔØÇý¶¯ ŒÓÔØŒòµ¥×Ö·ûÇý¶¯simple£¬ÊäÈëÏÂÃæÃüÁî¡£ # insmod csmsimple.ko # cd /dev # mknod -m 666 csmsimple c 220 0 # cd - 4.3.2 Æô¶¯cs_server Èç¹û±àÒëÑ¡ÏîÉèÖÃΪ¶¯Ì¬ÁŽœÓ¿â£¬ÐèÒªÏȰѶ¯Ì¬ÁŽœÓ¿â¿œ±ŽµœÏàӊλÖãš±ÈÈç /usr/lib/£©¡£Èç¹û±àÒëÑ¡ÏîÉèÖÃΪŸ²Ì¬¿â£¬Ö±œÓÊäÈëÏÂÃæÃüÁî¡£ # ./cs_server & 4.3.3 Æô¶¯cs_client Èç¹û±àÒëÑ¡ÏîÉèÖÃΪ¶¯Ì¬ÁŽœÓ¿â£¬ÐèÒªÏȰѶ¯Ì¬ÁŽœÓ¿â¿œ±ŽµœÏàӊλÖãš±ÈÈç /usr/lib/£©¡£Èç¹û±àÒëÑ¡ÏîÉèÖÃΪŸ²Ì¬¿â£¬Ö±œÓÊäÈëÏÂÃæÃüÁî¡£ # ./cs_client È»ºó¿ÉÒÔœøÈëÃüÁîÐÐģʜ£º[ code skeleton client ] # ¡£Æô¶¯Íê³É¡£ 5. ÍØÕ¹ µ±Ç°°æ±ŸÏµÍ³±ÈœÏŽÖ²Ú£¬»¶Ó­¶ÁÕßÍêÉÆ±ŸÏµÍ³¡£ŽóÖÂÂÞÁÐÐèÒªÍêÉÆµÄµØ·œ¡£ 1£©ÖÕ¶ËI/O£» 2£©ÃüÁîÐÐģʜµÄÀúÊ·ŒÇÂŒ¡¢×Ô¶¯Æ¥Å䣻 3£©Çý¶¯µÄÄں˶šÊ±Æ÷»òÕßÄÚºËÏ̲߳úÉúÊÂŒþʵÏÖclientµÄ׎̬Çл»£¬Íê³ÉÒ»žö СÐ͵Ä׎̬»ú£» 4£©Ïß³Ìͬ²œÊµÏÖ£» 5£©ÓŠÓòãŽúÂëºÍÄںˎúÂëµ÷ÊÔŒŒÊõ£» 6£©clientÌíŒÓžüÓÐÈ€µÄÃüÁî¡£ 6. ²Î¿Œ×ÊÁÏ [1] rfc3261, J. RosenbergµÈ, 2002 [2] Understanding the Session Initiation Protocol (Third Edition), Alan B.Johnston, 2009 [3] LinuxÉ豞Çý¶¯³ÌÐò [4] LinuxÍøÂ簲ȫŒŒÊõÓëʵÏÖ(µÚ¶þ°æ), ³ÂÓÂÑ«, Ç廪Žóѧ³ö°æÉç [5] Unix»·Ÿ³žßŒ¶±à³Ì [6] pjsip¹ÙÍø [7] netfilter¹ÙÍø 7. ·ŽÀ¡ÐÅÏ¢ »¶Ó­ŽóŒÒ·ŽÀ¡ÐÅÏ¢µœ zhonglianbo@tp-link.net¡£ 为什么我的readme是这杨的
08-14
/*ÌâÄ¿ÃèÊö ÊäÈëijλͬѧ¸÷Ãſεijɼ¨£¬Êä³öƽ¾ù³É¼¨¡£ÊäÈëµÄ³É¼¨¾ùΪÎå¼¶ÖÆ³É¼¨£¬Îå¼¶ÖÆ³É¼¨×ª»»Îª°Ù·ÖÖÆ³É¼¨µÄ¹æÔòÈçÏ£º 'A¡¯×ª»»Îª°Ù·ÖÖ®³É¼¨Îª95·Ö£¬'B¡¯¶ÔÓ¦85·Ö£¬C¶ÔÓ¦75·Ö£¬'D¡¯¶ÔÓ¦65·Ö£¬'E¡¯¶ÔÓ¦40·Ö¡£ Êä³öµÄƽ¾ù³É¼¨ÎªÒ»¸öʵÊý£¬±£Áô1λСÊý¡£ ÒªÇó³ÌÐò¶¨ÒåÒ»¸ögetScore()º¯ÊýºÍÒ»¸ömain()º¯Êý£¬getScore()º¯Êý·µ»ØÒ»¸öµÈ¼¶¶ÔÓ¦µÄ·ÖÊý£¬ÆäÓ๦ÄÜÔÚmain()º¯ÊýÖÐʵÏÖ¡£ int getScore(char g) { //°ÑµÈ¼¶gת»»³É¶ÔÓ¦µÄ·ÖÊý²¢·µ»ØÕâ¸ö·ÖÊý¡£ } ÊäÈë¸ñʽ ÊäÈëΪһÐÐÖ»°üº¬¡¯A¡¯~'E¡¯µÄ×Öĸ£¬Ã¿¸ö×Öĸ±íʾһÃſεijɼ¨£¬ÒԻسµ¼ü±íʾ½áÊø¡£ Êä³ö¸ñʽ Êä³öƽ¾ù³É¼¨£¬ÎªÒ»¸öʵÊý£¬±£ÁôһλСÊý¡£ ÑùÀýÊäÈë AABB ÑùÀýÊä³ö 90.0 */ #include<stdio.h> int getScore(char g) { int fenshu; char A,B,C,D,E; //°ÑµÈ¼¶gת»»³É¶ÔÓ¦µÄ·ÖÊý²¢·µ»ØÕâ¸ö·ÖÊý¡£ if(g==A){ fenshu=95; }else if(g==B){ fenshu=85; }else if(g==C){ fenshu=75; }else if(g==D){ fenshu=65; }else if(g==E){ fenshu=40; } return fenshu; } int main(){ char dj,fen=0,sum=0; for(int i=1;i<=4;i++){ scanf("%s",&dj); int fen=getScore(dj); sum+=fen; } double pj=0; pj=sum/4.0; printf("%.1f",pj); return 0; } 修改代码
11-27
#include<reg52.h> #include<stdio.h> #include"1602.h" #include"delay.h" #include"keyboard.h" /*------------------------------------------------ Ö÷³ÌÐò ------------------------------------------------*/ main() { Timer0_Init(); unsigned char num,i,sign; unsigned char temp[16]; //×î´óÊäÈë16¸ö bit firstflag; float a=0,b=0; unsigned char s; LCD_Init(); //³õʼ»¯Òº¾§ÆÁ DelayMs(10); //ÑÓʱÓÃÓÚÎȶ¨£¬¿ÉÒÔÈ¥µô LCD_Clear(); LCD_Write_String(0,0,"zhang.shi.yi"); //дÈëµÚÒ»ÐÐÐÅÏ¢£¬Ö÷Ñ­»·Öв»ÔÙ¸ü¸Ä´ËÐÅÏ¢£¬ËùÒÔÔÚwhile֮ǰдÈë LCD_Write_String(0,1,"dan.pian.ji.work"); //дÈëµÚ¶þÐÐÐÅÏ¢£¬ÌáʾÊäÈëÃÜÂë for(s=0;s<25;s++)//ÑÓʱ5s DelayMs(100); LCD_Clear(); LCD_Write_String(0,0," LCD calculator"); //дÈëµÚÒ»ÐÐÐÅÏ¢£¬Ö÷Ñ­»·Öв»ÔÙ¸ü¸Ä´ËÐÅÏ¢£¬ËùÒÔÔÚwhile֮ǰдÈë LCD_Write_String(0,1," Fun: + - x / "); //дÈëµÚ¶þÐÐÐÅÏ¢£¬ÌáʾÊäÈëÃÜÂë while (1) //Ö÷Ñ­»· { num=KeyPro(); //ɨÃè¼üÅÌ if(num!=0xff) //Èç¹ûɨÃèÊǰ´¼üÓÐЧֵÔò½øÐд¦Àí { if(i==0) //ÊäÈëÊǵÚÒ»¸ö×Ö·ûµÄʱºòÐèÒª°Ñ¸ÄÐÐÇå¿Õ£¬·½±ã¹Û¿´ LCD_Clear(); if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//ÊäÈëÊý×Ö×î´óÖµ16£¬ÊäÈë·ûºÅ±íʾÊäÈë½áÊø { i=0; //¼ÆÊýÆ÷¸´Î» if(firstflag==0) //Èç¹ûÊÇÊäÈëµÄµÚÒ»¸öÊý¾Ý£¬¸³Öµ¸øa£¬²¢°Ñ±ê־λÖÃ1£¬µ½ÏÂÒ»¸öÊý¾ÝÊäÈëʱ¿ÉÒÔÌø×ª¸³Öµ¸øb { sscanf(temp,"%f",&a); firstflag=1; } else sscanf(temp,"%f",&b); for(s=0;s<16;s++) //¸³ÖµÍê³Éºó°Ñ»º³åÇøÇåÁ㣬·ÀֹϴÎÊäÈëÓ°Ïì½á¹û temp[s]=0; LCD_Write_Char(0,1,num); if(num!='=') //Åжϵ±Ç°·ûºÅλ²¢×öÏàÓ¦´¦Àí sign=num; //Èç¹û²»ÊǵȺżÇϱê־λ else { firstflag=0; //¼ì²âµ½ÊäÈë=ºÅ£¬ÅжÏÉϴζÁÈëµÄ·ûºÏ switch(sign) { case '+':a=a+b; break; case '-':a=a-b; break; case 'x':a=a*b; break; case '/':a=a/b; break; default:break; } sprintf(temp,"%g",a); //Êä³ö¸¡µãÐÍ£¬ÎÞÓõÄ0²»Êä³ö LCD_Write_String(1,1,temp);//ÏÔʾµ½Òº¾§ÆÁ sign=0;a=b=0; //ÓÃÍêºóËùÓÐÊý¾ÝÇåÁã for(s=0;s<16;s++) temp[s]=0; } } else if(i<16) { if((1==i)&& (temp[0]=='0') )//Èç¹ûµÚÒ»¸ö×Ö·ûÊÇ0£¬ÅжÁµÚ¶þ¸ö×Ö·û { if(num=='.') //Èç¹ûÊÇСÊýµãÔòÕý³£ÊäÈ룬¹â±êλÖüÓ1 { temp[1]='.'; LCD_Write_Char(1,0,num);//Êä³öÊý¾Ý i++; } //ÕâÀïûÓÐÅжÏÁ¬Ðø°´Ð¡Êýµã£¬Èç0.0.0 else { temp[0]=num; //Èç¹ûÊÇ1-9Êý×Ö£¬ËµÃ÷0ûÓÐÓã¬ÔòÖ±½ÓÌæ»»µÚһλ0 LCD_Write_Char(0,0,num);//Êä³öÊý¾Ý } } else { temp[i]=num; LCD_Write_Char(i,0,num);//Êä³öÊý¾Ý i++; //ÊäÈëÊýÖµÀÛ¼Ó } } } } } 这是我目前的主程序,请再结合一下
06-12
#include "rc522.h" #include "usart.h" #include "string.h" #include "led.h" #include <stdlib.h> #include "sys.h" // // M1¿¨·ÖΪ16¸öÉÈÇø£¬Ã¿¸öÉÈÇøÓÉËĸö¿é£¨¿é0¡¢¿é1¡¢¿é2¡¢¿é3£©×é³É // ½«16¸öÉÈÇøµÄ64¸ö¿é°´¾ø¶ÔµØÖ·±àºÅΪ£º0~63 // µÚ0¸öÉÈÇøµÄ¿é0£¨¼´¾ø¶ÔµØÖ·0¿é£©£¬ÓÃÓÚ´æ·Å³§ÉÌ´úÂ룬ÒѾ­¹Ì»¯²»¿É¸ü¸Ä // ÿ¸öÉÈÇøµÄ¿é0¡¢¿é1¡¢¿é2ΪÊý¾Ý¿é£¬¿ÉÓÃÓÚ´æ·ÅÊý¾Ý // ÿ¸öÉÈÇøµÄ¿é3Ϊ¿ØÖƿ飨¾ø¶ÔµØÖ·Îª:¿é3¡¢¿é7¡¢¿é11.....£©°üÀ¨ÃÜÂëA£¬´æÈ¡¿ØÖÆ¡¢ÃÜÂëBµÈ /******************************* *Á¬Ïß˵Ã÷£º *1--SDA <----->PC2 *2--SCK <----->PC3 *3--MISO <----->PC4 *4--MOSI <----->PC5 *5--Ðü¿Õ *6--GND <----->GND *7--RST <----->PC6 *8--VCC <----->VCC 3.3v ************************************/ /*È«¾Ö±äÁ¿*/ unsigned char CT[2]; //¿¨ÀàÐÍ unsigned char SN[4]; //¿¨ºÅ£¨µÍ×Ö½ÚÔÚǰ£¬¸ß×Ö½ÚÔÚºó£© unsigned char RFID[16]; //´æ·ÅRFID unsigned char total=0; //´æ·Å¿¨ºÅµÄ¿¨¿â unsigned char card_book[card_number_max][5]= { {243,178,161,29}, {51,58,119,13} }; unsigned char card_human[card_number_max][5]= { {147,62,245,149}, {211,249,42,226} }; unsigned char card_bit[card_number_max]={"\0"}; //¶ÁÈ¡µ½ÒѼÈ뿨ºÅ¿âµÄÏàÓ¦¿¨µÄ±ê־λ u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff}; //ÉÈÇøÃÜÂëA/B u8 AUDIO_OPEN[6] = {0xAA, 0x07, 0x02, 0x00, 0x09, 0xBC}; unsigned char RFID1[16]={0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff}; /*º¯ÊýÉùÃ÷*/ unsigned char status; unsigned char s=0x08; void RC522_Init ( void ) { SPI1_Init(); RC522_Reset_Disable(); RC522_CS_Disable(); PcdReset (); M500PcdConfigISOType ( 'A' );//ÉèÖù¤×÷·½Ê½ } void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE );//PORTCʱÖÓʹÄÜ RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE ); // CS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯ // SCK GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); // MISO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //ÆÕͨÊäÈë GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊäÈë GPIO_Init(GPIOC, &GPIO_InitStructure); // MOSI GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); // RST GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); } /* * º¯ÊýÃû£ºSPI_RC522_SendByte * ÃèÊö £ºÏòRC522·¢ËÍ1 Byte Êý¾Ý * ÊäÈë £ºbyte£¬Òª·¢Ë͵ÄÊý¾Ý * ·µ»Ø : RC522·µ»ØµÄÊý¾Ý * µ÷Óà £ºÄÚ²¿µ÷Óà */ void SPI_RC522_SendByte ( u8 byte ) { u8 counter; for(counter=0;counter<8;counter++) { if ( byte & 0x80 ) RC522_MOSI_1 (); else RC522_MOSI_0 (); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_0 (); // delay_ms ( 1 ); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_1(); // delay_ms ( 3 ); RC522_DELAY(); byte <<= 1; } } /* * º¯ÊýÃû£ºSPI_RC522_ReadByte * ÃèÊö £º´ÓRC522·¢ËÍ1 Byte Êý¾Ý * ÊäÈë £ºÎÞ * ·µ»Ø : RC522·µ»ØµÄÊý¾Ý * µ÷Óà £ºÄÚ²¿µ÷Óà */ u8 SPI_RC522_ReadByte ( void ) { u8 counter; u8 SPI_Data; for(counter=0;counter<8;counter++) { SPI_Data <<= 1; RC522_SCK_0 (); // delay_ms ( 3 ); RC522_DELAY(); if ( RC522_MISO_GET() == 1) SPI_Data |= 0x01; // delay_ms ( 2 ); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_1 (); // delay_ms ( 3 ); RC522_DELAY(); } // printf("****%c****",SPI_Data); return SPI_Data; } /* * º¯ÊýÃû£ºReadRawRC * ÃèÊö £º¶ÁRC522¼Ä´æÆ÷ * ÊäÈë £ºucAddress£¬¼Ä´æÆ÷µØÖ· * ·µ»Ø : ¼Ä´æÆ÷µÄµ±Ç°Öµ * µ÷Óà £ºÄÚ²¿µ÷Óà */ u8 ReadRawRC(u8 ucAddress ) { u8 ucAddr, ucReturn; ucAddr =((ucAddress << 1 ) & 0x7E ) | 0x80; RC522_CS_Enable(); SPI_RC522_SendByte(ucAddr); ucReturn = SPI_RC522_ReadByte (); RC522_CS_Disable(); return ucReturn; } /* * º¯ÊýÃû£ºWriteRawRC * ÃèÊö £ºÐ´RC522¼Ä´æÆ÷ * ÊäÈë £ºucAddress£¬¼Ä´æÆ÷µØÖ· * ucValue£¬Ð´Èë¼Ä´æÆ÷µÄÖµ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void WriteRawRC ( u8 ucAddress, u8 ucValue ) { u8 ucAddr; ucAddr = ( ucAddress << 1 ) & 0x7E; RC522_CS_Enable(); SPI_RC522_SendByte ( ucAddr ); SPI_RC522_SendByte ( ucValue ); RC522_CS_Disable(); } /* * º¯ÊýÃû£ºSetBitMask * ÃèÊö £º¶ÔRC522¼Ä´æÆ÷ÖÃλ * ÊäÈë £ºucReg£¬¼Ä´æÆ÷µØÖ· * ucMask£¬ÖÃλֵ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void SetBitMask ( u8 ucReg, u8 ucMask ) { u8 ucTemp; ucTemp = ReadRawRC ( ucReg ); WriteRawRC ( ucReg, ucTemp | ucMask ); // set bit mask } /* * º¯ÊýÃû£ºClearBitMask * ÃèÊö £º¶ÔRC522¼Ä´æÆ÷Çåλ * ÊäÈë £ºucReg£¬¼Ä´æÆ÷µØÖ· * ucMask£¬Çåλֵ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void ClearBitMask ( u8 ucReg, u8 ucMask ) { u8 ucTemp; ucTemp = ReadRawRC ( ucReg ); WriteRawRC ( ucReg, ucTemp & ( ~ ucMask) ); // clear bit mask } /* * º¯ÊýÃû£ºPcdAntennaOn * ÃèÊö £º¿ªÆôÌìÏß * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void PcdAntennaOn ( void ) { u8 uc; uc = ReadRawRC ( TxControlReg ); if ( ! ( uc & 0x03 ) ) SetBitMask(TxControlReg, 0x03); } /* * º¯ÊýÃû£ºPcdAntennaOff * ÃèÊö £º¹Ø±ÕÌìÏß * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void PcdAntennaOff ( void ) { ClearBitMask ( TxControlReg, 0x03 ); } /* * º¯ÊýÃû£ºPcdRese * ÃèÊö £º¸´Î»RC522 * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÍⲿµ÷Óà */ void PcdReset ( void ) { RC522_Reset_Disable(); rt_thread_mdelay(1); RC522_Reset_Enable(); rt_thread_mdelay(1); RC522_Reset_Disable(); rt_thread_mdelay(1); WriteRawRC(CommandReg,0x0f ); while(ReadRawRC(CommandReg)&0x10); rt_thread_mdelay(1); WriteRawRC ( ModeReg, 0x3D ); //¶¨Òå·¢ËͺͽÓÊÕ³£ÓÃģʽ ºÍMifare¿¨Í¨Ñ¶£¬CRC³õʼֵ0x6363 WriteRawRC ( TReloadRegL, 30 ); //16λ¶¨Ê±Æ÷µÍλ WriteRawRC ( TReloadRegH, 0 ); //16λ¶¨Ê±Æ÷¸ßλ WriteRawRC ( TModeReg, 0x8D ); //¶¨ÒåÄÚ²¿¶¨Ê±Æ÷µÄÉèÖà WriteRawRC ( TPrescalerReg, 0x3E ); //ÉèÖö¨Ê±Æ÷·ÖƵϵÊý WriteRawRC ( TxAutoReg, 0x40 ); //µ÷ÖÆ·¢ËÍÐźÅΪ100%ASK } /* * º¯ÊýÃû£ºM500PcdConfigISOType * ÃèÊö £ºÉèÖÃRC522µÄ¹¤×÷·½Ê½ * ÊäÈë £ºucType£¬¹¤×÷·½Ê½ * ·µ»Ø : ÎÞ * µ÷Óà £ºÍⲿµ÷Óà */ void M500PcdConfigISOType ( u8 ucType ) { if ( ucType == 'A') //ISO14443_A { ClearBitMask ( Status2Reg, 0x08 ); WriteRawRC ( ModeReg, 0x3D );//3F WriteRawRC ( RxSelReg, 0x86 );//84 WriteRawRC( RFCfgReg, 0x7F ); //4F WriteRawRC( TReloadRegL, 30 );//tmoLength);// TReloadVal = 'h6a =tmoLength(dec) WriteRawRC ( TReloadRegH, 0 ); WriteRawRC ( TModeReg, 0x8D ); WriteRawRC ( TPrescalerReg, 0x3E ); rt_thread_mdelay( 2 ); PcdAntennaOn ();//¿ªÌìÏß } } /* * º¯ÊýÃû£ºPcdComMF522 * ÃèÊö £ºÍ¨¹ýRC522ºÍISO14443¿¨Í¨Ñ¶ * ÊäÈë £ºucCommand£¬RC522ÃüÁî×Ö * pInData£¬Í¨¹ýRC522·¢Ë͵½¿¨Æ¬µÄÊý¾Ý * ucInLenByte£¬·¢ËÍÊý¾ÝµÄ×Ö½Ú³¤¶È * pOutData£¬½ÓÊÕµ½µÄ¿¨Æ¬·µ»ØÊý¾Ý * pOutLenBit£¬·µ»ØÊý¾ÝµÄ볤¶È * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÄÚ²¿µ÷Óà */ char PcdComMF522 ( u8 ucCommand, u8 * pInData, u8 ucInLenByte, u8 * pOutData, u32 * pOutLenBit ) { char cStatus = MI_ERR; u8 ucIrqEn = 0x00; u8 ucWaitFor = 0x00; u8 ucLastBits; u8 ucN; u32 ul; switch ( ucCommand ) { case PCD_AUTHENT: //MifareÈÏÖ¤ ucIrqEn = 0x12; //ÔÊÐí´íÎóÖжÏÇëÇóErrIEn ÔÊÐí¿ÕÏÐÖжÏIdleIEn ucWaitFor = 0x10; //ÈÏ֤Ѱ¿¨µÈ´ýʱºò ²éѯ¿ÕÏÐÖжϱê־λ break; case PCD_TRANSCEIVE: //½ÓÊÕ·¢ËÍ ·¢ËͽÓÊÕ ucIrqEn = 0x77; //ÔÊÐíTxIEn RxIEn IdleIEn LoAlertIEn ErrIEn TimerIEn ucWaitFor = 0x30; //Ѱ¿¨µÈ´ýʱºò ²éѯ½ÓÊÕÖжϱê־λÓë ¿ÕÏÐÖжϱê־λ break; default: break; } WriteRawRC ( ComIEnReg, ucIrqEn | 0x80 ); //IRqInvÖÃλ¹Ü½ÅIRQÓëStatus1RegµÄIRqλµÄÖµÏà·´ ClearBitMask ( ComIrqReg, 0x80 ); //Set1¸ÃλÇåÁãʱ£¬CommIRqRegµÄÆÁ±ÎλÇåÁã WriteRawRC ( CommandReg, PCD_IDLE ); //д¿ÕÏÐÃüÁî SetBitMask ( FIFOLevelReg, 0x80 ); //ÖÃλFlushBufferÇå³ýÄÚ²¿FIFOµÄ¶ÁºÍдָÕëÒÔ¼°ErrRegµÄBufferOvfl±ê־λ±»Çå³ý for ( ul = 0; ul < ucInLenByte; ul ++ ) WriteRawRC ( FIFODataReg, pInData [ ul ] ); //дÊý¾Ý½øFIFOdata WriteRawRC ( CommandReg, ucCommand ); //дÃüÁî if ( ucCommand == PCD_TRANSCEIVE ) SetBitMask(BitFramingReg,0x80); //StartSendÖÃλÆô¶¯Êý¾Ý·¢ËÍ ¸ÃλÓëÊÕ·¢ÃüÁîʹÓÃʱ²ÅÓÐЧ ul = 434;//¸ù¾ÝʱÖÓÆµÂʵ÷Õû£¬²Ù×÷M1¿¨×î´óµÈ´ýʱ¼ä25ms,Ô­ÏÈΪ1000 do //ÈÏÖ¤ ÓëѰ¿¨µÈ´ýʱ¼ä { ucN = ReadRawRC ( ComIrqReg ); //²éѯʼþÖÐ¶Ï ul --; } while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) ); //Í˳öÌõ¼þi=0,¶¨Ê±Æ÷Öжϣ¬Óëд¿ÕÏÐÃüÁî ClearBitMask ( BitFramingReg, 0x80 ); //ÇåÀíÔÊÐíStartSendλ if ( ul != 0 ) { if ( ! (( ReadRawRC ( ErrorReg ) & 0x1B )) ) //¶Á´íÎó±êÖ¾¼Ä´æÆ÷BufferOfI CollErr ParityErr ProtocolErr { cStatus = MI_OK; if ( ucN & ucIrqEn & 0x01 ) //ÊÇ·ñ·¢Éú¶¨Ê±Æ÷ÖÐ¶Ï cStatus = MI_NOTAGERR; if ( ucCommand == PCD_TRANSCEIVE ) { ucN = ReadRawRC ( FIFOLevelReg ); //¶ÁFIFOÖб£´æµÄ×Ö½ÚÊý ucLastBits = ReadRawRC ( ControlReg ) & 0x07; //×îºó½ÓÊÕµ½µÃ×Ö½ÚµÄÓÐЧλÊý if ( ucLastBits ) * pOutLenBit = ( ucN - 1 ) * 8 + ucLastBits; //N¸ö×Ö½ÚÊý¼õÈ¥1£¨×îºóÒ»¸ö×Ö½Ú£©+×îºóһλµÄλÊý ¶ÁÈ¡µ½µÄÊý¾Ý×ÜλÊý else * pOutLenBit = ucN * 8; //×îºó½ÓÊÕµ½µÄ×Ö½ÚÕû¸ö×Ö½ÚÓÐЧ if ( ucN == 0 ) ucN = 1; if ( ucN > MAXRLEN ) ucN = MAXRLEN; for ( ul = 0; ul < ucN; ul ++ ) pOutData [ ul ] = ReadRawRC ( FIFODataReg ); } } else cStatus = MI_ERR; // printf(ErrorReg); } SetBitMask ( ControlReg, 0x80 ); // stop timer now WriteRawRC ( CommandReg, PCD_IDLE ); return cStatus; } /* * º¯ÊýÃû£ºPcdRequest * ÃèÊö £ºÑ°¿¨ * ÊäÈë £ºucReq_code£¬Ñ°¿¨·½Ê½ * = 0x52£¬Ñ°¸ÐÓ¦ÇøÄÚËùÓзûºÏ14443A±ê×¼µÄ¿¨ * = 0x26£¬Ñ°Î´½øÈëÐÝÃß״̬µÄ¿¨ * pTagType£¬¿¨Æ¬ÀàÐÍ´úÂë * = 0x4400£¬Mifare_UltraLight * = 0x0400£¬Mifare_One(S50) * = 0x0200£¬Mifare_One(S70) * = 0x0800£¬Mifare_Pro(X)) * = 0x4403£¬Mifare_DESFire * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdRequest ( u8 ucReq_code, u8 * pTagType ) { char cStatus; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ClearBitMask ( Status2Reg, 0x08 ); //ÇåÀíָʾMIFARECyptolµ¥Ôª½ÓͨÒÔ¼°ËùÓп¨µÄÊý¾ÝͨÐű»¼ÓÃܵÄÇé¿ö WriteRawRC ( BitFramingReg, 0x07 ); // ·¢Ë͵Ä×îºóÒ»¸ö×Ö½ÚµÄ Æßλ SetBitMask ( TxControlReg, 0x03 ); //TX1,TX2¹Ü½ÅµÄÊä³öÐźŴ«µÝ¾­·¢Ë͵÷ÖÆµÄ13.56µÄÄÜÁ¿Ôز¨ÐźŠucComMF522Buf [ 0 ] = ucReq_code; //´æÈë ¿¨Æ¬ÃüÁî×Ö cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 1, ucComMF522Buf, & ulLen ); //Ѱ¿¨ if ( ( cStatus == MI_OK ) && ( ulLen == 0x10 ) ) //Ѱ¿¨³É¹¦·µ»Ø¿¨ÀàÐÍ { * pTagType = ucComMF522Buf [ 0 ]; * ( pTagType + 1 ) = ucComMF522Buf [ 1 ]; } else cStatus = MI_ERR; return cStatus; } /* * º¯ÊýÃû£ºPcdAnticoll * ÃèÊö £º·À³åײ * ÊäÈë £ºpSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö½Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdAnticoll ( u8 * pSnr ) { char cStatus; u8 uc, ucSnr_check = 0; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ClearBitMask ( Status2Reg, 0x08 ); //ÇåMFCryptol Onλ Ö»Óгɹ¦Ö´ÐÐMFAuthentÃüÁîºó£¬¸Ãλ²ÅÄÜÖÃλ WriteRawRC ( BitFramingReg, 0x00); //ÇåÀí¼Ä´æÆ÷ Í£Ö¹ÊÕ·¢ ClearBitMask ( CollReg, 0x80 ); //ÇåValuesAfterCollËùÓнÓÊÕµÄλÔÚ³åÍ»ºó±»Çå³ý ucComMF522Buf [ 0 ] = 0x93; //¿¨Æ¬·À³åÍ»ÃüÁî ucComMF522Buf [ 1 ] = 0x20; cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 2, ucComMF522Buf, & ulLen);//Ó뿨ƬͨÐÅ if ( cStatus == MI_OK) //ͨÐųɹ¦ { for ( uc = 0; uc < 4; uc ++ ) { * ( pSnr + uc ) = ucComMF522Buf [ uc ]; //¶Á³öUID ucSnr_check ^= ucComMF522Buf [ uc ]; } if ( ucSnr_check != ucComMF522Buf [ uc ] ) cStatus = MI_ERR; } SetBitMask ( CollReg, 0x80 ); return cStatus; } /* * º¯ÊýÃû£ºCalulateCRC * ÃèÊö £ºÓÃRC522¼ÆËãCRC16 * ÊäÈë £ºpIndata£¬¼ÆËãCRC16µÄÊý×é * ucLen£¬¼ÆËãCRC16µÄÊý×é×Ö½Ú³¤¶È * pOutData£¬´æ·Å¼ÆËã½á¹û´æ·ÅµÄÊ×µØÖ· * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void CalulateCRC ( u8 * pIndata, u8 ucLen, u8 * pOutData ) { u8 uc, ucN; ClearBitMask(DivIrqReg,0x04); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0x80); for ( uc = 0; uc < ucLen; uc ++) WriteRawRC ( FIFODataReg, * ( pIndata + uc ) ); WriteRawRC ( CommandReg, PCD_CALCCRC ); uc = 0xFF; do { ucN = ReadRawRC ( DivIrqReg ); uc --; } while ( ( uc != 0 ) && ! ( ucN & 0x04 ) ); pOutData [ 0 ] = ReadRawRC ( CRCResultRegL ); pOutData [ 1 ] = ReadRawRC ( CRCResultRegM ); } /* * º¯ÊýÃû£ºPcdSelect * ÃèÊö £ºÑ¡¶¨¿¨Æ¬ * ÊäÈë £ºpSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö½Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdSelect ( u8 * pSnr ) { char ucN; u8 uc; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_ANTICOLL1; ucComMF522Buf [ 1 ] = 0x70; ucComMF522Buf [ 6 ] = 0; for ( uc = 0; uc < 4; uc ++ ) { ucComMF522Buf [ uc + 2 ] = * ( pSnr + uc ); ucComMF522Buf [ 6 ] ^= * ( pSnr + uc ); } CalulateCRC ( ucComMF522Buf, 7, & ucComMF522Buf [ 7 ] ); ClearBitMask ( Status2Reg, 0x08 ); ucN = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 9, ucComMF522Buf, & ulLen ); if ( ( ucN == MI_OK ) && ( ulLen == 0x18 ) ) ucN = MI_OK; else ucN = MI_ERR; return ucN; } /* * º¯ÊýÃû£ºPcdAuthState * ÃèÊö £ºÑéÖ¤¿¨Æ¬ÃÜÂë * ÊäÈë £ºucAuth_mode£¬ÃÜÂëÑé֤ģʽ * = 0x60£¬ÑéÖ¤AÃÜÔ¿ * = 0x61£¬ÑéÖ¤BÃÜÔ¿ * u8 ucAddr£¬¿éµØÖ· * pKey£¬ÃÜÂë * pSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö½Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdAuthState ( u8 ucAuth_mode, u8 ucAddr, u8 * pKey, u8 * pSnr ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = ucAuth_mode; ucComMF522Buf [ 1 ] = ucAddr; for ( uc = 0; uc < 6; uc ++ ) ucComMF522Buf [ uc + 2 ] = * ( pKey + uc ); for ( uc = 0; uc < 6; uc ++ ) ucComMF522Buf [ uc + 8 ] = * ( pSnr + uc ); cStatus = PcdComMF522 ( PCD_AUTHENT, ucComMF522Buf, 12, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ! ( ReadRawRC ( Status2Reg ) & 0x08 ) ) ) { // if(cStatus != MI_OK) // printf("666") ; // else // printf("888"); cStatus = MI_ERR; } return cStatus; } /* * º¯ÊýÃû£ºPcdWrite * ÃèÊö £ºÐ´Êý¾Ýµ½M1¿¨Ò»¿é * ÊäÈë £ºu8 ucAddr£¬¿éµØÖ· * pData£¬Ð´ÈëµÄÊý¾Ý£¬16×Ö½Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdWrite ( u8 ucAddr, u8 * pData ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_WRITE; ucComMF522Buf [ 1 ] = ucAddr; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) ) cStatus = MI_ERR; if ( cStatus == MI_OK ) { memcpy(ucComMF522Buf, pData, 16); for ( uc = 0; uc < 16; uc ++ ) ucComMF522Buf [ uc ] = * ( pData + uc ); CalulateCRC ( ucComMF522Buf, 16, & ucComMF522Buf [ 16 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 18, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) ) cStatus = MI_ERR; } if(cStatus==MI_OK) printf("card write is ok\r\n"); else if(cStatus==MI_ERR) printf("card write is not ok\r\n"); return cStatus; } /* * º¯ÊýÃû£ºPcdRead * ÃèÊö £º¶ÁÈ¡M1¿¨Ò»¿éÊý¾Ý * ÊäÈë £ºu8 ucAddr£¬¿éµØÖ· * pData£¬¶Á³öµÄÊý¾Ý£¬16×Ö½Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdRead ( u8 ucAddr, u8 * pData ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_READ; ucComMF522Buf [ 1 ] = ucAddr; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); if ( ( cStatus == MI_OK ) && ( ulLen == 0x90 ) ) { for ( uc = 0; uc < 16; uc ++ ) * ( pData + uc ) = ucComMF522Buf [ uc ]; } else cStatus = MI_ERR; if(cStatus==MI_OK) printf("card read is ok\r\n"); else if(cStatus==MI_ERR) printf("card read is not ok\r\n"); return cStatus; } /* * º¯ÊýÃû£ºPcdHalt * ÃèÊö £ºÃüÁƬ½øÈëÐÝÃß״̬ * ÊäÈë £ºÎÞ * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É¹¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdHalt( void ) { u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_HALT; ucComMF522Buf [ 1 ] = 0; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); return MI_OK; } void IC_CMT ( u8 ucAddr, u8 * UID, u8 * KEY, u8 RW, u8 * Dat ) { u8 ucArray_ID [ 4 ] = { 0 }; //ÏÈºó´æ·ÅIC¿¨µÄÀàÐͺÍUID(IC¿¨ÐòÁкÅ) PcdRequest ( 0x52, ucArray_ID );//Ѱ¿¨ PcdAnticoll ( ucArray_ID );//·À³åײ PcdSelect ( UID );//Ñ¡¶¨¿¨ PcdAuthState ( 0x60, ucAddr, KEY, UID );//УÑé if ( RW )//¶ÁдѡÔñ£¬1ÊǶÁ£¬0ÊÇд PcdRead ( ucAddr, Dat ); else PcdWrite ( ucAddr, Dat ); PcdHalt (); } void ShowID(u16 x,u16 y, u8 *p, u16 charColor, u16 bkColor) //ÏÔʾ¿¨µÄ¿¨ºÅ£¬ÒÔÊ®Áù½øÖÆÏÔʾ { // u8 num[9]; // u8 i; ///* for(i=0;i<4;i++) // { // num[i*2]=p[i]/16; // num[i*2]>9?(num[i*2]+='7'):(num[i*2]+='0'); // num[i*2+1]=p[i]%16; // num[i*2+1]>9?(num[i*2+1]+='7'):(num[i*2+1]+='0'); // } // num[8]=0; // // LCD_ShowString(6,110,110,16,16,num); */ // printf("ID>>>%s\r\n", num); } #define RC522_DELAY() rt_thread_delay_us( 100 ) extern void clean_BUF(u8 *BUF,int BUF_length); int card_count=0,card_number=0; extern int book_number,human_number; extern uint32_t Librarian; extern struct Book Library_book[5]; extern struct Human Library_Human; extern int rc522_flag; int borrow_flag=0; int user_flag=0; int book_flag=0; int human_flag=0; //RC522_state 0Ôò²»Êä³öÐÅÏ¢£¬1ÔòÊä³öÐÅÏ¢ void RC522_Handel(int RC522_state)//RC522´¦Àíº¯Êý { u32 card_number_D=0; //¿¨ºÅ status = PcdRequest(PICC_REQALL,CT);//Ѱ¿¨ if(status==MI_OK)//Ѱ¿¨³É¹¦ { if(RC522_state==1) printf("card search is ok\r\n"); status=MI_ERR; status = PcdAnticoll(SN);//·À³åײ } if (status==MI_OK)//·À³åײ³É¹¦ { status=MI_ERR; if(RC522_state==1) printf("card_number_0>>>>>>%d\r\n", SN[0]); if(RC522_state==1) printf("card_number_1>>>>>>%d\r\n", SN[1]); if(RC522_state==1) printf("card_number_2>>>>>>%d\r\n", SN[2]); if(RC522_state==1) printf("card_number_3>>>>>>%d\r\n", SN[3]); if(RC522_state==1) card_number_D=(SN[2]<<16)+(SN[1]<<8)+(SN[0]); //»ñȡӡˢ¿¨ºÅ if(RC522_state==1) printf("the card number is :[%d]\r\n",card_number_D); { if(card_number_D==10597107) { Library_book[book_number].book_ID=card_number_D; book_number++; for(int i=0;i<card_number_max;i++) { if(Library_book[i].book_ID==card_number_D)//ÒѾ­½è¹ýÊé { printf("%d»¹Êé%d\r\n",Library_Human[0].human_ID,Library_Human[0].borrow_ID); Library_book[0].status=0;//Êé¹é»¹ u2_printf("card:[%d]00\r\n",Library_Human[0].borrow_ID); Library_Human[0].borrow_ID=0; break; } else { Library_Human[0].borrow_ID=Library_book[0].book_ID;//Õâ¸öÈ˽èÁËÄı¾Êé printf("½èÔÄÕß%d½è×ß%d\r\n",Library_Human[0].human_ID,Library_Human[0].borrow_ID); Library_book[0].status=1;//Êé±»½è³ö£¬×´Ì¬¸Ä±ä //Library_book[book_number].book_ID=card_number_D;//±»½èÊéµÄID u2_printf("card:[%d]01",card_number_D); } } Library_book[0].book_ID=card_number_D; if(Library_book[0].status==0)//ûÓнè¹ýÊé { Library_Human.borrow_ID=Library_book[0].book_ID;//Õâ¸öÈ˽èÁËÄı¾Êé printf("½èÔÄÕß%d½è×ß%d\r\n",Library_Human.human_ID,Library_Human.borrow_ID); Library_book[0].status=1;//Êé±»½è³ö£¬×´Ì¬¸Ä±ä //Library_book[book_number].book_ID=card_number_D;//±»½èÊéµÄID u2_printf("card:[%d]01",card_number_D); } else//ÒѾ­½è¹ýÊé { printf("%d»¹Êé%d\r\n",Library_Human.human_ID,Library_Human.borrow_ID); Library_book[0].status=0;//Êé¹é»¹ u2_printf("card:[%d]00\r\n",Library_Human.borrow_ID); Library_Human.borrow_ID=0; } } else if(card_number_D==16072339) { printf("·Ç·¨ÈËÔ±\r\n"); } else { printf("card number is : [%d]\r\n\r\n",card_number_D); Librarian=card_number_D; Library_Human.human_ID=card_number_D;//½èÊéÈ˵ÄID rc522_flag=1; } } //sprintf(Librarian,"%d",card_number_D); // ShowID(0,200,SN,BLUE,WHITE); //ÔÚÒº¾§ÆÁÉÏÏÔʾ¿¨µÄIDºÅ for(card_count=0;card_count<card_number_max;card_count++) //ÔÚËùÓб£´æ¿¨ºÅµÄÊý×éÖÐѰÕÒÊÇ·ñÓÐÒÑ´æÈ뿨ºÅ¿âµÄ¿¨ { if(strcmp((char *)card_human[card_count],(char *)SN)==0) { // card_bit[card_count]='1'; user_flag=1; human_flag=1; book_flag=1; break; } else { book_flag=0; } } if(user_flag==1) { rc522_flag=1; printf("Óû§%dÈÏÖ¤³É¹¦£¬Çë½øÈë\r\n",card_number_D); Library_book[card_count].human_ID=card_number_D; printf("µÚ%d¸öÈ˽èÊé\r\n",card_count); u2_printf("human:[%d]1\r\n",Library_book[card_count].human_ID);//½èÊéµÄÈË user_flag=0; } else { if(human_flag==1) { for(card_count=0;card_count<card_number_max;card_count++) //ÔÚËùÓб£´æ¿¨ºÅµÄÊý×éÖÐѰÕÒÊÇ·ñÓÐÒÑ´æÈ뿨ºÅ¿âµÄ¿¨ { if(strcmp((char *)card_book[card_count],(char *)SN)==0) { if(Library_book[card_count].status==0)//ÊéÔÚ¿âÖпÉÒÔ±»½è³ö { Library_book[card_count].book_ID=card_number_D;//±»½è³öÊéµÄID Library_book[card_count].status=1;//ÖÃΪ1£¬Êé±»½è³ö printf("%d°ÑÊé¼®%d½è³ö\r\n",Library_book[card_count].human_ID,Library_book[card_count].book_ID); u2_printf("card:[%d]01",Library_book[card_count].book_ID); book_flag=1; break; } else { printf("%d°ÑÊé¼®%d»¹»Ø\r\n",Library_book[card_count].human_ID,Library_book[card_count].book_ID); u2_printf("card:[%d]00",Library_book[card_count].book_ID); Library_book[card_count].book_ID=0;//Êé±»»¹»Ø£¬ÖÃΪ0 Library_book[card_count].status=0;//ÖÃΪ0£¬Êé±»»¹»Ø book_flag=1; break; } } else { book_flag=0; } } user_flag=0; } else { printf("´íÎó²Ù×÷£¬ÎÞ·¨½èÊé\r\n"); book_flag=1; } if(book_flag==0) { printf("δÈë¿âÈËÔ±ÎÞ·¨½øÈë\r\n"); } // if(card_count==card_number_max)//¿¨¿âÖÐÕÒ²»µ½¶ÔÓ¦¿¨ºÅʱ // { // if(card_number<card_number_max) //¿¨¿âÓпÕÓàλÖýøÈë´Ë´¦£¬²¢±£´æÐ¿¨Èë¿â // { // strcpy((char *)card_book[card_number],(char *)SN); //¿¨Æ¬Êý¾ÝÈë¿â // if(RC522_state==1) printf("ÊéÈë¿â[%d]\r\n",card_number); // card_number++; // } // else // { // if(RC522_state==1) printf("¿¨¿âÒѾ­ÂúÁË\r\n"); //¿¨¿âÒѾ­ÂúÁË // } // } // else //¿¨¿âÖÐÓжÔÓ¦¿¨ºÅʱ // { // if(strchr(card_bit,'1')!=NULL)//µ±ÖÁÉÙÓÐÒ»ÕÅÒѱ»Â¼ÈëµÄ¿¨Ë¢ÉÏʱ // { // LED0=0; // // BEEP=1; // rt_thread_mdelay(100); // LED0=1; // BEEP=0; //clean_BUF((u8 *)card_bit,card_number_max); memset(card_bit,0,sizeof(card_bit)); // } //} //total=card1_bit+card2_bit+card3_bit+card4_bit+lxl_bit; status =PcdSelect(SN); } } if(status==MI_OK)//Ñ¡¿¨³É¹¦ { status=MI_ERR; status =PcdAuthState(0x60,0x09,KEY,SN); } if(status==MI_OK)//ÑéÖ¤³É¹¦ { status=MI_ERR; status=PcdRead(s,RFID); } if(status==MI_OK)//¶Á¿¨³É¹¦ { status=MI_ERR; rt_thread_mdelay(100); } //PcdReset(); } 每一部分是干什么的哪些是重复的
12-16
当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值