




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机及应用上机手册V0.91 PSoC试验板 PSoC试验板核心是一颗PSoC微控制器,型号为CY8C24794-24LFXI。CY8C24794-24LFXI,56脚QNF封装,拥有50个I/O管脚,其内部拥有4个数字模块,6个模拟模块以及一个全速的USB接口。试验板在CY8C24794外围扩展了八段数码管扫描电路、44键盘阵列电路、RS232接口、USB接口、蜂鸣器、AD采样等电路。并引出了24个单片机管脚信号,使用者可以利用它们来搭建其他应用。图1是试验板CY8C24794-24LFXI的56个管脚信号定义。试验板直接使用烧写接口的5V供电,也可以通过USB接口提供的5V电源供电。使用
2、USB接口直接供电时,还可以通过跳接开工选择将5V电源转换成3.3V做为试验板的供电电源。图1 CY8C24794信号、编程接口及USB接口电路图2 八段数码管动态显示例程试验板配备了4个共阳型数码管,每个数码管的阳极由一个PNP三极管控制供电,微控制器的P40、P41、P42、P43四个管脚控制4个三极管的状态。P3端口组的8个管脚组成一个数据总线共同来控制每个数码管的8个阴极。 另外MCU的P46、P47、P12、P13管脚可以单独控制一个LED灯,使用前请短接LED JMP跳帽。如图2所示。图2 试验板八段数码管及LED扩展电路2.1 八段数码管扫描控制原理八段数码管(以下简称数码管)由
3、8个发光二极管LED组成,其中包括7个细长型的LED和1个小数点型的LED,每个LED称为一字段,分别为a、b、c、d、e、f、g、dp共8段,其中dp为小数点,如图3所示。图3 八段数码管内部字段和引脚分布数码管模块通常有10根管脚,每一段有一根管脚,另外两根管脚是数码管的公共端。数码管有共阳极(其中LED的阳极都连接在一起)和共阴极(其中LED的阴极都连接在一起)两种结构形式。当数码管中的某个LED导通,相应的字段发亮。这样,若干个LED导通,就构成一个字符。在共阳极数码管中,要使某个LED亮,则该LED的控制管脚要接低电平,否则接高电平。共阴极数码管则刚好相反。因此我们可以排列出共阳型数
4、码管的字形码,如表1所示。表1 共阳型数码管字形码字形012345678字形码03H9fH25H0dH99H49H41H1fH01H字形9AbCdEF。全灭字形码09H11Hc1H63H85H61H71H01HffH多个数码管组成的显示电路中,我们一般采用动态扫描的方式进行显示,单片机定时地对数码管扫描,即逐个地循环地点亮各位数码管。在这种方式中,数码管分时工作,每次只能有一个数码管显示内容。不同位显示的时间间隔可以通过定时中断完成。这样虽然在任一时刻只有一位数码管被点亮,但是由于人眼具有视觉残留效应,只要保证每个数码管的刷新率在50Hz左右,则动态刷新数码管显示看起来与全部数码管持续点亮效果
5、是完全一样。为了实现数码管地动态扫描,除了要给数码管提供段(字形代码)的输入之外,还要对各个数码管之间添加位的控制,也就是通常所说的段控和位控。因此,这里数码管接口电路需要有2个输出口,其中一个用于输出8条段控线,另一个用于输出位控线,位控线的数目等于数码管的个数(本实验为4个)。本实验中,段控线连到P3.0P3.7口,分别对应数码管的dp、g、f、e、d、c、b、a段。位控线连到P4.0P4.3口,分别用来选择所要点亮的数码管。试验实现一个秒表的功能,显示内容每5毫秒刷新一次,显示内容到1/10秒。2.2 硬件模块设选择与配置1创建一个新工程,在该工程的器件编辑器(Device Editor
6、)中选择定时器模块,然后将其按要求放置,如图4所示。图4 定时器模块放置图2配置全局资源。单击参数内容方框里的下拉箭头,选择合适的参数值,便可以更改工程中默认的全局资源。此实验配置的全局资源如图8-5所示。图8-5 全局资源配置按图6配置Timer8定时器模块的参数。图6 定时器模块的参数配置4按图7配置管脚驱动模式。图7 管脚驱动模式的参数配置5在timer8_1int.asm文件的_Timer8_1_ISR函数内添加如下代码,实现中断程序跳转:ljmp _timer1_ISR2.3 软件设计#include / part specific constants and macros#incl
7、ude PSoCAPI.h / PSoC API definitions for all User Modules#pragma interrupt_handler timer1_ISR#define DATA PRT3DR /port for display data #define SEL PRT4DR /control port for PNP transisitor#define LED1 0b11111110 #define LED2 0b11111101#define LED3 0b11111011#define LED4 0b11110111#define dp 0b111111
8、10unsigned char reg=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63, 0x85,0x61,0x71,0xff;unsigned char led1_dig=0,led2_dig=0,led3_dig=0,led4_dig=0;unsigned char led_count=1;unsigned char led_dp=0;unsigned char count = 0;/*/void timer1_ISR() if(led_count=5) led_count=1; if(count+ = 1
9、) count = 0; if(led4_dig+ = 9) led4_dig = 0; if(led3_dig+ = 9) led3_dig = 0; if(led2_dig+ = 9) led2_dig = 0; if(led1_dig+ = 5) led1_dig = 0; switch(led_count) case 1: SEL=0xff&LED1; if(led_dp=1) DATA=regled1_dig&dp; else DATA=regled1_dig; break; case 2: SEL=0xff&LED2; if(led_dp=2) DATA=regled2_dig&d
10、p; else DATA=regled2_dig; break; case 3: SEL=0xff&LED3; if(led_dp=3) DATA=regled3_dig&dp; else DATA=regled3_dig; break; case 4: SEL=0xff&LED4; if(led_dp=4) DATA=regled4_dig&dp; else DATA=regled4_dig; break; default: break; +led_count;/*/void main() Timer8_1_EnableInt(); M8C_EnableGInt; Timer8_1_Star
11、t(); led_dp=2; while(1);3 AD采样例程模数转换器(A/D Convert)的功能是把模拟量转换成数字量,以便于利用计算机进行处理。PSoC试验板将微控制器的P01管脚连接到一个可调电位器的滑动端,用于给使用者验证PSoC的模数转换模块功能。本例程使用PSoC SAR6模数转换模块对模拟量进行采集和转换,并将结果显示在数码管。试验过程中通过改变电位器(本质上是一个可调电阻)改变模拟量的输入,观察显示结果的变化,并与万用表测试的结果相比较。试验原理框图如图8所示。图8 实验原理框图3.1 硬件模块选择与配置1. 创建一个新工程,在该工程的器件编辑器(Device Edit
12、or)中选择PGA用户模块和SAR6用户模块,然后将PGA用户模块和SAR6用户模块按要求放置。其中,PGA占用一个连续时间基本模块(ACB),SAR6占用一个开关电容模拟模块(ASC)。图9 全局资源配置2. 全局资源。单击参数内容方框里的下拉箭头,选择合适的参数值,便可以更改工程的全局资源。此实验配置的全局资源如图9所示。3. 连接用户模块。PGA用户模块的输出作为SAR6用户模块的输入信号源。4. 按以下步骤选择模拟列时钟:1) 单击AnalogColumn_Clock_x多路选择器;2) 从菜单里选择一个值(此处选择VC1)。5. 按以下步骤配置模拟列输入多路复用器:1) 单击Anal
13、ogColumn_InputMUX _x多路选择器;2) .从菜单里选择一个端口(此处选择Port_0_1)。6. 按图10配置PGA用户模块参数。图10 PGA用户模块参数7. 按图11配置SAR6用户模块参数。图11 SAR6用户模块参数8. 数码管显示部分的配置,由于在LED显示实验处有详细介绍,此处不再重复叙述。请参考LED显示实验。以上步骤,9. 通过以上步骤,最后得到如图12所示的资源配置图。10. 在Timer8_1INT.asm文件的_Timer8_1_ISR中断服务子程序里加入以下一行代码:jmp _timer1_ISR;11. 编写应用程序。程序代码见附录。图12 模拟资源
14、配置总图3.2 软件设计/-/文件名:main.c/-#include / part specific constants and macros#include PSoCAPI.h / PSoC API definitions for all User Modules#pragma interrupt_handler timer1_ISR #define DATA PRT3DR#define SEL PRT4DR#define LED1 0b11111110#define LED2 0b11111101#define LED3 0b11111011#define LED4 0b11110111
15、#define dp 0b11111110/unsigned char reg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;unsigned char reg=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff;unsigned char led1_dig=0,led2_dig=0,led3_dig=0,led4_dig=0;unsigned char
16、led_count=1;unsigned char led_dp=0;int iResult;void display(int num) led1_dig = num/1000; led2_dig = (num%1000)/100; led3_dig = (num%100)/10; led4_dig = num%10; void timer1_ISR() if(led_count=5) led_count=1; switch(led_count) case 1: SEL=0xff&LED1; if(led_dp=1) DATA=regled1_dig&dp; else DATA=regled1
17、_dig; break; case 2: SEL=0xff&LED2; if(led_dp=2) DATA=regled2_dig&dp; else DATA=regled2_dig; break; case 3: SEL=0xff&LED3; if(led_dp=3) DATA=regled3_dig&dp; else DATA=regled3_dig; break; case 4: SEL=0xff&LED4; if(led_dp=4) DATA=regled4_dig&dp; else DATA=regled4_dig; break; default: break; +led_count
18、;void main() / Insert your main routine code here. PGA_1_Start(PGA_1_MEDPOWER); / Turn on PGA power SAR6_1_Start(SAR6_1_MEDPOWER); / Turn on SAR6 power Timer8_1_Start(); Timer8_1_EnableInt(); M8C_EnableGInt; while(1) / SAR6模数转换结果范围在 -32,31 ,加32,转换为无符号数0,63 iResult = SAR6_1_cGetSample() + 32; display
19、(iResult); 4 PWM控制蜂鸣器例程PWM模块是用来产生一定频率、一定占空比的周期方波,给蜂鸣器施加不同频率和占空比的方波,它就会发出不同的声音。试验板使用的蜂鸣器需要4KHz,占空比为50的方波驱动。试验电路图如图13所示,P03管脚配置成PWM模块的输出。图13 实验电路图4.1 硬件模块选择与配置1. 创建一个新工程,在该工程的器件编辑器(Device Editor)中选择PWM8用户模块,然后将PWM8用户模块按要求放置。2. 配置全局资源。单击参数内容方框里的下拉箭头,选择合适的参数值,便可以更改工程的全局资源。此实验的数字时钟资源如图14配置。图14 数字时钟资源配置3.
20、 图15配置PWM8用户模块参数。图15 PWM8用户模块参数4. 将PWM8的CompareOut输出连接到Row_O_Output_3总线。5. 使能Row_O_Output_3_Driver_0。6. 将P03管脚连接到GlobalOutEven3事件上,配置结果如图16所示。图16 资源配置总图7. 短接SPK_SEL跳帽。4.2 软件设计/-/文件名:main.c/-#include / part specific constants and macros#include PSoCAPI.h / PSoC API definitions for all User ModulesBYT
21、E byte_Period,byte_Duty;void delay()BYTE tmp1,tmp2;for(tmp1=0;tmp1255;tmp1+) for(tmp2=0;tmp2255;tmp2+);void main() byte_Period = 99; byte_Duty = 50; PWM8_1_WritePeriod(byte_Period); PWM8_1_WritePulseWidth(byte_Duty); while(1) PWM8_1_Start(); delay(); PWM8_1_Stop(); delay(); 尝试修改一下byte_Period,byte_Du
22、ty两个变量的值,看有什么效果。5 USB通讯例程Universal Serial Bus(USB)即通用串行总线是一种简单易行的标准接口,能最大限度的节省计算机的软硬件资源。学习板支持USB1.1协议,最大传输速度可以达12Mb/S,同时支持同步传输、批量传输、控制传输、中断传输 。例程中PC机的通讯程序从USB EP2端口发送数据,微控制器接收到数据后通过数码管显示出来,并存储到USB EP1的缓存区中;当PC机的通讯程序从USB EP1端口读取数据,微控制器就从EP1端口的缓存区取出数据并发送给PC机。向USB EP2端口写数据将数据读到数组缓存中将数组缓存中的数据发送给EP1从EP1缓
23、存中读数据在LED显示图17 USB例程读写流程8.5.1 硬件模块选择与配置1. 添加USB用户模块。2. 对USB描述符进行配置:选中USB模块,然后单击右键,选择USB Setup Wizard ,对描述符表进行如表2所示的配置。表2 USB描述符表Vendor IDProduct ID04b4E001Endpoint NumberDirectionTransfer TypeMax Packet SizeEp1InBulk64Ep2OutBulk643. 数码管显示部分资源配置参见数码管显示例程。5.2 软件设计/-/文件名:main.c/-#include / part specifi
24、c constants and macros#include PSoCAPI.h / PSoC API definitions for all User Modules#include main.h/ledvoid Display(unsigned char k);#define DATA PRT3DR#define SEL PRT4DR#define LED1 0b11111110#define LED2 0b11111101#define LED3 0b11111011#define LED4 0b11110111unsigned char num17 = 0x03,0x9f,0x25,0
25、x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff;/ - Globalsunsigned char cEp1Count = 0;unsigned char cEp2Count = 0;unsigned char aBuf64;WORD wCount;BYTE bCount;#define EP1SZ 0x40void Display(unsigned char k) SEL = LED2;DATA = numk;void main()unsigned char cIndx;unsigned char cIn
26、dx2;unsigned char cOnce; DATA=0xff; SEL=0x0f; M8C_EnableGInt; USBFS_Start(0,USB_5V_OPERATION); / start device to 5V / Wait for it to enumerate while(!USBFS_bGetConfiguration();aBuf0 = 9 ; / Enable the Out Endpoint to recieve data USBFS_EnableOutEP(USB_EP2); cOnce = 0; cIndx = 0; while (1) if (0 = cO
27、nce) cOnce = 1;/ Enable EP interruptsUSBFS_INT_REG |= USBFS_INT_EP1_MASK | USBFS_INT_EP2_MASK ;/while(!USBFS_bGetEPAckState(1)USBFS_LoadInEP(USB_EP1, &aBuf0,1, USB_TOGGLE); / EP1SZ prime EP1 if (cEp2Count) wCount = USBFS_wGetEPCount(USB_EP2); bCount = USBFS_bReadOutEP(USB_EP2, &aBuf0, wCount); Displ
28、ay(aBuf0); USBFS_LoadInEP(USB_EP1, &aBuf0,1, USB_TOGGLE); cEp2Count = 0; USBFS_EnableOutEP(USB_EP2); / forever while 6 串口收发数据串口常用于一些低速设备和电脑进行数据交换。学习板上有一个串口,寄存器位置符合16C550工业标准,内置波特率发生器。在使用串口与上位机PC通信时,需要一个RS232转换电路,如MAX3232。6.1 硬件模块选择与配置1. 添加UART用户模块;配置全局资源与串口资源以确定合适的波特率,资源设置如表3和表4所示,可知串口的时钟源为VC3,因此其波特
29、率为VC3/8。表3 全局资源配置表VC3 SourceSysClk/1VC3 Divider156由上表可知,VC3的里时钟源是系统时钟,所以VC3的时钟频率为:SysClk/156 Hz。表4 串口资源配置表ClockVC3Rx_InputRow_0_Input_3Tx_OutputRow_0_Output_02. 配置串口的接收与发送管脚,管理配置如表5所示。表5 管脚配置列表NameSelectDrive说明Port_1_3StdCPUStrong用于控制LED3的点亮Port_7_0GlobalOutOdd_0Strong串口的输出管脚Port_7_7GlobalInOdd_7Hig
30、h Z串口的输入管脚6.2 软件设计本实验要用到串口助手,读者可在网上下载(推荐周立功easyARM的串口助手),串口的波特率为19200.。连续收到11个字符,即Hello World时,LED3将会闪一下,并将字符串到串口助手的接收窗口。#include #include PSoCAPI.h #define N11/ 要接收的字符个数BYTEcReceDataN; / 接收缓冲BYTEiCount;/ 接收计数器BOOLbRxCompleted;/ 判断是否接收完成#pragma interrupt_handler UART_1_Rx_ISR/ 中断函数声明void DelayNs(WOR
31、D dly) / 功能是进行时间延时,dly是要延时的时间长度 WORDi, j;for(i=0;idly;i+)for(j=0;j1000;j+);/*/void LedFlash() / 功能是让Led4亮一下PRT1DR =0x08;DelayNs(40);PRT1DR =0x00;DelayNs(40);/*/void UART_1_Rx_ISR() /接收中断,每接收到一个字符,中断一次,并存储该字符cReceDataiCount = UART_1_bReadRxData();/ 存储接收到的字符iCount+;if(iCount=N)/ 判断是否接收已完成bRxCompleted
32、= 1;iCount = 0;/*/void main() BYTE i; UART_1_Start(UART_PARITY_NONE);/ 使能UART UART_1_IntCntl(UART_1_ENABLE_RX_INT); UART_1_CPutString(UART Example);/ 发送例子字符串UART_1_PutCRLF();/ 发送回车 M8C_EnableGInt;/ 全局中断使能bRxCompleted = 0;iCount = 0; while (1) if(bRxCompleted)/ 若接收完成 LedFlash();/ 闪LED灯 for(i=0;iN;i+)
33、/ 在串口助手上显示该字符串 UART_1_PutChar(cReceDatai); bRxCompleted = 0; 7 键盘本实验的矩阵键盘为3x4键盘,行线分别连到P5.4P5.7口,列线连到P5.0P5.2口,设有10个数字键(09)和2个备用键。原理图如图18所示。图18 试验板矩阵键盘原理图7.1 矩阵式键盘扫描控制原理矩阵式键盘,也即通常所讲的行列式键盘,由行线和列线组成。按键位于行、列的交叉点上,行、列分别连接到按键开关的两端,行线通过上拉电阻接到高电平。无按键动作时,行线处于高电平状态;有按键按下时,交点的行线和列线接通,行线电平状态将由与此行线相连的列线电平决定。列线电平
34、如果低,则行线电平为低;列线电平如果高,则行线电平也为高。这一点是识别矩阵键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量较多的场合。通过行列键盘扫描的方法可获取键盘输入的键值,从而得知按下的是哪个按键,具体过程如下:1、查询是否有键按下。单片机向列扫描口输出全为“0”的扫描码,然后从行检测口检测信号,只要有一行信号不为“1”,则表示有键按下,且不为“1”的行即对应为按下的键所在的行。2、查询按下键所在的行、列位置。前面已经取得
35、了按下的键的行号,接下来要确定键所在的列,这需要进行逐列扫描。单片机首先使第1列为“0”,其余各列为“1”,接着进行行检测,若为全“1”,表示不在第1列,否则即在第1列;然后使第2列为“0”,其余各列为“1”,再进行行检测,若为全“1”,表示不在第2列,否则即在第2列;这样逐列检测,直到找到按下键所在的列。当各列都扫描以后仍没有找到,则放弃扫描,认为是键的误动作。3、对得到的行号和列号译码,得到键值。在扫描键盘过程中,应注意以下问题:1、当操作者按下或松开按键时,按键会产生机械抖动。这种抖动经常发生在按下或松开的瞬间,一般持续几到十几毫秒,抖动时间随按键的结构不同而不同。在扫描键盘过程中,必须
36、想办法消除按键抖动,否则会引起错误。消除按键抖动可以用硬件电路来实现,例如,利用R-S触发器来锁定按键状态,以消除抖动的影响。较为简单的方法是用软件延时方法来消除按键的抖动,也就是说,一旦发现有键按下,就延时20ms以后再测按键的状态。这样就避开按键发生抖动的那一段时间,使CPU能可靠地读按键状态。在编制键盘扫描程序时,只要发现按键状态有变化,即无论是按下还是松开,程序都应延时20ms以后再进行其他操作。2、在键盘扫描中,应防止按一次键而有多个对应键值输入的情况。这种情况的发生是由于键扫描速度和键处理速度较快,当某一个按下的键还未松开时,键扫描程序和键处理程序已执行了多遍。这样,由于程序执行和
37、按键动作不同步而造成按一次键有多个键值输入的错误状态。为避免发生这种情况,必须保证按一次键,CPU只对该键作一次处理。7.2 硬件模块选择与配置1. 本例程实现34矩阵键盘扫描功能,将按下键的键值显示在数码管上。相应的按键管脚配置如图19如示。图19 按键管脚配置2. 控制数码管显示的管脚配置参见图7。3. 在psocgpioint.asm文件中的全局外部中断函数中添加函数跳转语句:ljmp _KeyScan7.3 软件设计/-/文件名:main.c/-#include / part specific constants and macros#include PSoCAPI.h / PSoC
38、API definitions for all User Modules#pragma interrupt_handler KeyScan/void KeyScan();void delay10ms(unsigned char time);void Dispaly(unsigned char k);unsigned char key=0,temp;#define DATA PRT3DR#define SEL PRT4DR#define LED1 0b11111110#define LED2 0b11111101#define LED3 0b11111011#define LED4 0b11110111/*common anode LED,therefore the LED will light when the pin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿业法律法规与放射性金属矿管理考核试卷
- 电感器在电力补偿中的应用考核试卷
- 特色饮料作物种植与地域文化考核试卷
- 灯具的防尘设计及其维护考核试卷
- 煤制合成气生产考核试卷
- 林产品加工质量检验与评定考核试卷
- 百货零售企业供应链金融考核试卷
- 石棉云母矿选矿厂绿色生产与节能减排考核试卷
- 木材加工企业的环境保护与污染治理考核试卷
- 国家电网技能培训体系与实践
- 2023年托幼机构幼儿园卫生保健人员考试题库及参考答案
- 2023年IDSA念珠菌病指南中文翻译
- 中医护理耳穴压豆课件
- 钢木质隔热防火门成品检验报告
- YS/T 713-2009干式变压器用铝带、箔材
- YB 4068-1991热轧环件
- 阿尔茨海默病康复课件
- 雨果与《巴黎圣母院》课件
- 毕业论文-基于单片机的分贝计设计与实现
- 青岛版一年级下册数学期中知识点分类整理复习完美版
- 防洪度汛监理实施细则-
评论
0/150
提交评论