




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一:I/O口、定时器及软件使用PIC16F877A单片机的RB0、RB1、RB2分别接一个LED,以TMR0为计时器,让三个LED分别每隔10ms、100ms以及1s闪亮。请分别用KEIL和PROTEUS自带的编译器调试。电路图自己画,Proteus请保存在7.0版本,否则在实验室打不开。也可以每次做实验的时候在实验室安装新版本的软件。#include _CONFIG(0x3F71);#define LED1 RB0#define LED2 RB1#define LED3 RB2#define TMR0_DELAY 100void interrupt SJL(void);char Counter;void main(void) OPTION_REG=0B00000101; TRISB=0b00000000; INTCON=0B10100000; TMR0=TMR0_DELAY; Counter=0; LED1=0;LED2=0;LED3=0; while(1); void interrupt SJL(void) char temp; if(T0IF=1) Counter+; T0IF=0; TMR0=TMR0_DELAY; LED1=!LED1; temp=Counter; while(temp=10) temp-=10; if(temp=0) LED2=!LED2; if(Counter=100) Counter=0; LED3=!LED3; 实验二:中断+PWM实验参考例4.1,RB0和RB7引脚分别接开关S1和S2,RB1、RC2引脚F分别外接一个LED1和LED2。要求:利用INT中断,每按下一次S1,LED1翻转一次;利用RBIE中断,当S2按下,输出1kHz,占空比40%的波形,当S2弹开,输出1kHz,占空比60%的波形。要求以上两个功能,写到一个程序中。/晶振为8MHz,40%占空比时X=200,60%占空比时X=300#include_CONFIG(0x3F3A);#define LED1 RB1void DELAY(unsigned int); void interrupt SJL(void);void PWM_SZ(unsigned int x);void main(void) OPTION_REG=0b00000000; TRISB=0b11111101; INTCON=0b11011000; TRISC2=0; LED1=0; PWM_SZ(200); /配置PWM 40% while(1); void interrupt SJL(void) if (INTF=1) DELAY(30); INTF=0; LED1=!LED1;if(RBIF=1) DELAY(30); if(RB7=1) PWM_SZ(300); /占空比60 else PWM_SZ(200); /占空比40 RBIF=0;void PWM_SZ(unsigned int x) PR2=124; T2CON=0b00000110 /工作,预分频1:16 CCP1CON=0b00000000 /禁用,修改参数 CCP1CON=0b00001100 /启用PWM功能。 CCP1CON|=(x&0x03)2; void DELAY(unsigned int n) unsigned int j; char k; for(j=0;j0;k-) NOP();实验三:USART+BCD+LED实验(PROTUES+硬件烧写)(1) 重复例4.15(只需要protues仿真)(2) 编写一个测试单片机通信功能的自发自收程序,参照实验电路板接线,要求,将RC6和RC7引脚短接(P19引脚12脚短接),P20、P45短路帽短接,记录S1按键(RB0)点击的次数,每点击一次,将次数值(2位数,1-99)通过发送口发送出去,接收口收到数据后,将值送至LED9-LED10数码管显示(SPI接口,使用RC3和RC5引脚,P8短路帽短接)。#include_CONFIG(0x30E4);_CONFIG(0X3FFF); void DELAY(unsigned int); void interrupt ISR(void); void CSH(void); void BCD(unsigned int ); void SPI_WRITE(char *);void DISP_TWO(char *);#define SEND_ONE(a) TXREG=a; while(TRMT=0) /宏定义,发送一个数并等待其结束const LED_CODE17=0b11000000,0b11111001,0b10100100,0b10110000,0b10011001, 0b10010010,0b10000010,0b11111000,0b10000000,0b10010000, 0b10001000,0b10000011,0b11000110,0b10100001,0b10000110, 0b10001110,0b11111111,; /8段数码管显示代码char H=0X00; char x=0;char WW=0,QW=0,BW=0,SW=0,GW=0; char A2; void main(void) CSH();while(1) BCD(x); /BCD转换(接收到的数据已经赋值给x) A0=GW; A1=SW; DISP_TWO(A); /发送到数码管显示 DELAY(100); void CSH(void) /初始化 ANSEL=0B00000000; ANSELH=0B00000000; /将B口定义为普通I/0口 OPTION_REG=0b00000000; WPUB=0B11111111; /B口弱上拉 TRISB=0b11111101; TRISC=0b11010000; INTCON=0b11010000; /中断寄存器配置 SPBRG=25; /波特率为9600,高速 RCIE=1; /接收中断 RCSTA=0b10010000; TXSTA=0b00100100; /USART相关寄存器配置 SSPEN=1; /spi串口使能 CKP=1; /空闲时钟为高电平 SSPM3=0; SSPM2=0; SSPM1=0; SSPM0=1; /spi主控模式,时钟为fosc/16 SMP=1; CKE=0; /sck上升沿传输数据 /中断程序 void interrupt ISR(void) if (INTF=1) /RBO口按键中断 DELAY(30); SEND_ONE(H); /发送数据 H+; DELAY(100); INTF=0; /清除中断标志 if(RCIF=1) /接收中断 x=RCREG; /接收的字符赋值给x DELAY(100); void DELAY(unsigned int n)/延时 unsigned int j; char k; for(j=0;j0;k-) NOP();void BCD(unsigned int R1) /BCD转化 WW=0;QW=0;BW=0;SW=0;GW=0; while(R1=10000) R1-=10000;WW+; while(R1=1000) R1-=1000;QW+; while(R1=100) R1-=100;BW+; while(R1=10) R1-=10;SW+; GW=R1; void SPI_WRITE(char A) char BUF; BUF=A; /显示代码 SSPBUF=BUF; /送出数据 while(BF=0); /等待数据接受完毕 BUF=SSPBUF;void DISP_TWO(char *A) char m; m=LED_CODE*A; /显示代码 SPI_WRITE(m); /先发个位 +A; if(*A=0) /如果十位为零,消隐掉。 m=0xff; else m=LED_CODE*A; SPI_WRITE(m); /发十位实验四:A/D+LCD显示实验(PROTUES+硬件烧写)程序参考例4.6,AN0(见电路板图,RA0引脚,P11短接)外接一个滑动变阻器,RD0-RD7为LCD的信号端口(P22、P38短路帽短接)要求调节滑动变阻器两端的电压值,将结果在LCD上显示,显示结果为:“AN0 U=XX.XV”。#include _CONFIG(0x3FF1);_CONFIG(0x3FFF);#define RS_LCD RD4#define RW_LCD RD5#define E_LCD RD6#define COM 0#define DAT 1void AD_Init(void);unsigned int AD_SUB(char k);void LCD_Init(void);void LCD_WRITE_4(char a,char flag);void LCD_WRITE(char a,char flag);void LCD_BUSY(void);char LCD_READ(void);void DELAY(unsigned int n);void DELAY_US(char n);void DISP_C(char line);char dd13=AN0 U=XX.XV;void main(void)unsigned int x;char x3,x2,x1,x0;AD_Init();LCD_Init();while(1)x3=0,x2=0,x1=0;x=AD_SUB(0);x=5*10*x/1023; /仅适用于5V电压while(x=100)x3+;x-=100;while(x=10)x2+;x-=10;x1+=x;dd7=x3;dd8=x2;dd10=x1;DISP_C(0x82);DELAY(100);void AD_Init(void)TRISA0=1;ANS0=1;ADCON1=0b10000000;unsigned int AD_SUB(char k)char i;unsigned int s;ADCON0=0b01000001;ADCON0|=(k2);for(i=1;i5;i+)NOP();GODONE=1;while(GODONE=1);ADIF=0;s=(ADRESH4;LCD_WRITE_4(a2,flag);a2=a&0x0F;LCD_WRITE_4(a2,flag);DELAY_US(10);void LCD_BUSY(void)char a;while(1)a=LCD_READ();if(a&0x80)=0)break;char LCD_READ(void)char a=0;RS_LCD=COM;NOP();RW_LCD=1;NOP();E_LCD=1;NOP();a=PORTD4;E_LCD=0;NOP();E_LCD=1;NOP();a|=(PORTD&0x0F);E_LCD=0;NOP(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容考试题及答案
- 中级财务会计I知到智慧树答案
- 中西语言与文化知到智慧树答案
- 道路运输企业主要负责人和安全生产管理人员安全考核考试题(含答案)
- 大数据HCIA模拟练习题(附答案)
- 2025年高标准仓储场地租赁合同参考范本
- 2025版互联网金融服务合作增补协议
- 2025年沉井基础施工劳务分包合同模板
- 2025版电商平台在线支付技术支持合同书
- 2025场教育机构课程推广合作协议书
- 2024年中考物理压轴题专项训练:电磁继电器核心综合练(原卷版)
- 矿山事故应急报告制度
- 2024-2025学年山东省淄博市桓台县四年级上学期数学期中考试试题
- 《公路建设项目文件管理规程》
- 《实践论》(原文)毛泽东
- 佳能-600EX-相机说明书
- ISO27001信息安全管理体系培训资料
- DB34T 3678-2020 内河航道疏浚工程施工技术规程
- 《绝对值》教学课件
- 制造业智能化生产线改造方案提升生产效率
- 人教版五年级上册美术全册教学设计
评论
0/150
提交评论