-
老大,你好,我是卖ST的单片机,这里不适合谈业务,请发邮件到ruxin2456@163.com
为什么要悄悄谈?
-
先下载下来学习一下
-
我没有用中断,不过是用库的,读写24c02的
可以联系我
xyz160405@163.com
-
我们公司有同样的需求,不知道用IAP方式怎么实现?
-
之前调I2C也是收不到应答位
-
连续读2,3次对应按键值,如果读出的值一致,就认为键按下,否则无效。
-
可以进入,。。。。
-
图片掉了![img][img=http://hi.eeworld.net/space-5108-do-album-picid-500749-goto-down.html][/img][/img]
-
是用vs直接部署的吗?如果不是,直接部署一下试试
-
设备连接好 - 驱动弄好 - 获取指纹(初始化) - 返回一组数据 - 保存到你的数据库中
接收用户指纹 - 返回一组数据 - 检索 - 确认
-
void Com_Int(void) interrupt 4
{
if(RI)
{
RI = 0;
stringaz=SBUF;
i++;
if(i==12)
{
stringaz='\0';
i=0;
record=1;
}
}
}
重新改下
-
void save_data(void)
{
//TIM4_ITConfig(TIM4_IT_UPDATE, DISABLE);
UART1_ITConfig(UART1_IT_TXE, DISABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, DISABLE);
//UART1_ClearITPendingBit(UART1_IT_TXE);
//UART1_ClearITPendingBit(UART1_IT_RXNE_OR);
UART1_Cmd(DISABLE);
delay_ms(10);
GPIO_Init(GPIOA, GPIO_PIN_5|GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_WriteHigh(GPIOA, GPIO_PIN_4);
GPIO_WriteLow(GPIOA, GPIO_PIN_5);
delay_ms(10);
//TIM4_Cmd(DISABLE);
//IWDG_ReloadCounter(); //喂狗
//系统时间设置
if(value_index >= 1000 && value_index < 2000)
{
switch(value_index-1000)
{
case 25:
if(value_temp > 59) value_temp = 59; else if(value_temp < 0) value_temp = 0;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 0);
break;//秒
case 26:
if(value_temp > 59) value_temp = 59; else if(value_temp < 0) value_temp = 0;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 1);
break;//分
case 27:
if(value_temp > 23) value_temp = 23; else if(value_temp < 0) value_temp = 0;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 2);
break;//时
case 29: //日
if(value_temp > 31) value_temp = 31; else if(value_temp < 1) value_temp = 1;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 4);
break;
case 30: //月
if(value_temp > 12) value_temp = 12; else if(value_temp < 1) value_temp = 1;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 5);
break;
case 31: //年
if(value_temp > 99) value_temp = 99; else if(value_temp < 10) value_temp = 10;
M41T0_ByteWrite(HEX_BCD((u8)value_temp), 6);
break;
default: return;
}
}
else if(value_index >= 20 && value_index <= 48) //可设参数,
{
if(value_temp > user_para_max[value_index-20]) value_temp = user_para_max[value_index-20];
else if(value_temp < user_para_min[value_index-20]) value_temp = user_para_min[value_index-20];
data.vw[value_index] = value_temp;
write_u16(user_para_addr+(value_index-user_para_start_index)*2, value_temp);
}
else if(value_index >= 2000 && value_index < 3000) //检修参数
{
switch(value_index-2000)
{
case device_check_start_index+0: //选择机头
if(value_temp > comp_num) value_temp = comp_num; else if(value_temp < 0)value_temp = 0;
data.vw[device_check_start_index] = value_temp;
break;
case device_check_start_index+1: //冷冻设备
case device_check_start_index+2: //冷却设备
if(value_temp > 1) value_temp = 1; else if(value_temp < 0) value_temp = 0;
data.vw[value_index-2000] = value_temp;
break;
default: break;
}
}
else if(value_index >= 3000 && value_index < 4000) //保存密码
{
}
value_index = 0;
//TIM4_Cmd(ENABLE);
GPIO_Init(GPIOA, GPIO_PIN_5|GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT);
//UART1_Cmd(ENABLE);
delay_ms(10);
UART1_Cmd(ENABLE);
//TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
UART1_ITConfig(UART1_IT_TXE, ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
IWDG_ReloadCounter(); //喂狗
}
-
呵呵,楼主提的问题够强大。
换句话说, 电子。。。看到的都是假象:
按键或触摸屏输入,对应的是高低电平及时序而已。
至于显示,也是内核决定的,比如你按下OK,实际执行关闭也可以啊。。。
而内核,可以理解为有组织的逻辑结构。。。
所以:“双击程序运行” 也可以单击程序运行,或不击程序自动运行也可以。这只是约定的大家习惯的东西而已。
1 鼠标
包括你看到的鼠标,其实不是你实际移动的东西,而是程序根据你鼠标的移动计算而在屏幕相应位置上画一个鼠标图形,鼠标的位置是存在内存中的。
2 用鼠标双击
驱动里面对硬件读取,判断鼠标左键按下。这个判断也是约定的。自己搞鼠标的话,也可以放开的时候算点击,按下的时候算松开状态。。。
3 运行程序
程序是与硬件逻辑结构相关的,系统调用程序需要给程序分配任务号,任务堆栈空间,CPU时间,而执行到实际功能时是对硬件的一系列接口。。。硬件是软件的载体,但软件与硬件只是实现方式而已,原理是相通的。
举个例子:一个程序执行关机(非PC呵呵),顺序可以为:程序得到关机指令,CPU翻译为IO操作,此IO操作为将电源MOS管控制脚的电平拉低,MOS管断开,电源断开
----------------------------------------------------------------------------
总结一句话:电子就是忽悠,先忽悠自己,再忽悠别人,再学别人忽悠。。。世上本没有标准,忽悠的人多了,就有了标准。
-
通道能通吗?先用超级终端检测一下通道~~~
-
原来如此!
-
实话说,代码我没看。 在keil里不是有调试吗? 单步运行看看每个寄存器是否都是你想要的值。
-
串口通讯是电脑控制的,我在PC上开个串口调试精灵,即使什么都不发,430也会溢出!!!
-
恩 没有mpeg4.plg
-
还是不行,不过还是谢谢!
-
一起学习啊,兄弟们!
呵呵
http://www.cedn.cn/bbs/?fromuid=23092