给PSOC初学者10个实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TimerCount+=1; if(TimerCount==64) {
LED_Invert(void); TimerCount=0; } }
//启动全局中断 //启动定时器中断 //定时器启动 // LED 模块启动
// 刷新 P2.1 端口状态 // Clear the TimerCount
2、模拟开关
4、数字时钟(1)
1、实验任务
利用四位共阴数码管、PSOC 内部 LED 数码管模块和内部定时器模块实现简易数 字时钟。
2、电路原理图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 4.1.1 电路原理图(CY3209 开发板原理图截图)
3、硬件连线
按照图 4.1.1 进行实物器件连接。
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置信息
图 5.6.1LCD 模块配置信息
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 5.6百度文库2 I2C 通信模块配置信息
7、C 语言程序
详细程序在工程文件中说明。
2、电路原理图
图 5.1.1
3、硬件连线
按照图 5.1.1 进行实物器件连接。
4、程序设计方法
5.1 1HZ 时钟源 在试验 4 中我们利用内部时钟源产生 1HZ 信号,PSOC 内部 24M 或 48M 的准 确度是±2.5%,可以应用在时钟要求不严格的场所。要获得准确的实时时钟信号需 要利用外部 RTC 芯片实现时间计量,通过 I2C 总线读取时间值或 PSOC 外接 32.768KHZ 晶体。 5.2 显示模块 PSOC 的 GPIO 的 0.5S 中 断( RTC 芯片输出)刷新显示时间数据,利用 1602LCD 显示从外部 IC 读取回的时间值。
1、实验任务
如图 2.1.1 所示,监视开关 KEY1(接在 P1.2 端口上),用发光二极管 D 8(接在 P2.1 上)显示开关状态,如果开关合上,D8 亮,开关打开,D8 熄灭。
2、电路原理图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 2.1.1 3、硬件连线
void Delay_100US(BYTE i)
{
BYTE j,k;
for(j=i;j>0;j--)
for(k=50;k>0;k--);
}
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
3、一键多功能按键识别技术
RainPower
1、实验任务
如图 3.1.1 所示,KEY1 接在 P1.2 引脚上,在 P21,P22,P23,P24 引脚分别接一只 发光 LED,上电的时候,D8 接在 P21 管脚上的 LED 在闪烁,当按下开关 KEY1 的时候 , D9 接在 P22 管脚上的 LED 在闪烁,再次按下 KEY1 时候,D10 接在 P23 管脚上的 LED 在闪烁,再次按下 KEY1 时候,D11 接在 P24 管脚上的 LED 在闪烁,如此轮流下去。
RainPower
LED 模块的 AP1 函数 LED_On()使 P2.1 端口输出高电平,LED_Off()使 P1.0 端口输出低电 平。
5、程序框图
程序流程图,借用周立功博客中说到,再简单的也要注重思路。所以即使简单的 LED 的灯闪烁也需要绘制流程图,养成好的编程习惯。
6、模块配置信息
定时器输出周= 即输出频率 F=FsourceClockPeriod/(PeriodRegisterValue+1) 8 位定时器配置如下:
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
void Delay_100US(BYTE );
//
void main()
{
//Insert your main routine code here.
M8C_EnableGInt;
P21_Start();
while(1)
{
if((PRT1DR&0x04))
// Loop forever // KEY1 was pushed? // delay 20ms // KEY1 was pushed // D8 power on
// D8 power off
// D8 power off
/*==============================================================
6、模块配置信息
RainPower
图 4.6.1 数码管显示模块配置信息
图 4.6.2 定时器配置信息
7、C 语言程序
详细程序在工程文件中说明。
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
5、数字时钟(2)
RainPower
1、实验任务
利用 1602LCD、PSOC 内部 I2C 通信模块和外部 RTC 芯片实现简易数字时钟。
给 PSOC1 初学者 10 个实验
RainPower
1.闪烁灯
1、实验任务
如图 1.1.1 所示:在 P2.1 端口上接一个发光二极管 D8,使 D8 在不停地一亮一 灭,一亮一灭的时间间隔为 0.5 秒。
2、电路原理图
图 1.1.1
3、硬件连线
EasyPSOC-8C27443 板子中已经将 D8 连接到 UI 的 P21 口。
按照图 2.1.1 连接元器件,需要说明 P1.2 可直接与 VCC 连接,但 P1.2 口的必须 配置成下拉电阻模式。
4、程序设计内容
4.1 开关状态检测过程
PSOC 对开关状态的检测是通过检测 PSOC 的 P1.2 的输入信号,输入信号只有高电平和低电 平两种,当 KEY1 按下,即输入低电平,相当于开关闭合,当开关再次按下,开关弹出,即输入 高电平,相当于开关断开。PSOC 可以通过读取 P1 端口的数据寄存器判断输入信号的高低。
4、程序设计内容
(1)延时程序的设计方法
PSOC 内部指令执行的时间是很短,数量大多是微秒级;要实现 0.5S 的延时,我们可以利 用内部 8 位定时器模块实现 0.5S 的硬件延时,也可以用常见软件延时实现,不过要是是实现准 确的延时就需要利用汇编程序编程;为了便于理解学习,我们才有 C 语言编程。软件延时和硬 件实现延时的差别在于软件延时占用的软件开销即占用 CPU 的时间较多,而硬件延时(定时器 模块延时)软件开销小 CPU 占用时间短。定时器延时实现方法:8 位定时器模块的配置为每个0.5S 产生一次中断,在中断服务程序中将 LED 的状态改变,即由亮变暗或由暗变亮。
#include <m8c.h>
// part specific constants and macros
#include "PSoCAPI.h"
// PSoC API definitions for all User Modules
#pragma interrupt_handler Timer8_1_ISR
2、电路原理图
图 3.1.1
3、硬件连线
按照图 3.1.1 连接实物元器件。
4、程序设计方法
1、设计思想的由来
现实生活中,我们可以很快依据每个人的名字认出我们后边的人,同样对于通过一个按键 识别每种不同功能,我们给每个不同的功能模块用不同的 ID 号标识,这样没按下按键一次按键 , ID 值是不同的,所以 PSOC 很快识别出不同的功能模块了。
6、解码红外遥控器
1、实验任务
利用 TIMER16 和 LCD 模块解码接收电视、DVD 等红外遥控器信号。
2、电路原理图
红外遥控接收可采用较早的红外接收二极管加专用的红外处理电路的方法。如 CXA20106, 此种方法电路复杂,现在一般不采用。较好的接收方法是用一体化红外接收头,它将红外接收 二极管、放大、解调、整形等电路做在一起,只有三个引脚.分别是+5V 电源、地、信号输出。 常用的一体化接收头的外形及引脚见图 6.1.2 和图 6.1.3。红外接收头的信号输出接 PSOC 的 GPIO.典型电路如图 6.1.4 所示.图中增加了一只 PNP 型三极管对输出信号进行放大。经过测 试实验,可以不使用 PNP 型三极管。
4、程序设计方法
4.1 1HZ 时钟源 利用内部定时器或睡眠中断产生 1HZ 中断,在中断服务程序中实现时间的计量 。 睡眠定时中断可以参考应用笔记 AN2043。 4.2 显示模块 利用 PSOC 内部数码管显示驱动模块显示时间。
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
4.2 输出控制
如图 2.1.1 所示,当 P2.1 端口输出高电平,即 P2.1=1 时,根据 LED 的单向导电性可知 , 这时 LED D8 熄灭;当 P2.1 端口输出低电平,即 P2.1=0 时,D8 亮;我们使用 PSOC 内部 LED 模块的 AP1 函数 LED_On()使 P2.1 端口输出高电平,LED_Off()使 P1.0 端口输出低电 平。
2、设计方法
从上面的设计要求我们可以看出,D8 到 D11 LED 在每个时刻的闪烁时间是受开关 KEY1 来控 制,我们给 D8 到 D11 闪烁时段定义不同的 ID 号,当 D8 闪烁时,ID=0,D9 闪烁时,ID=1, D10 闪烁时,ID=2, D11 闪烁时,ID=3;只要每次按下 KEY1 时,分别给出不同 ID 号我们就能够完成 上面的任务了。下面给出有关程序框图。
5、程序框图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置信息
图 2.5.1
图 2.6.1 LED 模块配置信息
7.C 语言源程序
#include <m8c.h> #include "PSoCAPI.h"
图 2.6.2 IO 口配置信息
// part specific constants and macros // PSoC API definitions for all User Modules
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 3.6.1 LED 模块配置信息
图 3.6.2 IO 配置信息
7、C 语言程序
详细程序在工程文件中说明。
{
Delay_100US(200);
if((PRT1DR&0x04))
{
P21_Off();
}
else
{
P21_On();
}
}
else
{
P21_On();
}
}
}
RainPower
// Eable the globle interrupt // P21 Start and initialization
图 1.6.1 8 位定时器配置表
部分资料非原创,感谢原作者。
图 1.7.1 P2.1 配置表
给 PSOC1 初学者 10 个实验
RainPower
利用 PSOC 内部的 LED 模块设置 P2.1,实现普通 IO 口的操作。LED 配置选择 activelow 即低电平驱动模式,P2.1 为低电平是 LED 亮而高电平是灭。
BYTE TimerCount=0;
void main()
{
// Insert your main routine code here.
M8C_EnableGInt; Timer8_1_EnableInt(); Timer8_1_Start(); LED_Start(); while(1); } void Timer8_1_ISR(void) {
founction
: soft delay
name
: Delay_100US
input_parameter : delay value
return_parameter : no
author
: rain_power
date
: 2008.3
==============================================================*/
(2).输出控制
如图 1.1.1 所示,当 P2.1 端口输出高电平,即 P2.1=1 时,根据 LED 的单向导电性可知, 这时 LED D8 熄灭;当 P2.1 端口输出低电平,即 P2.1=0 时,D8 亮;我们使用 PSOC 内部
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
8.C 语言源程序
现在把 C 语言程序写出。
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
LED_Invert(void); TimerCount=0; } }
//启动全局中断 //启动定时器中断 //定时器启动 // LED 模块启动
// 刷新 P2.1 端口状态 // Clear the TimerCount
2、模拟开关
4、数字时钟(1)
1、实验任务
利用四位共阴数码管、PSOC 内部 LED 数码管模块和内部定时器模块实现简易数 字时钟。
2、电路原理图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 4.1.1 电路原理图(CY3209 开发板原理图截图)
3、硬件连线
按照图 4.1.1 进行实物器件连接。
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置信息
图 5.6.1LCD 模块配置信息
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 5.6百度文库2 I2C 通信模块配置信息
7、C 语言程序
详细程序在工程文件中说明。
2、电路原理图
图 5.1.1
3、硬件连线
按照图 5.1.1 进行实物器件连接。
4、程序设计方法
5.1 1HZ 时钟源 在试验 4 中我们利用内部时钟源产生 1HZ 信号,PSOC 内部 24M 或 48M 的准 确度是±2.5%,可以应用在时钟要求不严格的场所。要获得准确的实时时钟信号需 要利用外部 RTC 芯片实现时间计量,通过 I2C 总线读取时间值或 PSOC 外接 32.768KHZ 晶体。 5.2 显示模块 PSOC 的 GPIO 的 0.5S 中 断( RTC 芯片输出)刷新显示时间数据,利用 1602LCD 显示从外部 IC 读取回的时间值。
1、实验任务
如图 2.1.1 所示,监视开关 KEY1(接在 P1.2 端口上),用发光二极管 D 8(接在 P2.1 上)显示开关状态,如果开关合上,D8 亮,开关打开,D8 熄灭。
2、电路原理图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 2.1.1 3、硬件连线
void Delay_100US(BYTE i)
{
BYTE j,k;
for(j=i;j>0;j--)
for(k=50;k>0;k--);
}
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
3、一键多功能按键识别技术
RainPower
1、实验任务
如图 3.1.1 所示,KEY1 接在 P1.2 引脚上,在 P21,P22,P23,P24 引脚分别接一只 发光 LED,上电的时候,D8 接在 P21 管脚上的 LED 在闪烁,当按下开关 KEY1 的时候 , D9 接在 P22 管脚上的 LED 在闪烁,再次按下 KEY1 时候,D10 接在 P23 管脚上的 LED 在闪烁,再次按下 KEY1 时候,D11 接在 P24 管脚上的 LED 在闪烁,如此轮流下去。
RainPower
LED 模块的 AP1 函数 LED_On()使 P2.1 端口输出高电平,LED_Off()使 P1.0 端口输出低电 平。
5、程序框图
程序流程图,借用周立功博客中说到,再简单的也要注重思路。所以即使简单的 LED 的灯闪烁也需要绘制流程图,养成好的编程习惯。
6、模块配置信息
定时器输出周= 即输出频率 F=FsourceClockPeriod/(PeriodRegisterValue+1) 8 位定时器配置如下:
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
void Delay_100US(BYTE );
//
void main()
{
//Insert your main routine code here.
M8C_EnableGInt;
P21_Start();
while(1)
{
if((PRT1DR&0x04))
// Loop forever // KEY1 was pushed? // delay 20ms // KEY1 was pushed // D8 power on
// D8 power off
// D8 power off
/*==============================================================
6、模块配置信息
RainPower
图 4.6.1 数码管显示模块配置信息
图 4.6.2 定时器配置信息
7、C 语言程序
详细程序在工程文件中说明。
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
5、数字时钟(2)
RainPower
1、实验任务
利用 1602LCD、PSOC 内部 I2C 通信模块和外部 RTC 芯片实现简易数字时钟。
给 PSOC1 初学者 10 个实验
RainPower
1.闪烁灯
1、实验任务
如图 1.1.1 所示:在 P2.1 端口上接一个发光二极管 D8,使 D8 在不停地一亮一 灭,一亮一灭的时间间隔为 0.5 秒。
2、电路原理图
图 1.1.1
3、硬件连线
EasyPSOC-8C27443 板子中已经将 D8 连接到 UI 的 P21 口。
按照图 2.1.1 连接元器件,需要说明 P1.2 可直接与 VCC 连接,但 P1.2 口的必须 配置成下拉电阻模式。
4、程序设计内容
4.1 开关状态检测过程
PSOC 对开关状态的检测是通过检测 PSOC 的 P1.2 的输入信号,输入信号只有高电平和低电 平两种,当 KEY1 按下,即输入低电平,相当于开关闭合,当开关再次按下,开关弹出,即输入 高电平,相当于开关断开。PSOC 可以通过读取 P1 端口的数据寄存器判断输入信号的高低。
4、程序设计内容
(1)延时程序的设计方法
PSOC 内部指令执行的时间是很短,数量大多是微秒级;要实现 0.5S 的延时,我们可以利 用内部 8 位定时器模块实现 0.5S 的硬件延时,也可以用常见软件延时实现,不过要是是实现准 确的延时就需要利用汇编程序编程;为了便于理解学习,我们才有 C 语言编程。软件延时和硬 件实现延时的差别在于软件延时占用的软件开销即占用 CPU 的时间较多,而硬件延时(定时器 模块延时)软件开销小 CPU 占用时间短。定时器延时实现方法:8 位定时器模块的配置为每个0.5S 产生一次中断,在中断服务程序中将 LED 的状态改变,即由亮变暗或由暗变亮。
#include <m8c.h>
// part specific constants and macros
#include "PSoCAPI.h"
// PSoC API definitions for all User Modules
#pragma interrupt_handler Timer8_1_ISR
2、电路原理图
图 3.1.1
3、硬件连线
按照图 3.1.1 连接实物元器件。
4、程序设计方法
1、设计思想的由来
现实生活中,我们可以很快依据每个人的名字认出我们后边的人,同样对于通过一个按键 识别每种不同功能,我们给每个不同的功能模块用不同的 ID 号标识,这样没按下按键一次按键 , ID 值是不同的,所以 PSOC 很快识别出不同的功能模块了。
6、解码红外遥控器
1、实验任务
利用 TIMER16 和 LCD 模块解码接收电视、DVD 等红外遥控器信号。
2、电路原理图
红外遥控接收可采用较早的红外接收二极管加专用的红外处理电路的方法。如 CXA20106, 此种方法电路复杂,现在一般不采用。较好的接收方法是用一体化红外接收头,它将红外接收 二极管、放大、解调、整形等电路做在一起,只有三个引脚.分别是+5V 电源、地、信号输出。 常用的一体化接收头的外形及引脚见图 6.1.2 和图 6.1.3。红外接收头的信号输出接 PSOC 的 GPIO.典型电路如图 6.1.4 所示.图中增加了一只 PNP 型三极管对输出信号进行放大。经过测 试实验,可以不使用 PNP 型三极管。
4、程序设计方法
4.1 1HZ 时钟源 利用内部定时器或睡眠中断产生 1HZ 中断,在中断服务程序中实现时间的计量 。 睡眠定时中断可以参考应用笔记 AN2043。 4.2 显示模块 利用 PSOC 内部数码管显示驱动模块显示时间。
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
4.2 输出控制
如图 2.1.1 所示,当 P2.1 端口输出高电平,即 P2.1=1 时,根据 LED 的单向导电性可知 , 这时 LED D8 熄灭;当 P2.1 端口输出低电平,即 P2.1=0 时,D8 亮;我们使用 PSOC 内部 LED 模块的 AP1 函数 LED_On()使 P2.1 端口输出高电平,LED_Off()使 P1.0 端口输出低电 平。
2、设计方法
从上面的设计要求我们可以看出,D8 到 D11 LED 在每个时刻的闪烁时间是受开关 KEY1 来控 制,我们给 D8 到 D11 闪烁时段定义不同的 ID 号,当 D8 闪烁时,ID=0,D9 闪烁时,ID=1, D10 闪烁时,ID=2, D11 闪烁时,ID=3;只要每次按下 KEY1 时,分别给出不同 ID 号我们就能够完成 上面的任务了。下面给出有关程序框图。
5、程序框图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置信息
图 2.5.1
图 2.6.1 LED 模块配置信息
7.C 语言源程序
#include <m8c.h> #include "PSoCAPI.h"
图 2.6.2 IO 口配置信息
// part specific constants and macros // PSoC API definitions for all User Modules
5、程序流程图
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
6、模块配置
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
RainPower
图 3.6.1 LED 模块配置信息
图 3.6.2 IO 配置信息
7、C 语言程序
详细程序在工程文件中说明。
{
Delay_100US(200);
if((PRT1DR&0x04))
{
P21_Off();
}
else
{
P21_On();
}
}
else
{
P21_On();
}
}
}
RainPower
// Eable the globle interrupt // P21 Start and initialization
图 1.6.1 8 位定时器配置表
部分资料非原创,感谢原作者。
图 1.7.1 P2.1 配置表
给 PSOC1 初学者 10 个实验
RainPower
利用 PSOC 内部的 LED 模块设置 P2.1,实现普通 IO 口的操作。LED 配置选择 activelow 即低电平驱动模式,P2.1 为低电平是 LED 亮而高电平是灭。
BYTE TimerCount=0;
void main()
{
// Insert your main routine code here.
M8C_EnableGInt; Timer8_1_EnableInt(); Timer8_1_Start(); LED_Start(); while(1); } void Timer8_1_ISR(void) {
founction
: soft delay
name
: Delay_100US
input_parameter : delay value
return_parameter : no
author
: rain_power
date
: 2008.3
==============================================================*/
(2).输出控制
如图 1.1.1 所示,当 P2.1 端口输出高电平,即 P2.1=1 时,根据 LED 的单向导电性可知, 这时 LED D8 熄灭;当 P2.1 端口输出低电平,即 P2.1=0 时,D8 亮;我们使用 PSOC 内部
部分资料非原创,感谢原作者。
给 PSOC1 初学者 10 个实验
8.C 语言源程序
现在把 C 语言程序写出。
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------