怎么把单片机里的data改成xdata存储

/**********************************************************************
----------------1.开发环境:Keil v4 ----------------
----------------2.使用单片机型号:STC89C52RC ----------------

***********************************************************************/
#include "main.h"
#include "HX711.h"

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;

unsigned int Temp_Buffer = 0;
//code unsigned char table[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x00}; //0,1,2,3,4,5,6,7,8,9,全暗,全亮 //共阳
code unsigned char table[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X00,0XFF,0x6f,0x79,0x77,0x3f,0x76,0x38}; //0,1,2,3,4,5,6,7,8,9,全暗,全亮,g,e,r,o,h,l //共阴
unsigned char COM1_DATA = 0,COM2_DATA = 0,COM3_DATA = 0,COM4_DATA = 0,COM5_DATA = 0,COM6_DATA = 0;
unsigned char flag = 0;
bit Flag_ERROR = 0;

//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 430

//****************************************************
//主函数
//****************************************************
void main()
{
Init_Timer0();

COM1_DATA = 10;             //H
COM2_DATA = 15;             //E     
COM3_DATA = 17;             //L     
COM4_DATA = 17;             //L     
COM5_DATA = 13;             //0     
COM6_DATA = 16;             //空

Delay_ms(3000);      //延时,等待传感器稳定


Get_Maopi();                //称毛皮重量

while(1)
{
    EA = 0;
    Get_Weight();           //称重
    EA = 1;

    Scan_Key();

    //显示当前重量
    if( Flag_ERROR == 1)
    {
        COM1_DATA = 13;         //E
        COM2_DATA = 14;         //R
        COM3_DATA = 14;         //R
        COM4_DATA = 15;         //O
        COM5_DATA = 14;         //R             
        COM6_DATA = 10;         //空   
    }
    else
    {
        COM4_DATA = Weight_Shiwu/1000;      
        COM3_DATA = Weight_Shiwu%1000/100;      
        COM2_DATA = Weight_Shiwu%100/10;        
        COM1_DATA = Weight_Shiwu%10;
        COM5_DATA = 10;         //空               
        COM6_DATA = 12;         //g 
    }

}

}

//扫描按键
void Scan_Key()
{
if(KEY1 == 0)
{
Delay_ms(5);
if(KEY1 == 0)
{
while(KEY1 == 0);
Get_Maopi(); //去皮
}

}
}

//****************************************************
//称重
//****************************************************
void Get_Weight()
{
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重
if(Weight_Shiwu > 0)

{

Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); //计算实物的实际重量

    if(Weight_Shiwu > 5000)     //超重报警
    {
        Flag_ERROR = 1; 
    }
    else
    {
        Flag_ERROR = 0;
    }
}
else
{
    Weight_Shiwu = 0;
    Flag_ERROR = 1;             //负重报警
}

}

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
Weight_Maopi = HX711_Read();

}

//****************************************************
//初始化定时器0
//****************************************************
void Init_Timer0()
{
TMOD = 0X01; //T0, 工作模式1

TH0 = (65536 - 2000)/256;
TL0 = (65536 - 2000)%256;

TR0 = 1;                //开启定时器
ET0 = 1;                //开启定时器中断
EA = 1;                 //开启总中断       

}

//中断函数
//****************************************************
void Timer0() interrupt 1
{
TH0 = (65536 - 2000)/256;
TL0 = (65536 - 2000)%256;

TF0 = 0;

flag++;
if(flag >= 6)
{
    flag = 0;
}


switch(flag)
{
    case 0:

            COM4 = 1;
            COM5 = 1;
            COM6 = 1;

// if(COM1_DATA < 10)
// {
// SEG_DATA = table[COM1_DATA]|0x80; ////显示第一位值加小数点
// }
// else
// {
SEG_DATA = table[COM1_DATA];

// }

            break;

    case 1:

            COM4 = 1;
            COM5 = 1;
            COM6 = 0;
            SEG_DATA = table[COM2_DATA];        //显示第二位值

            break;


    case 2:

            COM4 = 1;
            COM5 = 0;
            COM6 = 1;
            SEG_DATA = table[COM3_DATA];        ////显示第三位值

            break;


    case 3:

            COM4 = 1;
            COM5 = 0;
            COM6 = 0;
            SEG_DATA = table[COM4_DATA];              //显示第四位值
            break;

    case 4:

            COM4 = 0;
            COM5 = 1;
            COM6 = 1;
            SEG_DATA = table[COM5_DATA];              //显示第四位值
            break;

    case 5:

            COM4 = 0;
            COM5 = 1;
            COM6 = 0;
            SEG_DATA = table[COM6_DATA];              //显示第四位值
            break;

    default : break;
}

}

//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}

2个回答

很简单。在变量声明时加入xdata类型就行。举例:
unsigned char data var1; 变量var1存储在data区
unsigned char pdata var2; 变量var2存储在idata区
unsigned char xdata var3; 变量var3存储在xdata区
unsigned char pdata var4; 变量var4存储在pdata区

