- 博客(29)
- 收藏
- 关注
原创 外部中断0电平触发
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 main() { P1=0x55; //P1口初始值 EA=1; //全局中断开 EX0=1; //外部中断0开 IT0=0; //电平触发 while(1)
2017-03-31 19:23:10 3153
原创 寻找最远点对
问题给定平面上N个点的坐标,找出距离最远的两个点。分析类似于“最近点对问题”,这个问题也可以用枚举的方法求解,时间复杂度O(n^2)。“寻找最近点对”是用到分治策略降低复杂度,而“寻找最远点对”可利用几何性质。注意到:对于平面上有n个点,这一对最远点必然存在于这n个点所构成的一个凸包上(证明略),那么可以排除大量点,如下图所示:在得到凸包以后,可以只在顶点上面找最远
2017-03-30 10:44:06 1170
原创 矩阵键盘行列扫描
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;//
2017-03-28 09:10:41 8309
原创 ARM概念
ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和众多合作伙伴。根据IEEE(国际电机工程师协会)的定义, 嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应
2017-03-27 10:43:58 631
原创 抢答器
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit key1=P3^0;//定义按键位置 独立按键模式 sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; main() { bit Flag; while(!Fla
2017-03-26 14:57:50 1271
原创 线程的五种状态
线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。 1.新建状态(New): 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码 2.就绪状态(Runnable)
2017-03-25 11:42:10 245
原创 C语言的可变参数表函数的设计
首先在介绍可变参数表函数的设计之前,我们先来介绍一下最经典的可变参数表printf函数的实现原理。一、printf函数的实现原理在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机的内存中,数据有2块,一块是堆,一块是栈(函数参数及局部变量在这里),而栈是从内存的高地址向低地
2017-03-24 18:45:57 451
原创 浅谈web网站架构演变过程
前言我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理阶段一、单机构建网站网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使
2017-03-23 11:25:07 214
原创 产生1ms方波
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit OUT=P1^2; //定义OUT输出端口 void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
2017-03-22 12:28:35 2127
原创 系统时间
无论时钟节拍何时发生,µC/OS-Ⅱ都会将一个32位的计数器加1。这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。在时钟节拍的频率等于100Hz的时候,这个32位的计数器每隔497天就重新开始计数。用户可以通过调用OSTimeGet()来获得该计数器的当前值。也可以通过调用OSTimeSet()来改变该计数器的值。OSTimeGet
2017-03-21 22:12:25 174
原创 UART
S3C2440A的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA模式的操作。换句话说,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输。UART通过使用系统时钟可以支持最高115.2Kbps的比特率。如果是外部器件提供UEXTCLK的UART,则UART可以运行在更高的速度。每个UART通道包含两个的64字节
2017-03-19 21:15:43 303
原创 数码管闪烁
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsign
2017-03-18 22:20:48 1474
原创 延时函数
OSTimeDly()虽然是一个非常有用的函数,但用户的应用程序需要知道延时时间对应的时钟节拍的数目。用户可以使用定义全局常数OS_TICKS_PER_SEC(参看OS_CFG.H)的方法将时间转换成时钟段,但这种方法有时显得比较愚笨。笔者增加了OSTimeDlyHMSM()函数后,用户就可以按小时(H)、分(M)、秒(S)和毫秒(m)来定义时间了,这样会显得更自然些。与OSTimeDly()一样
2017-03-17 20:44:08 579
原创 数码管循环左移
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsign
2017-03-16 22:25:01 3939 1
原创 s3c2451gpio函数
#define _S3C2451_GPIO_ #define GPACON *((volatile int *)0x56000000) #define GPADATA *((volatile int *)0x56000004) #define GPBCON *((volatile int *)0x56000010) #define GPBD
2017-03-15 18:28:05 237
原创 数码管递加递减带消隐
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsign
2017-03-14 12:35:24 733
原创 ARM
ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和众多合作伙伴。根据IEEE(国际电机工程师协会)的定义, 嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应
2017-03-13 19:58:47 237
原创 挂起任务OSTaskSuspend()
有时候将任务挂起是很有用的。挂起任务可通过调用OSTaskSuspend()函数来完成。被挂起的任务只能通过调用OSTaskResume()函数来恢复。任务挂起是一个附加功能。也就是说,如果任务在被挂起的同时也在等待延时的期满,那么,挂起操作需要被取消,而任务继续等待延时期满,并转入就绪状态。任务可以挂起自己或者其它任务。 OSTaskSuspend()函数的代码如程序清单 L4.1
2017-03-12 21:35:10 4914
原创 请求删除程序OSTaskDelReq()
有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失。在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己。用户可以通过OSTaskDelReq()函数来完成该功能。 发出删除任务请求的任务(任务B)和要删除的任务(任务A)都需要调用OSTaskDelReq()函数。任务B的代码如程序清单 L4.
2017-03-11 11:29:29 1144
原创 9累减
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsign
2017-03-10 22:50:28 378
原创 STM32
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+
2017-03-09 18:42:18 539
原创 99累加
#includereg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsign
2017-03-08 19:14:31 200
原创 全双工
全双工(Full Duplex)是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。 半双工(Half Duplex),所谓半双工就是指一个时间段内只有一个动作发生,举个简单例子,一条窄窄的马路,同时只能有一辆车通过,当目前有两量车对开,这种情况下就只能一辆先过,等到头儿后另一辆再开,这个例子就形象的说明了半双工
2017-03-07 20:05:48 222
原创 I2C
T24C系列EEPROM芯片的固定部分为1010,A2,A1,A0引脚接高低电平后得到确定的3位编码,形成7位编码即为该器件的地址码。 单片机进行写操作时,首先发送该器件的7位地址码和写方向位”0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为响应,单片机收到应答后就可以传送数据了。传
2017-03-06 19:38:30 200
原创 时间节拍
μC/OS需要用户提供周期性信号源,用于实现时间延时和确认超时。节拍率应在每秒10次到100次之间,或者说10到100Hz。时钟节拍率越高,系统的额外负荷就越重。时钟节拍的实际频率取决于用户应用程序的精度。时钟节拍源可以是专门的硬件定时器,也可以是来自50/60Hz交流电源的信号。 用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。换句话说,在调用OSStar
2017-03-04 12:01:12 659
原创 喇叭音量调节
/*----------------------------------------------- 名称:IIC协议 PCF8591ADDA转换 论坛:www.doflye.net 编写:shifang 日期:2009.5 修改:无 内容:通过DA输出电压变化控制喇叭声音音量,P1.0用杜邦线连接J42 B1端子 J33插针OUT信号端用一根杜
2017-03-03 20:44:26 774
原创 光敏电阻测试数码管显示
#include reg52.h> #include "i2c.h" #include "delay.h" #include "display.h" #define AddWr 0x90 //写数据地址 #define AddRd 0x91 //读数据地址 extern bit ack; unsig
2017-03-02 11:17:07 1755
原创 CRC
CRC(Cyclic Redundancy Check):循环冗余检验。在链路层被广泛使用的检错技术。 CRC原理: 1、发送端 1.1、在发送端先将数据分组,每组k个数据。假定要传送的数据是M。 1.2、在数据M后面添加供差错检测的n位冗余码,然后构成一帧发送出去,一共发送(k+n)位。 虽然添加n位冗余码增大了数据传送的开销,但是可以进行差错检测,当传输可能出现差错时,付出
2017-03-01 18:15:00 215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人