单片机课程设计报告mc9s12s128

上传人:jin****ng 文档编号:223420795 上传时间:2023-07-18 格式:DOCX 页数:20 大小:243.27KB
返回 下载 相关 举报
单片机课程设计报告mc9s12s128_第1页
第1页 / 共20页
单片机课程设计报告mc9s12s128_第2页
第2页 / 共20页
单片机课程设计报告mc9s12s128_第3页
第3页 / 共20页
点击查看更多>>
资源描述
单片机课程设计报吿题目:对可调光LED灯发光强度进行控制学院:机电工程学院班级:姓名:学号: 0910101011指导教师:一、设计任务:1、单片机可选用飞思卡尔型。2、按键及显示方案可采用CH451芯片或其他方案。3、设计并制作可调光LED灯,并对发光强度进行控制。二、设计方案:硬件选择:飞思卡尔MC9S12S128系类单片机,驱动模块,LED模块,CH4541 模块;工作原理:通过调节PWM为lKHz至lOKHz TTL方波,调节其占空比,从而 调节电压,决定了发光强度。MC9S12S128部分管脚图:P1P21VCC2VCC0GND2GND3RS-232R04RS232T0NC4NC5PJ76PJ65VRL6VRH7SCK08MOSIO7RXD18TXD19SSO10MISOO9AN0710AN0611PM112PM011AN0512AN0413PP714P咬13AN0314AN0215PP416PP315AN0116AN0017PP218PP117PA718PA619PPO20PTO19PA520PA421PT122PT221PA322PA223PT324PT423PA124PAO25PT526PT625PB626PB527PT728PBO27PE428PB729PB130PB229PE330PE231PB影32PB431XIRQ32IRQMC9S12S128主要系统参数:S12X CPU, 最高总线速度40MHz64KB、128KB和256KB闪存选项,均带有错误校正功能(ECC)带有ECC的、4KB至8KB DataFlash,用于实现数据或程序存储配置8、10或12位模数转换器(ADC),转换时间3“ s支持控制区域网(CAN)、本地互联网(LIN)和串行外设接口(SPI)协 议模块带有16-位计数器的、8-通道定时器出色的EMC,及运行和停止省电模式方棊1:电位器给定1、由于MC9S12S128自带有AD以及PWM功能,所以对软件的要求交简单。2、键盘输入采用CH451整体模块3、通信端口为PA 口,与中断端口三、硬件结构:CH451硬件电路结构nll1 ii niiM:is、1=.GI7驱动模块设计1OUT 卜JtVOUT 卜 竺IM* XVOOLVB必TToscVfT Trt UfczupsiTVTirt-s5TBYH2TFMFTYT*CF亠GKD屮IterrTD34CT-TiTT产ThVTSUTmiFKTTML亡UP知m-nS.TB-VU2TFVft筍TVTI12pm1 tcrGKDTD3+2-|l*5KDh:严化片=-1 tl0asvJE K= = 2 GkDPW3d1MHEsE2QL2 4 2jgVBATTbsd=四、软件设计4.1 HCS12控制软件主要理论智能车开发环境采用了飞思卡尔HCS12系列单片机开发软件CodeWarrior。 该软件具有支持多种语言、开发环境界面统一、交叉平台开发以及支持插件工具 等特点。在CodeWarrior界面完成编译后,通过BDM FOR S12工具,在CodeWarrior 环境下向MC9S12模块下载程序。BDM FOR S12工具使用简单,十分方便。在整个系统设计中,用到了4个单片机基本功能模块:时钟模块、PWM输出模 块、AD转换模块、。通过编写程序先对所用到的模块进行初始化,并通过对相应 数据寄存器或状态寄存器的读写,实现期望的功能。为实现所期望的功能所需芯 片资源如表4.1所示。表4.1系统所用到的芯片资源AD模块PAD电阻调值PWM模块PWM01PWMIO端口模块PA0CH451系统通过在主函数中循环调用CH451读写函数、计算、控制PWM等功能子模块,对LED进行控制;程序执行前先对各个模块初始化,然后执行主函数的功能;初始化流程图如图10所示:图10程序初始化流程图程序入口变量初始化设羞总线频 率一珊01模块 初始化4.2各模块设计化时钟初始化PWM初始化PWM的主要特点有L1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。2、每一个输出通道都有一个精确的计数器。3、每一个通道的PWM输出使能都可以由编程来控制。4、PWM输出波形的翻转控制可以通过编程来实现。5、周期和脉宽可以被双缓冲。当通道关闭或PWM计数器为0时,改变周期和 脉宽才起作用。6、8字节或16字节的通道协议。7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟 频率。8、通过编程可以实现希望的时钟周期。9、具有遇到紧急情况关闭程序的功能。10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。4. 3.1设定单片机总线频率时钟基本脉冲是CPU工作的基础。MC9S12XS128微控制器的系统时钟信号,由 时钟振荡电路或专用时序脉冲信号提供MC U内部的所有时钟信号都来源于EXTAL 引脚,也为MUC与其他外接芯片之间的通信提供了可靠的同步时钟信号。对于S12,可以利用寄存器SYNR、REFDV来改变晶振频率,从而产生由锁相环 倍频后的时钟频率fPLLCLK,可以选用8MHz或16MHz外部晶体振荡器作外时钟。在 本车的设计中,外部晶体振荡器为16MHz,即fOSCCLK=16MHz。而锁相环产生的时 钟频率 fPLLCLK=2*fOSCCLK*(SYNR+1)/(REFDV+1),设计中我们将 SYNR设为 4, REFD V 设为 1,故 fPLLCLK=80MHz。S12的总线时钟是整个MCU系统的定时基准和工作同步脉冲,其频率固定为晶 体频率fPLLCLK的1/2。故可以得到fPLLCLK/2=40MHz的总线频率,接近 MC9S12XS128单片机的上限内部总线频率45MHz。以下是总线频率子程序:/ 设 置 总 线 频 率void SET_PLL() CLKSEL=0X00;SYNR=4;REFDV=1;PLLCTL=0x60;while (CRGFLG &0x08)=0); /时钟校正同步CLKSEL=0x80;/使用 PLLCLK 执行后 busclock二pllclk/24.3.2 PWM输出模块MC9S12XS128集成了8路8位独立PWM通道,通过相应设置可变成4个16位PWM 通道,每个通道都有专用的计数器,PWM输出极性和对齐方式可选择,8个通道分 成两组,共有4个时钟源控制。PWMO、PWM1、PWM4、PWM5为一组,使用时钟源ClockA 和ClockSA; PWM2、PWM3、PWM6、PWM7构成另一组,使用时钟源ClockB和ClockSB。 ClockA和ClockB均是由总线时钟经过分频后得到,分频范围1128,通过寄存器 PWMPRCLK来设置,ClockSA和ClockSB是分别通过ClockA和ClockB进一步分频后得 到的,分频范围为1512,分别通过寄存器PWMSCLA和PWMSCLB来设置,计算公式 为:ClockSA二ClockA/ (2*PWMSCLA)ClockSB二ClockB/ (2*PWMSCLB)通过寄存器PWME来控制PWM0PWM7的启动或关闭。为了提高精度,我们将PWM0和PWM1,PWM2和PWM3,PWM4和PWM5级联,构 成16位的PWM通道,级联时,2个通道的常数寄存器和计数器均连接成16位的 寄存器,3个16位通道的输出分别使用通道1、3、5的输出引脚,时钟源分别 由通道1、3、5的时钟选择控制位决定。级联时,通道1、3、5的引脚变成PWM 输出引脚,通道0、2、4的时钟选择没有意义。通过寄存器PWMPRCLK、PWMSCLA、PWMSCLB、PWMCLK对各通道的时钟源进行设置。PWM模块初始化过程如下:*/ void pwm_init(void)PWMPOL=0xff;/对应通道的极性,及联通到首先输出高电平PWMCLK=0xff;/clock sa做时钟源PWMPRCLK=0x00;/令时钟A为总线频PWMCAE=0x00;/左对齐输出模式PWMCTL=0xF0;/01,23,45,67级联PWMSCLA=0x01;/clockSA=ClockA/(2*PWMSCLA)=20MhzPWMSCLB=0x01;/clockSB二ClockB/(2*PWMSCLB)=20MhPWMPER01=0xc8;PWMDTY01=0x64;/设定周期,周期是:时钟源周期* (PWMPER) 10khzPWME=0xFF;注:开关PWM操作通过写PWME寄存器完成,如图11所示,开相应通道则相应Bit 置1,关相应通道则相应Bit置0,那么开1, 3,5通道,贝UPWME=0x2a。RegisterWanie0x000CPWMEPWME7PWME6PWME5PWME4PWME3PWME2PWME1PWM ECBit?61Bit 04.3.4 AD转换模块AD转换模块由模拟量前端的8选1多路转换开关,采样缓冲器及放大器,逐次 逼近式模拟量转换、控制部分及转换结果存储部分等组成。AD转换所需要的时间周期是固定不变的,但采样时间和时钟频率可以通过寄 存器ATDxCTL4 (x为0或1)在一定范围内选择,其公式为:ATDClock二BusClock *0.5/(PRS+1)AD转换模块的初始化程序如下所示:/AD初始化void AD_I nit() ATD0CTL1=0x00;/7:1-外部触发,65:00-8 位精度,4:放电,3210:chATD0CTL2=0x40; /AFFC=1,对结果寄存器的访问将自动清除转换完成 标志位ATD0CTL3=0x80;/右对齐无符号,4 个 ad 通道采样,No FIFO, Freeze模式下继续转ATD0CTL4=0x01;/765:采样时间为 4 个 AD 时钟周期,ATDClock二BusClock *0.5/PRS+lATD0CTL5=0x30; /6:0特殊通道禁止,5:1连续转换,4:1多通道轮流 米样ATD0DIEN=0x00;/禁止数字输入AD转换结果存放在寄存器ATDODRxL,通过这些寄存器将结果传送到数组 CAIJItable ,用来检测道路信息。CH451:算法/functhion:CH451 INIT */void ch451_init(void) DDRJ_DDRJ6=0;DDRA=0x0f;wr_ch451(0x0201);wr_ch451(0x0402);wr_ch451(0x0507);为7/循环计数位/ch451内部复位/ch451键盘开启,显示关闭/ch451工作在mode1,扫描极限为8,亮度占空比4.4程序调试S12系列微控制器具有一个由片内仿真、触发和跟踪硬件构成的单线背景调试模 式(BDM),因此它可以通过使用两种开发工具:简单串行电缆或低成本的BDM, 来完成调试功能。在本次比赛中,我们所采用的赛车软件开发工具为清华大学开 发的专门面向于Motorola S12系列微控制器的BDM调试工具以及由Metrowerk公 司开发的CodeWarrior编译器。吧 File Edit View Sear di Project Piro 匚 essor Expert Device Initializatio n Window Help醤凸用ox翕扈翹選孥囱涵凶 J* . M 丁 rf Path: Project nicip |I tbiiml J仃涵第恢Films Lint Order | T argetE C:UsersyusmDesktopProj eutSourcFileCode Data 謹HtSSoiirces:Tiain. c|D apage. c Q Include s;-B derivative, hS MC9S12XS128.h 、町 led.h-tFroject Settings0-3St:ii-tup Code_ 町 St:ai-tl2. c fi-Liriker Files 町 bm-n已r. bbl 町 Project, prm 町 Proj ezt. map 曰曰Li9 MC9S12XS120. cD :TLEixbi. libaaa1-n/n/n/88740400 0aa-M- -In-n/n/n/37I-.20PWPOL = Llzff ; PWMCLK=Oxff;PWPRCLP;=0k00; PWMCAE=0x00;PWCTL = 0zF0; PM4SCLA=Llz01;FW4SCLB = Llz01; PWPERUl = 0zc8;PWPER23 = 0x00cH;PWP ER45 = 0 a 00c 8 ;PWP E R 6 7 = 0 x 00q 8 ; PWDTiUl = 0z&4; PWE = 0xFF;/对应通道的极性,及联通;/clock歸做时钟源令时钟毙为虑线频左对齐输出模式/01,23,45,67 级联z/clockSA=ClockA/(2*1/clackSB=ClockB/(2*l设定周期,周期是:时!通道级联的周期“II通道级联的周期functhion:CH451 INITvo i d :4i4 5 l_imt. (vo i d j DEiR.T_DDRJ6 = 0;DDFA=0x0f; wr_ch451i:0z0201:i ; wr_ch451i:0z0402:i ; wr_ch451(0x0507);/循环计数位 /ch451内都复位 z z u h 4 51键盘开启 显巫h /ch 4511 作在modE 1,-扫 f.来关关*来来关关*来来关关 来来* AD初始化关关关关关关关关关*託託託託託关关关关关关关关关关关关*託託託託关关关关关关关关关关关关V11 files勺94512425vo i d ad_imt. (vo i d :iLine 164 Col 30 |丄|Code Warrior是面向以HC12和S12为CPU的单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器等。在CodeWarrior软件中可以使用汇编语言或C语言,以及两种语言的混合编程。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文件一 旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接在工程 中添加所需的程序代码。如图13所示,利用BDM和CodeWarrior自带的hiwave.exe用户可以进行一系 列的调试工作,如监视寄存器状态、修改PC指针、设置断点等,这样能快速的找 到软件问题图13 Hiwave程序调试环境4.4.2软件调试在软件设计中,要用到ATD模块、PWM模块、电源模块等。在编写主程序 前,要先对各个模块分别进行调试,并编写各部分的子程序。根据系统电路板的资源,本设计方案中,使用PAD00对电阻值进行AD转化, PWMO和PWM1 口级联后控制PWM输出调试ATD模块时,先使用BDM模块将子程序下载到芯片内,然后分别在ATD的 输入端利用稳压源产生0-+5V的电压,观察CodeWarrior的Memory窗口中各个输 入的电压值在误差允许范围内相等,说明该子程序正确。为检验PWM模块子程序,可以编写输出一定占空比的PWM波形子程序,从PWM 端口接入示波器,通过示波器观察输出波形是否与设定值相同,若相同则程序正 确。在每一部分子程序调试通过后,结合外围电路对所有子程序进行整合,根据LED 工作原理,编写出完整的主程序。在CodeWarrior界面完成程序编译后,通过 BDM工具,将程序下载到MC9S12XS128微处理器中,然后进行PWM的调试。五、设计收获与结果通过多天的艰苦努力,实现所预想功能。虽然说没有做到最好,但是通过大家的 合作与努力,我们会做到更好。比赛结果可能不能如愿以偿,但是我们在这几天 中收获的是知识与经验。程序代码:#include hidef.h/* common defines and macros */#include deriva ti ve.h/* deriva ti ve-specific defi nitions */#include led.h/head file of program#includemc9sl2xsl28.h#pragma LINK_INF0 DERIVATIVE MC9S12XS128#define DIN P0RTA_PA0#define DCLK PORTA_PA1#define DOUT PTIJ_PTIJ7#define LOAD PORTA_PA3uchar open;uchar set=0;uchar AD_set;uchar keynum;ucharled0_f16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x 5e,0x79,0x71;uintch451_led8 = 0x0800,0x0900,0x0a00,0x0b00,0x0c00,0x0d00,0x0e00,0x0f00;uint twinkle=0x0680;uint AD_wValue;/void main(void) /* put your own code here */DisableInterrupts;pll_se t();pwm_ init();ad_i nit();ch451_ init();int errup t_init();EnableIn terrup ts; /允许可屏蔽中断for(;) while(!ATDOSTATO_SCF); / 等待转换结束AD_wValue二ATDODRO;if(AD_se t= 1) display();delay(Oxffff);PIEJ_PIEJ7=1;/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* / /_FEED_COP(); /* feeds the dog */ /* loop forever */* please make sure that you never leave main */ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/functhion:IPLLCLK Init*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void pll_se t(v oid)CLKSEL=0X00;PLLCTL=0xE1;SYNR=0x04;/设置总线频率为(SYNR+l)*8MHz,即 40MHzREFDV=0x01;PLLCTL=0x60;asm NOP; ;/空操作,进行简单的延时,等待锁相环的响应asm NOP;asm NOP;while (CRGFLG&0x08)=0); /时钟校正同步 CLKSEL=0xA0;/使用 PLLCLK/void interrupt_init(void) PIEJ_PIEJ7=1;/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/functhion:PWM INIT*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void pwm_init(void)PWMPOL=0xff;PWMCLK=0xff; PWMPRCLK=0x00;PWMCAE=0x00;PWMCTL=0xF0;PWMSCLA=0x01;PWMSCLB=0x01;PWMPER01=0xc8;PWMPER23=0x00c8;PWMPER45=0x00c8;PWMPER67=0x00c8;/对应通道的极性,及联通到首先输出高电平/clock sa做时钟源/令时钟A为总线频/左对齐输出模式/01,23,45,67 级联/clockSA=ClockA/(2*PWMSCLA)=20Mhz /clockSB=ClockB/(2*PWMSCLB)=20Mh/设定周期,周期是:时钟源周期*(PWMPER) 10khz/通道级联的周期,10khz/通道级联的周期,10khzPWMDTY01=0x64;PWME=0xFF;/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/functhion:CH451 INIT*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void ch451_init(void) DDRJ_DDRJ6=0;DDRA=0x0f; wr_ch451(0x0201); wr_ch451(0x0402); wr_ch451(0x0507);/循环计数位/ch451内部复位/ch451键盘开启,显示关闭/ch451工作在model,扫描极限为8,亮度占空比为7/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /AD初始化*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void ad_init(void)ATD0CTL2=0xC0; / 11 0 000 00启动清零,无等待模式,禁止外部触发,中断禁 止ATD0CTL3=0x00; /转换序列长度为& No FIFO, Freeze模式下继续转换ATD0CTL4=0xB5; /时间为 500 2MHZ(时间不对)/ 1(8位10位)01(采样时间选择)10101(PRS)8位精度,4 个 AD 时钟,ATDClock=BusClock*0.5/PRS+l=1254704Hz;PRS=5,divider=32ATD0CTL5=0x30; /0左对齐,0无符号,0单次转换,1多通道,000从0通道开 始ATD0DIEN=0x00; /禁止数字输入/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *1*/functhion:write to ch451*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void wr_ch451(uint data)uchar i;DCLK=0;LOAD=0;/清零,开始准备for(i=0;i12;i+)if(da ta%2=l)DIN=1;/最后一位为 1 时,送 1elseDIN=0;/最后一位为0时,送0DCLK=1;/DCLK的上升沿送数asm nop;asm nop;DCLK=0;data=datal;/循环将12位送往CH451LOAD=1;asm nop;asm nop;asm nop;/完成/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/functhion:get the keynumber*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /uchar get_keynumber(void)uchar dat a,i;data=0;/键值初始为0wr_ch451(0x0700);/开始获取键值DCLK=1;LOAD=0;/将七位键值循环获取for(i=0;i7;i+)辻(DOUT=1)data=datal;data+=1;else data二datal;DCLK=O;/获取下一个数asm nop;asm nop;asm nop;DCLK=1;return da ta;/返回值为键值/functhion:assingments*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void dis_assingments(uchar data)switch (da ta)case 0x70:turn_on();/键值70对应任务1:开始功能break;case 0x78:t urn_off();/键值78对应任务2:关闭功能break;case 0x50:case 0x47:dat a_se t();break;case 0x40:/ turn_on();up(); break; case 0x48: down();break;case 0x58:AD_change();break;default:break;/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/case 0x40:turn_off;break;case 0x48:up;break;case 0x49:down;break;case 0x50:left_move;break;case 0x51:right_move;break;case 0x58:data_set;break;case 0x59:ok;break;case 0x50:left_move; break;/ / *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/func thion :开启功能*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /开始标志置1/开启显示功能/3f,06,5b,4f,66,6d,7d,07void turn_o n(void) open=1; wr_ch451(0x0600); wr_ch451(0x0403); wr_ch451(0x085b); wr_ch451(0x093f); wr_ch451(0x0a06); wr_ch451(0x0b5b); wr_ch451(0x0c3f); wr_ch451(0x0d66); wr_ch451(0x0e5B); wr_ch451(0x0f4F);/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/func thion:关闭功能*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void turn_o ff(void)open=0;/开始标志置1wr_ch451(0x0402);/关闭显示功能/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/func thion:开始设置*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void dat a_se t(v oid)if(open=1)volatile uchar i;volatile uint led;vola tile uin t a=0x000f;/与其相与可以得到某位的值/ led=PWMPER01;for(i=0;i8;i+)if(i4)led=PWMPER01;led=(4*i);led&二a; led=led0_fled; led+二ch451_led7-i; wr_ch451(led);elseled=PWMDTY01;led=(4*(i-4);led&二a;led=led0_fled;led+=ch451_led7-i; wr_ch451(led); / wr_ch451(twinkle);AD_set=0;void up(void)if(open=1)volatile uchar i;volatile uint led;vola tile uin t a=0x000f;/与其相与可以得到某位的值/ led=PWMPER01;uint dty=PWMDTY01;if(dty!=200) dty+=1;PWMDTY01=dty;for(i=0;i8;i+)if(i4)led=PWMPER01;led=(4*i);led&二a; led=led0_fled; led+=ch451_led7-i; wr_ch451(led);elseled=PWMDTY01; led=(4*(i-4); led&二a; led=ledO_fled;led+二ch451_led7-i; wr_ch451(led); delay(OxOOff);/ wr_ch451(twinkle);/functhion:占空比减少/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* / /void down(void) if(open=1) volatile uchar i;volatile uint led;vola tile uin t a=0x000f;/与其相与可以得到某位的值/ led=PWMPER01;uint dty=PWMDTY01; if(dty!=O) dty-=1;PWMDTY01=dty; for(i=0;i8;i+) if(i4)led=PWMPER01; led=(4*i); led&二a; led=led0_fled; led+=ch451_led7-i; wr_ch451(led);else led=PWMDTY01; led=(4*(i-4); led&二a; led=led0_fled; led+=ch451_led7-i; wr_ch451(led);/ wr_ch451(twinkle);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);delay(Oxffff);/functhion:开启ad功能*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void AD_change(void)AD_set=l;/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/func thio n:延时*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /void delay(uint j)uint n,m;for(n=0;nj;n+) for(m=0;m40;m+)/ *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*/func thion:展示 */ void display(void)volatile uchar i;volatile uint led;vola tile uin t a=0x000f;/与其相与可以得到某位的值/ led=PWMPER01;volatile uint p;p=(AD_wValue/256)*160;PWMDTY01=(uint)p/256; for(i=0;i8;i+)if(i4)led=PWMPER01;led=(4*i);led&二a;led=led0_fled; led+=ch451_led7-i; wr_ch451(led);elseled=PWMDTY01;led=(4*(i-4);led&二a;led=led0_fled;led+=ch451_led7-i; wr_ch451(led);/functhion:中断程序*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* /#pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 24 keyboard(void)PIEJ_PIEJ7=0;/关中断keynum二get_keynumber(); dis_assingments(keynum); #pragma CODE_SEG DEFAULT;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!