data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和dATa的128完全相同,只是因为访问的方式不同。
xdata: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdata: 外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
STM32的编程中,需要用Xdata,idata来定义变量吗?
用51内核时,如果遇到定义变量过多的时候,特别是数组比较多的时候,可以用xdata,idata来定义变量,但是不知道用STM32的时候,能用吗?
如何将matplotlib中的annotate的标记从圆圈改成加号或点?
![plt 图片](http://photo.weibo.com/5141700111/talbum/detail/photo_id/4341712832740349) 统计一个数据的异常点,用箱型图分析,异常点标注的是用圆圈,因为有几个值几乎重叠,圆圈看着太大了,看了官方文档也找不到在哪里改标注,不懂哪里修改成'+'。 ``` #-*- coding: utf-8 -*- import pandas as pd catering_sale = r'C:\Users\81284\OneDrive\python datamining\Python数据分析与挖掘实战\chapter3\demo\data\catering_sale.xls' #餐饮数据 data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列 import matplotlib.pyplot as plt #导入图像库 plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.figure() #建立图像 p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法 x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签 y = p['fliers'][0].get_ydata() y.sort() #从小到大排序,该方法直接改变原对象 #用annotate添加注释 #其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。 #以下参数都是经过调试的,需要具体问题具体调试。 for i in range(len(x)): if i>0: plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i])) else: plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i])) plt.show() #展示箱线图 ```
ADC0809 DAC0832总线方式与单片机STC90C58连接,C程序应该怎么写 求指点
使用代码 *(volatile unsigned char xdata *)0x8028=________;(此处应为输出地址) 实现功能 七段数码管显示数字量,示波器显示模拟量。应该怎么去实现? ![![图片说明](https://img-ask.csdn.net/upload/201805/15/1526388855_585610.png)图片说明](https://img-ask.csdn.net/upload/201805/15/1526388845_366674.png) ![图片说明](https://img-ask.csdn.net/upload/201805/15/1526389068_527771.png)
echarts图表报错,触发事件重新加载图表时报错
var kpiDataList; var supplier; var index; var analysisQuery = function(){ return { fillCharInfo:function(xData,seriesData){ var IndexDataChart = echarts.init(document.getElementById('IndexDataChart')); var option = { tooltip : { trigger: 'axis' }, calculable : true, xAxis : [ { type : 'category', boundaryGap : false, data : xData } ], yAxis : [ { type : 'value', axisLabel : { formatter: '{value}' } } ], grid: { width: 300, height: 150, y: 30, x: 30, borderColor: '#fff' }, series : [ { name:'指标结果值', type:'line', data:seriesData, markPoint : { data : [ {type : 'max', name: '最大值'}, {type : 'min', name: '最小值'} ] }, markLine : { data : [ {type : 'average', name: '平均值'} ] } } ] }; IndexDataChart.setOption(option); }, /** * 查询考核记录排名 */ querySupplierScore : function(){ var timeRange = $("#timeRange").val(); var params = []; params.push({name : 'timeRange', value : timeRange}); $.ajax({ type : "POST", url : "srm/owner/facade/assessment/getSupplierRank.shtml", data : params, dataType : "json", async:false, success : function(data) { if (data[0].length > 0) { var dataList = data[0]; drawRankChart(dataList); analysisQuery.querySupplierIndex(dataList[0].companyName); } } }); }, /** * 查询供应商的指标信息分析 */ querySupplierIndex : function(supplierName){ var timeRange = $("#timeRange").val(); var params = []; params.push({name : 'timeRange', value : timeRange}); params.push({name : 'supplierName', value : supplierName }); $.ajax({ type : "POST", url : "srm/owner/facade/assessment/getSupplierIndex.shtml", data : params, dataType : "json", async:false, success : function(data) { if (null != data) { $('#IndexAnalysisChart').empty(); var indexNameList = data[0]; var indexMaxValueList = data[1]; var indexValueList = data[2]; kpiDataList = data[3]; drawPieChart(indexNameList,indexMaxValueList,indexValueList); if(indexNameList.length > 0){ drawLineChart(indexNameList[0]); } } } }); }, /** * 查询供应商的考核明细 */ querySupplierKpiDetail : function(supplierName,indexName){ var timeRange = $("#detailTimeRange").val(); var params = []; params.push({name : 'timeRange', value : timeRange}); params.push({name : 'supplierName', value : supplierName }); params.push({name : 'indexName', value : indexName }); $.ajax({ type : "POST", url : "srm/owner/facade/assessment/getSupplierKpiDetail.shtml", data : params, dataType : "json", async:false, success : function(data) { if (null != data) { var list = juicer(tplKpiDetail,data); var totalCount = 0; var totalExceCount = 0; var indexValue = 0; var totalAward = 0; var totalCost = 0; var totalMoney = 0; $("#kpiDetail","#addModal").empty().append(list); var kpiDetailList = data.kpiDetailList; for(var i = 0; i<kpiDetailList.length ;i++){ totalCount += parseInt(kpiDetailList[i].lskdTotalCount); totalExceCount += parseInt(kpiDetailList[i].lskdExceptionCount); indexValue += parseInt(kpiDetailList[i].lskdOldValue); totalAward += parseInt(kpiDetailList[i].lskdAwardMoney); totalCost += parseInt(kpiDetailList[i].lskdAmerceMoney); } totalMoney = totalAward-totalMoney; indexValue = indexValue/(kpiDetailList.length); } } }); } }; }(); require.config({ paths: { echarts: 'srm/manage/js/echarts/dist' } }); function drawRankChart(data){ require( [ 'echarts', 'echarts/chart/bar' // 使用柱状图就加载bar模块,按需加载 ], function(){ // 基于准备好的dom,初始化echarts图表 var seriesData = []; var xData = []; if ('' === data || null === data){ seriesData = [0]; xData = [""]; }else{ if(data.length < 10){ for (var i = 0;i < data.length ; i++){ var supplier = data[i].companyName; var score = data[i].score; seriesData.push(score); xData.push(supplier); } }else{ for (var i = 0;i < 10 ; i++){ var supplier = data[i].companyName; var score = data[i].score; seriesData.push(score); xData.push(supplier); } } } var rankChart = echarts.init(document.getElementById('rankChart')); var ecConfig = echarts.config; rankChart.on(ecConfig.EVENT.CLICK, clickBarChart); rankChart.on(ecConfig.EVENT.DBLCLICK, showKpiDetail); var colorList = [ '#ff7d93', '#52cdd5', '#7ecef4', '#979ec9' ]; var itemStyle = { normal : { color : function(params) { if (params.dataIndex >= 0 && params.dataIndex < 3) { // for legend return colorList[params.dataIndex]; } else { return colorList[colorList.length - 1]; } } } }; var option = { tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, formatter : '{b}<br/>{a0}:{c0}' }, calculable : false, xAxis : [ { type : 'category', splitLine: {show: false}, axisLabel: { textStyle : { align : 'center' }}, data : xData } ], yAxis : [ { type : 'value', splitLine: {show: false}, axisLabel: {show: false}, axisLine: {show:false} } ], grid: { width: 700, height: 170, y: 5, x: 5, borderColor: '#fff' }, series : [ { name:'分数', clickable : true, type:'bar', stack: '总量', barWidth:40, itemStyle: itemStyle, data:seriesData } ] }; // 为echarts对象加载数据 rankChart.setOption(option); } ); } function drawPieChart(indexName,indexMaxValue,indexValue){ require( [ 'echarts', 'echarts/chart/pie' ], function() { var indicatorData = []; for(var i =0 ; i < indexName.length ; i ++){ indicatorData.push({text: indexName[i],max: indexMaxValue[i]}); } var IndexAnalysisChart = echarts.init(document.getElementById('IndexAnalysisChart')); var ecConfig = echarts.config; IndexAnalysisChart.on(ecConfig.EVENT.CLICK, clickPieChart); IndexAnalysisChart.on(ecConfig.EVENT.DBLCLICK, showKpiIndexDetail); var option = { tooltip : { trigger: 'axis' }, polar : [ { indicator : indicatorData } ], grid: { width: 300, height: 190, y: 10, x: 0, borderColor: '#fff' }, series : [ { "symbol":"emptyCircle",//空心节点, type: 'radar', data : [ { value : indexValue, name : '指标得分' } ] } ] }; // 为echarts对象加载数据 IndexAnalysisChart.setOption(option); } ); } function clickBarChart(param) { if (typeof param.seriesIndex === 'undefined') { return; } supplier = param.name; if (param.type === 'click') { analysisQuery.querySupplierIndex(param.name); } } function clickPieChart(param) { if (typeof param.seriesIndex === 'undefined') { return; } if (param.type === 'click') { index = param.name; var seriesData = []; var xData = []; if ('' === kpiDataList || null === kpiDataList){ seriesData = [0]; xData = [""]; return analysisQuery.fillCharInfo(xData,seriesData); } for (var i = 0; i < kpiDataList.length; i++) { if (kpiDataList[i].lskdLepiName === index) { var time = analysisQuery .MonthDayFormatHandler(kpiDataList[i].createTime); var score = kpiDataList[i].lskdOldValue; seriesData.push(score); xData.push(time); } } analysisQuery.fillCharInfo(xData,seriesData); } } 触发事件重新加载图表时报错: “_axisList”的值: 对象为 null 或未定义
关于stc可仿真芯片用keil debug调试
为什么,每次编译之后运行debug调试,idata跟xdata数据存储器都不会清除,还是上次运行的值?但data会清楚的!求怎么设置让idata和xdata没次运行都清楚啊!![图片说明](https://img-ask.csdn.net/upload/201705/22/1495455283_314947.png)![图片说明](https://img-ask.csdn.net/upload/201705/22/1495455010_600325.png)![图片说明](https://img-ask.csdn.net/upload/201705/22/1495455321_200881.png)
关于AT89C51单片机数字时钟的设计C语言程序warning问题
本人新手,还希望各位大大帮忙看下怎么解决 Build target 'Target 1' assembling STARTUP.A51... linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START MODULE: STARTUP.obj (?C_STARTUP) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C_START MODULE: STARTUP.obj (?C_STARTUP) ADDRESS: 080AH Program Size: data=9.0 xdata=0 code=15 "t" - 0 Error(s), 2 Warning(s). 源程序如下: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit QB1=P1^0; sbit QB2=P1^1; //数码管段选 sbit QB3=P1^2; sbit QB4=P1^3; sbit QB5=P1^4; sbit QB6=P1^5; sbit fm=P1^6; //蜂鸣器 sbit s1=P2^4; //s5按键,切换显示 sbit s2=P2^3; //s2按键,设置调时 sbit s3=P2^2; //s3按键,加1 sbit s4=P2^1; //s4按键,减1 sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2; uchar count; uchar sec,minu,hour,day,week,mon; uchar n_sec,n_minu,n_hour; uint year; uchar set_2=1,set_1=1; uchar hs,hg,mis,mig,ss,sg; uchar nhs,nhg,nms,nmg,nss=0,nsg=0; uchar ms,mg,ds,dg,w; uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80, 0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf}; //0~F,-,共阳 //uchar code tableyi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//0-F,-,共阴 uchar code table_d[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; //0~9数组,带小数点 uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年 uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年 void delay(uint); //延时函数 void timer0(); //走时中断函数 void jishi(); //计时函数 void key_change(); //切换显示按键函数 void key_set(); //设置时间按键函数 void disp(uchar,uchar,uchar,uchar,uchar,uchar); //显示函数 void zd_clock(); //整点报时函数 void nz_clock(); //闹钟函数 uchar incone(uchar); //加1函数 uchar decone(uchar); //减1函数 void set_time(); //设置时间函数 void set_clock(); //设置闹钟函数 void set_mdw(); //设置月日星期函数 void main() //主函数 { EA=1; ET0=1; TR0=1; TMOD=0x01; TH0=0x4c; //50ms初值 晶振11.0592 TL0=0x00; hour=23;minu=59;sec=49; //赋初值:11点59分0秒 n_hour=12;n_minu=56;n_sec=0; //闹钟赋初值12点1分0秒 year=2008;mon=5;day=14;week=3;//年月日星期赋初值2008年5月11日星期天;祝天下所有母亲节日快乐 while(1) { hs=hour/10; //时分秒HH.MM.SS hg=hour%10; mis=minu/10; mig=minu%10; ss=sec/10; sg=sec%10; ms=mon/10; //月日-星期MM.DD.-W mg=mon%10; ds=day/10; dg=day%10; w=week; nhs=n_hour/10; //闹钟定时HH.MM.SS nhg=n_hour%10; nms=n_minu/10; nmg=n_minu%10; nss=n_sec/10; nsg=n_sec%10; key_change(); //s4按键扫描 key_set(); //s2按键扫描 set_time(); //设置时间 set_mdw(); //设置月日星期 set_clock(); //设置闹钟 if(set_1==1) //正常走时显示 { disp(hs,hg,mis,mig,ss,sg); } if(set_1==2) //设置时间,LED1闪亮 { disp(hs,hg,mis,mig,ss,sg); if(sec%2==0) {led2=1;led3=1;led1=~led1;} // else // {led1=1;} } if(set_1==3) //正常显示月日-星期 { disp(ms,mg,ds,dg,16,w); } if(set_1==4) //设置月日-星期,LED2闪亮 { disp(ms,mg,ds,dg,16,w); if(sec%2==0) {led1=1;led3=1;led2=~led2;} // else // {led2=1;} } if(set_1==5) //正常显示定时 { disp(nhs,nhg,nms,nmg,nss,nsg); } if(set_1==6) //设置闹钟定时,LED3闪亮 { disp(nhs,nhg,nms,nmg,nss,nsg); if(sec%2==0) {led1=1;led2=1;led3=~led3;} // else // {led3=1;} } zd_clock(); //整点报时 nz_clock(); //闹钟 } } void timer0() interrupt 1 //50ms中断函数 { TMOD=0x01; TH0=0x4c; //50ms初值 晶振11.0592 TL0=0x00; count++; if(count==20) { count=0; sec++; jishi(); //调计时函数 } } void jishi() //计时函数 { if(sec==60) { sec=0; minu++; if(minu==60) { minu=0; hour++; if(hour==24) { hour=0; day++; week++; if(week==8) {week=0;} if(year%4==0&&year%100!=0||year%400==0) //闰年 { if(day==table1[mon]+1) { day=0; mon++; if(mon==13) {mon=0;year++;} } } else //非闰年 { if(day==table2[mon]+1) { day=0; mon++; if(mon==13) {mon=0;year++;} } } } } } } void key_change() //s1按键扫描 { if(s1==0) { delay(200); if(s1==0) { set_1++; while(!s1); if(set_1==7) {set_1=1;} } } } void key_set() //s2按键扫描 { if(s2==0) { delay(10); if(s2==0) { set_2++; while(!s2); if(set_2==4) {set_2=1;} } } } void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //显示函数 { QB1=1; QB2=0; QB3=0; QB4=0; QB5=0; QB6=0; P3=table[a1]; //段码送P0口 delay(10); //延时一小会 QB1=0; QB2=1; QB3=0; QB4=0; QB5=0; QB6=0; P3=table[a2]; //第2个数码管显示,带小数点 delay(10); QB1=0; QB2=0; QB3=1; QB4=0; QB5=0; QB6=0; P3=table[a3]; //第3个数码管显示 delay(10); QB1=0; QB2=0; QB3=0; QB4=1; QB5=0; QB6=0; P3=table[a4]; //第4个数码管显示,带小数点 delay(10); QB1=0; QB2=0; QB3=0; QB4=0; QB5=1; QB6=0; //第5个数码管显示 P3=table[a5]; delay(10); QB1=0; QB2=0; QB3=0; QB4=0; QB5=0; QB6=1; P3=table[a6]; //第6个数码管显示 delay(10); QB1=0; QB2=0; QB3=0; QB4=0; QB5=0; QB6=0; } void zd_clock() //整点报时函数 { if(minu==59&&(sec==53||sec==55||sec==57)) { fm=0; delay(5); fm=1; delay(5); } fm=0; if(minu==59&&sec==59) { fm=0; delay(5); fm=1; delay(5); fm=0; } } void nz_clock() //闹钟函数 { if(hour==n_hour&&minu==n_minu&&sec==n_sec) //if((sec%2==0)&&sec<30) { fm=0; delay(1); fm=1; delay(1); } } void set_time() //设置时间函数 { if(set_1==2) { if(set_2==1) { hour=incone(hour); if(hour==24) {hour=0;} // if(hour<0) // {hour=23;} hour=decone(hour); } if(set_2==2) { minu=incone(minu); if(minu==60) {minu=0;} // if(minu<0) // {minu=59;} minu=decone(minu); } } } void set_mdw() //设置月日星期函数 { if(set_1==4) { if(set_2==1) { mon=incone(mon); if(mon==13) {mon=1;} mon=decone(mon); // if(mon==0) // {mon=12;} } if(set_2==2) { day=incone(day); if(day==32) {day=0;} day=decone(day); // if(day==0) // {day=0;} } if(set_2==3) { week=incone(week); if(week==8) {week=0;} week=decone(week); // if(week==0) // {week=7;} } } } void set_clock() //设置闹钟函数 { if(set_1==6) { if(set_2==1) { n_hour=incone(n_hour); if(n_hour==24) {n_hour=0;} n_hour=decone(n_hour); if(n_hour==0) {n_hour=0;} } if(set_2==2) { n_minu=incone(n_minu); if(n_minu==60) {n_minu=0;} n_minu=decone(n_minu); if(n_minu==0) {n_minu=0;} } } } uchar incone(uchar n) //加1函数 { if(s3==0) { delay(200); if(s3==0) { n++; while(!s3); } } return(n); } uchar decone(uchar m) //减1函数 { if(s4==0) { delay(200); if(s4==0) { m--; while(!s4); if(m<0) {m=0;} } } return(m); } void delay(uint k) //延时函数 { uint i,j; for(i=k;i>0;i--) for(j=80;j>0;j--); }
TypeError: Cannot read property 'getAttribute' of null 页面加载Echarts出现这个错误
![图片说明](https://img-ask.csdn.net/upload/201910/07/1570426549_127967.png) created(){ for(let i in this.columnar){ this.Xdata.push(this.columnar[i].itemName) this.ydata.push(this.columnar[i].deviceNum) } this.setHistogram() }, mounted(){ window.addEventListener('resize',()=>{ this.myEcharts.resize() }) this.setHistogram() }, setHistogram(){ this.myEcharts = this.$echarts.init(document.getElementById('myEcharts')) // window.onresize = myEcharts.resize; let option = { title:{ text:'设备区域分布', left:'center', top:20, }, legend: { data:['设备数量'], // left:'right', right:60, top:150 }, tooltip:{ trigger: 'axis', axisPointer : { type : 'shadow' } }, xAxis : [ { type : 'category', data : this.Xdata } ], yAxis : [ { type : 'value' } ], series : [ { name:'设备数量', type:'bar', data:this.ydata } ] } this.myEcharts.setOption(option,true) },
x值的数据如何绑定为文字
若List<string> xData = new List<string>() { "硬度", "拉断伸长率", "拉伸强度" }; 则在数据绑定时chart2.Series[0].XValueMember=的等号右边应该如何写
C++ 向dll传递二维数组,出现野指针
我封装了一个InputParamClass静态库,在c++工程中调用 相关代码如下: InputParamClass.h vector <vector <double>> xdata;//原数据矩阵 void setXdata(const vector <vector <double>>&); InputParamClass.cpp void InputParamClass::setXdata(const vector <vector <double>>& xdata_){ vector <double> v; for(int i = 0; i < xdata_.size(); i ++) { for(int j = 0; j < xdata_[i].size(); j++) v.push_back(xdata_[i][j]); this->xdata.push_back(v); v.clear(); } }; 在工程中include"InputParamClass.h",调用情况如下: vector <vector <double>> data; /*向data中push数据*/ this->inParam->setXdata(data);//原数据集 调试到上面一条语句时,发生中断,如下: 0x00007FFE5765BA2E (InputParamClass.dll) (seismining.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。 vs弹出xmemory0文件,运行指针停在::new ((void *)_Ptr) _Ty(_Val);语句上 void construct(_Ty *_Ptr, const _Ty& _Val) { // construct object at _Ptr with value _Val ::new ((void *)_Ptr) _Ty(_Val); } 新建一个控制台应用程序,一模一样的调用,运行没错。可是上面不知道怎么回事,求大神指点迷津! void show(const vector <vector <double>> & vec) { for(int i = 0; i < vec.size(); i++) for(int j = 0; j < vec[i].size(); j++) cout << vec[i][j] << " "; } int _tmain(int argc, _TCHAR* argv[]) { vector < vector <double>> vec; vector <double> v; for(int i = 0; i < 10; i++) { for(int j = 0; j < 5; j++) { v.push_back(i*j); } vec.push_back(v); v.clear(); } show(vec); while(1); return 0; }
关于cc2530的堆栈问题
Wed Aug 17, 2016 15:03:33: The stack pointer for stack 'XdataStack' (currently XData:0x3030) is outside the stack range (XData:0x0001 to XData:0x0301) 求这个问题的具体解决方法。。卡在这里了 程序运行到此处直接复位了。。求解决方法。是cc2530实验板。
Arc Engine 二次开发遍历CAD数据
Arc Engine开发中,如果遍历CAD文件中的要素以及每个要素的各种属性,特别是扩展属性(XData)?
JavaScript读取Excel表格的问题
function importXLS(field){ var fullpath = window.document.location.pathname; var pos1 = fullpath.indexOf("/"); var fileName1 = fullpath.substring(pos1+1); var pos2 = fileName1.lastIndexOf("/"); var fileName = fileName1.substring(0,pos2) + "E:/IO.xlsx";// xls文件的路径 objCon = new ActiveXObject("ADODB.Connection"); objCon.Provider = "Microsoft.Jet.OLEDB.4.0"; objCon.ConnectionString = "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; objCon.CursorLocation = 1; objCon.Open; var strQuery; //Get the SheetName var strSheetName = "Sheet1$"; //要导入的sheet的名字 var rsTemp = new ActiveXObject("ADODB.Recordset"); rsTemp = objCon.OpenSchema(20); if(!rsTemp.EOF)strSheetName = rsTemp.Fields("Table_Name").Value; rsTemp = null; rsExcel = new ActiveXObject("ADODB.Recordset"); strQuery = "SELECT * FROM [" + strSheetName + "]"; rsExcel.ActiveConnection = objCon; rsExcel.Open(strQuery); var res = []; var temp; while(!rsExcel.EOF){ temp = rsExcel.Fields(field).value; res.push(temp); rsExcel.MoveNext; } // Close the connection and dispose the file objCon.Close; objCon =null; rsExcel = null; return res; } ** 以上是加载Excel数据的函数,下面是调用过程:** var xData = importXLS(1); var yData = importXLS(2); var xyData = []; var i; //转化为散点图需要的二维数组系列 for(i=0;i<xData.length;i++){ xyData.push(new Array(xData[i],yData[i])); } **目的是将excel中的前两列作为一个二维数组读取。但是调用过程出错,各位大神帮忙看一下importXLS函数有什么问题吗?或者下面这几句代码对本地电脑有什么要求?** objCon = new ActiveXObject("ADODB.Connection"); objCon.Provider = "Microsoft.Jet.OLEDB.4.0"; objCon.ConnectionString = "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; objCon.CursorLocation = 1; objCon.Open; 先在此谢过了!!![图片说明](https://img-ask.csdn.net/upload/201710/28/1509198168_737188.png)
MATLAB求距离最小值的计算
问题:已知四个点A,B,C,D的具体位置A(0, 0),B(0, 3), C(8, 1), D(10, 5),求两个点H1,H2的具体位置,使AH1+BH1+H1H2+H2C+H2D为最短。 网上搜到如下的MATLAB代码,本人小白不知道代码是怎么求出最小值的,也不知道怎么在最后输出所求的H1,H2的坐标,望各位大神解释一下,感激不尽! ``` function zd A = [0, 0]; B = [0, 3]; C = [8, 1]; D = [10, 5]; x0 = [1 1 1 1]; figure(gcf) clf set(gcf,'DoubleBuffer','on'); plot(A(1), A(2), 'o'); hold on plot(B(1), B(2), 'o'); plot(C(1), C(2), 'o'); plot(D(1), D(2), 'o'); text(A(1), A(2), ' A', 'Horiz', 'left') %文本外框左边对齐 text(B(1), B(2), ' B', 'Horiz', 'left') text(C(1), C(2), ' C', 'Horiz', 'left') text(D(1), D(2), 'D ', 'Horiz', 'right') h.H1 = plot(x0(1), x0(2), 'rp'); h.H2 = plot(x0(3), x0(4), 'rp'); h.AH1 = plot([A(1) x0(1)], [A(2) x0(2)], 'g'); %绘制绿色线段 h.BH1 = plot([B(1) x0(1)], [B(2) x0(2)], 'g'); h.H1H2 = plot([x0(1) x0(3)], [x0(2) x0(4)], 'g'); h.H2C = plot([C(1) x0(3)], [C(2) x0(4)], 'g'); h.H2D = plot([D(1) x0(3)], [D(2) x0(4)], 'g'); axis equal opt = optimset('Display', 'iter'); x = fminunc(@sumd, x0, opt, A, B, C, D, h); function f = sumd(x, A, B, C, D, h) H1 = x(1:2); H2 = x(3:4); f = dist(A, H1) + dist(B, H1) + dist(H1, H2) + dist(H2, C) + dist(H2, D); set(h.H1, 'XData', H1(1), 'YData', H1(2)); set(h.H2, 'XData', H2(1), 'YData', H2(2)); set(h.AH1, 'XData', [A(1) H1(1)], 'YData', [A(2) H1(2)]); set(h.BH1, 'XData', [B(1) H1(1)], 'YData', [B(2) H1(2)]); set(h.H1H2, 'XData', [H1(1) H2(1)], 'YData', [H1(2) H2(2)]); set(h.H2C, 'XData', [C(1) H2(1)], 'YData', [C(2) H2(2)]); set(h.H2D, 'XData', [D(1) H2(1)], 'YData', [D(2) H2(2)]); title(['AH_1 + BH_1 + H_1H_2 + H_2C + H_2D = ' num2str(f,'%.3f')]) drawnow function d = dist(p1, p2) d = sqrt( sum( (p1-p2).^2 ) ); ```
vc调用matlab生成的com组件返回值不成功
大虾们好,谁能帮帮我。我在设置好vc和matlab环境之后,先通过简单的程序进行了测试,可以实现调用,eg:function z=add(x+y),不论输入参数是数组还是标量都能成功。但是在将复杂的matlab程序做成com组件之后,用vc调用。得不到正确的结果。下面我将贴出简单的程序和复杂的多输入程序给大虾们帮我分析。 function z=add(x+y) ‘inline code’ HRESULT hr; hr=CoCreateInstance(CLSID_add1,NULL,CLSCTX_ALL,IID_Iadd1,(void **)&p_Test); if(FAILED(hr)) { AfxMessageBox("failed"); return; } VARIANT x,y,z; SAFEARRAYBOUND xBound[1],yBound[1]; SAFEARRAY *xArrayPr,*yArrayPr,*zArrayPr; double HUGEP *xdata,*ydata,*zdata; xBound[0].cElements=3,xBound[0].lLbound=0; xArrayPr=SafeArrayCreate(VT_R8,1,xBound); yBound[0].cElements=3,yBound[0].lLbound=0; yArrayPr=SafeArrayCreate(VT_R8,1,yBound); HRESULT hr1,hr2; hr1=SafeArrayAccessData(xArrayPr,(void HUGEP**)&xdata); hr2=SafeArrayAccessData(yArrayPr,(void HUGEP**)&ydata); for(int i=0;i<3;i++) { xdata[i]=(double)i;ydata[i]=(double)i+10; } SafeArrayUnaccessData(xArrayPr); SafeArrayUnaccessData(yArrayPr); VariantInit(&x); x.vt=VT_R8|VT_ARRAY; x.parray=xArrayPr; VariantInit(&y); y.vt=VT_R8|VT_ARRAY; y.parray=yArrayPr; hr=p_Test->add(1,&z,x,y); LONG zBoundL,zBoundU; zArrayPr=z.parray; SafeArrayGetLBound(zArrayPr,2,&zBoundL); SafeArrayGetUBound(zArrayPr,2,&zBoundU); double z0[3]; HRESULT hr3=SafeArrayAccessData(zArrayPr,(void** HUGEP)&zdata); for(int t=0;t<3;t++) { z0[t]=zdata[t]; } m_1=z0[0]; m_2=z0[1]; m_3=z0[2]; UpdateData(false); SafeArrayUnaccessData(zArrayPr); SafeArrayDestroy(xArrayPr); SafeArrayDestroy(yArrayPr); SafeArrayDestroy(zArrayPr); 对这个com组件的调用能够成功。 下面是对我项目中的程序进行调用,我失败了,希望有人能够帮帮我。 ‘inline code’ 考虑到大侠们的感受,我这里只贴出部分参数的设定, HRESULT hr; hr=CoCreateInstance(CLSID_test01,NULL,CLSCTX_ALL,IID_Itest01,(void **)&m_pTest); if(FAILED(hr)) { AfxMessageBox("failed"); return; } VARIANT GST,GSTm,Heat,Heatm,Up_thR,Up_thRm,Up_elec,Up_elecm,Down_elec,Down_elecm,Precision,Fmin,Write01,R; SAFEARRAYBOUND GSTBound[1],GSTmBound[1],HeatBound[1],HeatmBound[1],Up_thRBound[1],Up_thRmBound[1],Up_elecBound[1],Up_elecmBound[1];Down_elecBound[1],Down_elecmBound[1],PrecisionBound[1]; SAFEARRAY *GSTArrayPr,*GSTmArrayPr,*HeatArrayPr,*HeatmArrayPr,*Up_thRArrayPr,*Up_thRmArrayPr; SAFEARRAY *Up_elecArrayPr,*Up_elecmArrayPr,*Down_elecArrayPr,*Down_elecmArrayPr,*PrecisionArrayPr; double HUGEP *GSTdata; double gst[3]={300,300,120}; GSTBound[0].cElements=3,GSTBound[0].lLbound=0; GSTArrayPr=SafeArrayCreate(VT_R8,1,GSTBound); HRESULT hr1; hr1=SafeArrayAccessData(GSTArrayPr,(void HUGEP**)&GSTdata); for(int i0=0;i0<3;i0++) { GSTdata[i0]=gst[i0]; } SafeArrayUnaccessData(GSTArrayPr); VariantInit(&GST); GST.vt=VT_R8|VT_ARRAY; GST.parray=GSTArrayPr; VARIANT addrin,addout; addrin.vt=VT_BSTR; addrin.bstrVal=_com_util::ConvertStringToBSTR("'D:\\MATLAB6.5\\work3\\pulse_rst.txt'"); addout.vt=VT_BSTR; addout.bstrVal=_com_util::ConvertStringToBSTR("'D:\\MATLAB6.5\\work3'"); hr=m_pTest->elec_mini3(1,&R,GST,GSTm,Heat,Heatm,Up_elec,Up_elecm,Down_elec,Down_elecm,Up_thR,Up_thRm,Precision,Fmin,Write01,addrin,addout); m_R=R.dblVal; UpdateData(false); 运行结果得到的没有初始化的R.dblVal=-9.255……;调试的时候出现了User breakpoint called from code at 0X7C9120e的错误。 在下很急,希望有人看到这个后能帮帮我。
matlab哈弗变换问题坐标轴定义
一个简单的hough变换,检测一条直线 I=imread('line3.png'); I1=rgb2gray(I); [H,T,R]=hough(I1,'RhoResolution',1,'ThetaResolution',0.5); figure(1);imshow(H,'XData',T,'YData',R,'InitialMagnification','fit'); P=houghpeaks(H,1); S=houghlines(I1,R,T,P,'FillGap',5,'MinLength',7); axis on,axis normal,hold on; 图片如下![图片说明](https://img-ask.csdn.net/upload/201507/06/1436171041_6331.png) 是待检测的图片 检测后显示H,如下图![图片说明](https://img-ask.csdn.net/upload/201507/06/1436171098_852498.png) 图片中的点没有汇聚于一个点 不知道是什么原因,另外检测后,P的值也和预想不一致,不知道Matlab的hough变换中,原图中的坐标轴和正方向是如何定义的,想请教下哪位大神,万分感谢!
【python】为什么matplotlib的ax.set_xticklabel()放在类的__init__()里就没用?
因为要画很多图就写了个画图类,但是初始化的时候加上ax.set_xticklabels()就会没用。 ```python class DrawCharts: def __init__(self, title='', xlabel='', ylabel='', xticks=None, yticks=None, xticklabels=None, yticklabels=None, xscale='linear', yscale='linear', autofmt_x=True): self.title = title self.xlabel = xlabel self.ylabel = ylabel self.xticks = xticks self.yticks = yticks self.xticklabels = xticklabels self.yticklabels = yticklabels self.xscale = xscale self.yscale = yscale self.autofmt_x = autofmt_x # 解决中文显示问题 self.font = {'family': 'SimHei', # 字体:黑体 'size': '16'} # 字号:16 plt.rc('font', **self.font) # 设置字体的更多属性 plt.rc('axes', unicode_minus=False) # 解决坐标轴负数的负号显示问题 self.fig, self.ax = plt.subplots() self.ax.set_title(self.title) self.ax.set_xlabel(self.xlabel) self.ax.set_ylabel(self.ylabel) if self.xticks is not None: self.ax.set_xticks(self.xticks) if self.yticks is not None: self.ax.set_yticks(self.yticks) if self.xticklabels is not None: self.ax.set_xticklabels(self.xticklabels) if self.yticklabels is not None: self.ax.set_yticklabels(self.yticklabels) self.ax.set_xscale(self.xscale) # 坐标轴:线性:'linear',指数:'symlog' self.ax.set_yscale(self.yscale) if self.autofmt_x == True: self.fig.autofmt_xdate() def show_figs(self): plt.show() def draw_plot(self, xdata, ydata, color='dodgerblue', label=''): self.ax.plot(xdata, ydata, color=color, label=label) if __name__ == "__main__": x = [1, 2, 3] y = [1, 5, 7] chart = DrawCharts('图形', 'x标签', 'y标签',xticks=[1, 2, 3], xticklabels=['a', 'b', 'c']) chart.draw_plot(x, y) chart.show_figs() ``` 这样执行出来就完全没有自定义标签。 ![xticklabels无效](https://img-ask.csdn.net/upload/201905/12/1557664449_438887.png) 但是这样的话,就能显示了。 ```python if __name__ == "__main__": x = [1, 2, 3] y = [1, 5, 7] chart = DrawCharts('图形', 'x标签', 'y标签') chart.ax.set_xticks([1, 2, 3]) chart.ax.set_xticklabels(['a', 'b', 'c']) chart.draw_plot(x, y) chart.show_figs() ``` ![xticklabels显示](https://img-ask.csdn.net/upload/201905/12/1557664122_13764.png) 想问下大佬们为什么。
STC15串口通信识别接收的消息需要发十次才有反应,求大佬帮忙看看.....?
只有开机之后第一个识别消息(OK)发送一次就反应,之后就需要10次。我把"OK"改成过"CONNECT OK",就只需发两次就有反应。下面是程序代码,求助。 ``` #define Uart2_Buf_Max 20 //串口数据缓存长度 u8 xdata Uart2_Rec_Buf[Uart2_Buf_Max]; //串口数据缓存 u8 point2 = 0; //绶存指针 bit B_TX2_Busy = 0; //发送忙标志 void main(void) { GPIO_config(); UartInit(); CLR_Buf(); while(1) { Uart2SendString("AT"); huanhang(); while(Hand("ok")==0) delay_ms(10); CLR_Buf(); Uart2SendString("AT+CIPSTART=\"TCP\",\"e248w87733.wicp.vip\",57902"); huanhang(); CLR_Buf(); while(Hand("ok")==0) delay_ms(10); CLR_Buf(); Uart2SendString("AT"); while(Hand("ok" )==0) delay_ms(10); CLR_Buf(); huanhang(); Uart2SendString("well") ; huanhang(); while(Hand("ok")==0) delay_ms(10); CLR_Buf(); } ``` ``` /*---------------------------- 通过串口2发送串口数据 ----------------------------*/ void Uart2SendData(unsigned char ch) { while(B_TX2_Busy); //不忙后发送数据 S2BUF = ch; //写数据到UART数据寄存器 B_TX2_Busy = 1; } /*---------------------------- 通过串口2发送字符串 ----------------------------*/ void Uart2SendString(char *s) { while (*s) //检测字符串结束标志 { Uart2SendData(*s++); //发送当前字符 } } bit Uart2Hand(unsigned char *a) // 串口命令识别函数 { if(strstr(Uart2_Rec_Buf,a)!=NULL) return 1; else return 0; } void Uart2CLR_Buf(void) // 串口缓存清理 { memset(Uart2_Rec_Buf, 0, Uart2_Buf_Max); //清空 point2 = 0; } ```
使用keil是所遇到的警告问题
Build target 'Target 1' compiling main.c... linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _?PIXEL MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _LINE MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?_LINE?BYTE MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?_LINE?BIT MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _?SET_LCD_POS MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: CLS MODULE: main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: LCD_INITIALISE MODULE: main.obj (MAIN) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _?PIXEL MODULE: main.obj (MAIN) ADDRESS: 0D2AH *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _?PIXEL MODULE: main.obj (MAIN) ADDRESS: 0DDAH *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _?PIXEL MODULE: main.obj (MAIN) ADDRESS: 0E23H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?_LINE?BYTE MODULE: main.obj (MAIN) ADDRESS: 1064H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?_LINE?BIT MODULE: main.obj (MAIN) ADDRESS: 1066H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _LINE MODULE: main.obj (MAIN) ADDRESS: 106CH *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?_LINE?BYTE MODULE: main.obj (MAIN) ADDRESS: 10FFH *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?_LINE?BIT MODULE: main.obj (MAIN) ADDRESS: 1101H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _LINE MODULE: main.obj (MAIN) ADDRESS: 1107H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: LCD_INITIALISE MODULE: main.obj (MAIN) ADDRESS: 12D9H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _?SET_LCD_POS MODULE: main.obj (MAIN) ADDRESS: 12E0H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: CLS MODULE: main.obj (MAIN) ADDRESS: 12E3H Program Size: data=41.1 xdata=0 code=2937 creating hex file from "指针式电子钟main"... "指针式电子钟main" - 0 Error(s), 19 Warning(s). 源程序如下 #include<LCD_12864.h> #include<stdio.h> #include<math.h> #define PI 3.1415926 sbit SDA=P1^0; //DS1302数据线 sbit CLK=P1^1; //DS1302时钟线 sbit RST=P1^2; //DS1302复位线 sbit K1=P3^0; //选择 sbit K2=P3^1; //调整 sbit K3=P3^3; //确定 uchar tCount=0, d_Flag=0; uchar Current_Time[7]; //所读取的日期时间 char Adjust_Index=-1; //当前调节的时间对象:秒,分,时(0,1,2) extern void cls(); //清屏 extern char LCD_Initialise(); //LCD初始化 extern uchar LCD_Write_Command(uchar cmd); //写无参数的命令 extern uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2); //写双参数命令 extern uchar LCD_Write_Data(uchar dat); //写数据 extern void Set_LCD_POS(uchar row,uchar col)reentrant; //设置当前地址 extern void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit Mode); //画直线函数 extern void Pixel(uchar x,uchar y,uchar Mode)reentrant; //画点函数 uchar Time_Back[]={-1,-1,-1}; uchar HMS_Hand_Length[]={24,20,15}; //秒,分,时针的长度 //------------------------------------------------------------------------------------------ //绘制电子钟圆形面板 //------------------------------------------------------------------------------------------ void Clock_Plate() { float sta,x,y; //绘制外围图形园圈 for (sta=0;sta<=2*PI;sta+=0.1) { x=sin(sta); y=cos(sta); Pixel(30+30*x,30+30*y,1); } // 绘制刻度1~12 for (sta=0;sta<=2*PI;sta+=2*PI/12) { x=sin(sta); y=cos(sta); Pixel(30+27*x,30+27*y,1); Pixel(30+26*x,30+26*y,1); } } //------------------------------------------------------------------------------------------ //重绘HMS中的某一指针(参数0,1,2分别为秒,分,时) //------------------------------------------------------------------------------------------ void Repaint_A_Hand(uchar i) { float r,m; uint x,y; m=(i==0 || i==1)?60.0:12.0; //擦除 r=Time_Back[i]/m*2*PI+1.5*PI; x=HMS_Hand_Length[i]*cos(r); y=HMS_Hand_Length[i]*sin(r); Line(30,30,x+30,y+30,0); //重绘 r=Current_Time[i]/m*2*PI+1.5*PI; x=HMS_Hand_Length[i]*cos(r); y=HMS_Hand_Length[i]*sin(r); Line(30,30,x+30,y+30,1); //时间备份 Time_Back[i]=Current_Time[i]; } //------------------------------------------------------------------------------------------- //时间变化时重绘 //秒针与分针、时针接近重叠,或分针与时针接近重叠时也重绘 //------------------------------------------------------------------------------------------- void Display_HMS_Hand() { Repaint_A_Hand(0); Repaint_A_Hand(1); Repaint_A_Hand(2); } //------------------------------------------------------------------------------------------- //向DS1302写入一字节 //------------------------------------------------------------------------------------------- void Write_A_Byte_TO_DS1302(uchar x) { uchar i; for(i=0;i<8;i++) { SDA = x&1; CLK = 1; CLK = 0; x >>= 1; } } //------------------------------------------------------------------------------------------- //从DS1302读取一字节 //------------------------------------------------------------------------------------------- uchar Get_A_Byte_FROM_DS1302() { uchar i,b,t; for(i=1;i<8;i++) { b >>= 1; t = SDA; b |= t<<7; CLK = 1; CLK = 0; } return b/16*10+b%16; //BCD码转换 } //-------------------------------------------------------------------------------------------- //从DS1302指定位置读数据 //-------------------------------------------------------------------------------------------- uchar Read_Data(uchar addr) { uchar dat; RST = 0; CLK = 0; RST = 1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); CLK = 1; RST = 0; return dat; } //-------------------------------------------------------------------------------------------- //向DS1302某地址写入数据 //-------------------------------------------------------------------------------------------- void Write_DS1302(uchar addr,uchar dat) { CLK = 0; RST = 1; Write_A_Byte_TO_DS1302(addr); Write_A_Byte_TO_DS1302(dat); CLK = 0; RST = 0; } //-------------------------------------------------------------------------------------------- //设置时间 //-------------------------------------------------------------------------------------------- void SET_DS1302() { Write_DS1302(0x8E,0x00); //写控制字,取消写保护 Write_DS1302(0x82,(Current_Time[1]/10<<4)|(Current_Time[1]%10)); //写入分 Write_DS1302(0x84,(Current_Time[2]/10<<4)|(Current_Time[2]%10)); //写入时 Write_DS1302(0x8E,0x80); //加保护 } //-------------------------------------------------------------------------------------------- //读取当前时间(秒,分,时) //-------------------------------------------------------------------------------------------- void GetTime() { Current_Time[0] = Read_Data(0x81); Current_Time[1] = Read_Data(0x83); Current_Time[2] = Read_Data(0x85); } //-------------------------------------------------------------------------------------------- //时,分调整 //-------------------------------------------------------------------------------------------- void Current_Time_Adjust() { switch(Adjust_Index) { case 2: Current_Time[2] = (Current_Time[2]+1)%24;//时 break; case 1: Current_Time[1] = (Current_Time[1]+1)%60;//分 break; } } //--------------------------------------------------------------------------------------------- //定时器0每秒刷新LCD显示 //--------------------------------------------------------------------------------------------- void T0_INT() interrupt 1 { TH0 = -50000/256; TL0 = -50000%256; if( ++ tCount != 2)return; tCount = 0; if(d_Flag == 0) { Clock_Plate(); d_Flag = 1; } Display_HMS_Hand(); } //--------------------------------------------------------------------------------------------- //键盘中断(INT0) //--------------------------------------------------------------------------------------------- void EX_INT0() interrupt 0 { if(K1 == 0) //选择调整对象 { if(Adjust_Index == -1 || Adjust_Index == 1) Adjust_Index = 3; Adjust_Index -- ; } else if(K2 == 0) //调整 Current_Time_Adjust(); else if(K3 == 0) //确定 { SET_DS1302(); //将调整后的时间写入DS1302 Adjust_Index = -1; //操作索引重设为-1,时间继续正常显示 } } //---------------------------------------------------------------------------------------------- //主程序 //---------------------------------------------------------------------------------------------- void main() { LCD_Initialise(); //液晶初始化 Set_LCD_POS(0,0); //从LCD左上角开始清屏 cls(); IE = 0x83; //允许INT0,T0中断 IP = 0x01; IT0 = 0x01; TMOD = 0x01; TH0 = -50000/256; TL0 = -50000%256; TR0 = 1; while(1) { //如果未执行调整操作则正常读取当前时间 if(Adjust_Index == -1) GetTime(); } }
求助!外接矩阵键盘,按下键盘无法实现界面切换?
用89C52做了一个温度数据采集器,LCD12864显示,自己添加了外接矩阵键盘,但按下键盘无法实现界面切换。求大神帮忙解决一下 之前的子函数经过测试,没有问题,皆可独立显示,但在按键反馈切换上出了问题 部分代码如下: unsigned char xdata K; //键盘返回值 /*************************************************************************/ unsigned char KeyScan() //按键扫描 { unsigned char cord_l,cord_h; //声明列线和行线的值的储存变量 P1 = 0xf0; //P1^7-P1^0=11110000 if( (P1 & 0xf0) != 0xf0) //判断是否有按键按下 { delay(5); //软件消抖 if( (P1 & 0xf0) != 0xf0) //判断是否有按键按下 { cord_l = P1 & 0xf0; // 储存列线值 P1 = cord_l | 0x0f; cord_h = P1 & 0x0f; // 储存行线值 //while( (P1 & 0x0f) != 0x0f ); //松手检测 return (cord_l + cord_h); //返回键值码 } } } /*********************************************************************/ 主界面(可单独显示): void tempmenu1(); //分别是三个界面的子函数,都可以独立显示 void tempmenu2(); void presmenu(); void mainmenu() { unsigned char code TITLE[]={"****功能菜单****"}; unsigned char code DAT1[]={"1:温度监测----"}; unsigned char code DAT2[]={"2:相关指标----"}; unsigned char code DAT3[]={"3:其它参数----"}; lcd_int(); delay(25); write_cmd(0x01); showstring1(0x80,TITLE,0x10); delay(20); showstring1(0x90,DAT1,0x07); delay(20); showstring1(0x88,DAT2,0x06); delay(20); showstring1(0x98,DAT3,0x07); delay(20); do { K=KeyScan(); delay(1); } while( (K!=0xee)&&(K!=0xde)&&(K!=0xbe) ); if (K==0xee) {lcd_int(); tempmenu1();} else if (K==0xde) {lcd_int(); tempmenu2();} else if (K==0xbe) {lcd_int(); presmenu();} else delay(1); } /*********************************************************************/ 温度界面1(可单独显示): void mainmenu(); void tempmenu1() //温度显示界面 { unsigned char code TITLE[]={"****温度监测****"}; unsigned char code DAT1[]={"温度1 :"}; unsigned char code DAT2[]={"温度2 :"}; unsigned char code DAT3[]={"温度3 :"}; unsigned char code DW[]={"℃----"}; unsigned int T1,T2,T3; unsigned char t1[6]; unsigned char t2[6]; unsigned char t3[6]; lcd_int(); delay(25); write_cmd(0x01); //显示温度一二三标识 showstring1(0x80,TITLE,0x10); delay(50); showstring1(0x90,DAT1,0x07); delay(50); showstring1(0x88,DAT2,0x07); delay(50); showstring1(0x98,DAT3,0x07); delay(50); do { delay(20); T1 = MAX6675_ReadReg1(); delay(40); //获取温度值 T2 = MAX6675_ReadReg2(); delay(40); T3 = MAX6675_ReadReg3(); delay(40); sprintf(t1,"%d",T1); sprintf(t2,"%d",T2); sprintf(t3,"%d",T3); showstring1(0x94,t1,0x04); delay(50); showstring1(0x95,DW,0X03); delay(50); showstring1(0x8c,t2,0x04); delay(50); showstring1(0x8d,DW,0X03); delay(50); showstring1(0x9c,t3,0x04); delay(50); showstring1(0x9d,DW,0X03); delay(50); K=KeyScan(); } while(K!=0x7d); if(K==0x7d) mainmenu(); else delay(1); } /******************************************************/ 剩下的两个界面代码与温度界面1相似,但按下矩阵键盘后没有反应 /****************************************************/ 主函数就是初始的主菜单,但烧录后按下键盘没有反应 void main() { tempmenu1(); } /**************************************************************/ 只是想利用矩阵键盘来实现界面的切换,但是无法成功,特在此求助。。。 不知道是不是代码有问题?
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问