1、单片机实验四一、 实验题目:当K1键按下后,首先使蜂鸣器响一声,然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。二、 keil代码:/*当K1键按下后,首先使蜂鸣器响一声,然后使LED1- LED8完成3种闪亮的花样(自己定义),每一种花样循环 3次,然后周而复始。*/#includesbit P2_0=P20;/接蜂鸣器sbit P2_7=P27;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit
2、P1_7=P17; void DELAY(int time)/延时 while(time-) void BUZ_ON() if(P2_7=0) P2_0=1; else P2_0=0; void F1(void) int i;char data_group_mide5=0x00,0x18,0x24,0x42,0x81;/向两边延伸for(i=0;i5;i+) P1=data_group_midei; DELAY(20000); P1=0x00; void F2(void) int i; char data_group_left8=0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x
3、01,0x00;/向左延伸for(i=0;i8;i+)P1=data_group_lefti;DELAY(20000); P1=0x00; void F3(void) int i;char date_group_right8=0x00,0x01,0x03,0x07,0x0f,0x3f,0x7f,0xff;/向右延伸for(i=0;i8;i+) P1=date_group_righti;DELAY(20000); P1=0x00; void main() unsigned int i; /每种花样循环三次 P2_0=0; P2_7=1; BUZ_ON(); P1=0x00; while(P2_7
4、=0) for(i=0;i3;i+)/花样1 F1(); for(i=0;i3;i+)/花样2 F2(); for(i=0;i3;i+)/花样3 F3(); 三、protues电路图:四、实验截图:5、实验小结:通过本次实验,我们熟悉了protues的编译环境,对以后的单片机学习有很大帮助。 实验五1、实验题目:程序启动后4位LED显示器滚动显示“-”,每按下1次K1键后,首先使蜂鸣器响一声。然后,依次使LED滚动显示CNT的计数值(0-9)。2、Keil代码:/*程序启动后4位LED显示器滚动显示“-”,每按下才1次K1键后,首先使蜂鸣器响一声。然后,依次使LED滚动显示CNT的计数值(0-
5、9)。1、按键K1采用中断来管理。(INT0采用边沿触发)2、中断服务程序完成四个功能: 1)消除按键K1抖动。 2)CNT计数。 3)查表将计数值转换成LED显示器的段代码。 4)将段代码分别放入4个显示缓冲单元。*/#include#define uchar unsigned char#define uint unsigned intsbit P2_7=P27;sbit P3_3=P33;uchar CORDING=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,; /0,1,2,3,4.9,0,1,2的段码
6、int delayms(uint t) uint n;while(-t)n=200;while(-n);return 0;int main() uint CNT=0; P2_7=0; P3_3=1; P1=0xF7; while(1) if(P3_3=0) uint i; CNT+; P2_7=1; delayms(100); for(i=1;i10) CNT=CNT-10; P2_7=0; return 0; 3、protues电路图:4、实验截图:5、实验总结:通过本次实验,我们熟悉了CNT计数,学会了如何使LED灯上显示0-9数字。 实验六1、实验题目:两个数码管,K1,K2两个按键,完
7、成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,重新计数。 二、keil代码:/*两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,重新计数。按键K1,K2采用中断来管理。(INT0采用边沿触发)*/#define uchar unsigned char#define uint unsigned int#includeuchar CNT=0;uchar m=0;sbit P3_7=P37;sbit P3_2=P32;sbit P0_0=P00;uchar CORDING=0x3F,0x06,0x5B,0
8、x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /0,1,2,3,4.9的段码void Delay(uint a) while(-a); void intproc() interrupt 0 TR0=0;void Time0() interrupt 1 m+; /中断一次,m加1 if(m=20) m=0; /中断次数清零 CNT+; /秒加1 if(CNT=60) CNT=0; P1=CORDINGCNT/10;/显示十位 Delay(10); P2=CORDINGCNT%10;/显示个位 Delay(10); void init() TMOD=0x01; /使用定时器
9、T0 使用方式1 TH0 = 0x3c; TL0 = 0xb0; /50ms中断一次 ET0=1; TR0=1; EX0=1; IT0=1; EA=1; void main() P1=0x3f; P2=0x3f; P3_7=1; while(1) if(P3_7=0) /控制是否开启 init(); 3、protues电路图:四、实验截图:5、实验总结:本次实验,我们用到了中断,按键K1,K2采用中断来管理。(INT0采用边沿触发),通过本次实验加强了中断的学习,更加有利于单片机的学习。 实验七一、实验题目:晶振12MHz,波特率1200,程序启动后单片机主动发出Hello Server,PC
10、使用串口助手应答单片机,单片机收到数据后,不做任何修改返回PC。二、keil代码:#include#define uchar unsigned char #define uint unsigned intuchar code table=HELLO SERVER!;uint flag = 0;uchar a,b;void init() TMOD = 0x20; TH1 = 0xFD; TL1 = 0XFD; SCON = 0X50; TR1 = 1; EA = 1; ES = 1;void SendByte(uchar ch) SBUF = ch; while(!TI); TI = 0;voi
11、d SendString(uchar code *str) while(*str) SendByte(*str+);void main() init(); SendString(HELLO SERVER!); while(1) if(flag = 1) ES = 0; SBUF = a; while(!TI); TI = 0; ES = 1; flag = 0; void ser() interrupt 4 if(RI = 1) RI = 0; a = SBUF; flag = 1; 三、protues电路图:四、实验截图:五6、实验总结:本次实验,我们利用了中断来实现,通过本次实验我们对中断有了更加深刻的了解,让我们在以后的为以后的学习之中打下了一定的基础。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1