资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
1单片机实验报告单片机实验报告姓名: 学号:一、一、 实验实现功能:实验实现功能:1:计数器功能 2:流水灯二、具体操作:具体操作:1、计数器功能计数器功能数码管的动态显示。每按一次 K2 键计数器加 1 通过数码管显示出来,计数 器可以实现从 0 计数到 9999。 2、流水灯流水灯当在计数器模式下的时候按下 K3 键时程序进入跑马灯模式,8 个小灯轮流 点亮每次只点亮一个,间隔时间为 50ms。三、三、 程序流程图程序流程图发送给 PC开始定时器 T0设置初值,启动定时器, 打开中断复位Key2 按下中断关闭计数器模式计数器加 1Key3 按下流水灯模式数码管显示 数字加 1跑马灯点亮 间隔 50msKey1 按下数码管显示 按下中断打开2四、四、 程序程序#include typedef unsigned char uint8; typedef unsigned int uint16; /类型定义 sbit P2_1 = P21; sbit P2_2 = P22; sbit P2_3 = P23; sbit P2_4 = P24; /位声明四个数码管开关 sbit Key2 = P32; sbit Key3 = P33; /位声明 2 个按键 K2 和 K3 sbit Ledk = P20 ; /LED 开关 void delay(uint16 i); /延时函数声明 void refresh (); / 数码管刷新函数声明 void liushuideng(); /流水灯函数声明 uint8 number = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /数码管的真值表 uint8 out4 = 0; / 数组变量 uint16 counter=0; /用作计数器的变量 uint16 Time_counter=0; /用作定时器的变量void main() /主函数 TMOD = 0x01; /定时器 0,工作方式一 TH0 = 0xFC; TL0 = 0x18; /定时器初值使每次循环为 1ms TR0 = 0; /定时器 0 开始作 ET0 = 0; / 定时器中断关EA = 0; / 关中断 while(1) /计数器模式 Ledk =1 ; /led 开关关 out0=numbercounter%10; /取个位 out1=numbercounter%100/10; /十位 out2=numbercounter%1000/100; /百位 out3=numbercounter/1000; /千位 if (!Key2) /计数器加 1 +counter; /自加out0=numbercounter%10; /取个位out1=numbercounter%100/10; /十位out2=numbercounter%1000/100; /百位out3=numbercounter/1000; /千位3while(!Key2) /等待键盘抬起refresh(); /刷新数码管 refresh(); /刷新数码管 if (!Key3) / 进入跑马灯模式 liushuideng(); /主函数结束/*延时*/ void delay(uint16 i) uint8 j; / 定义局部变量for(i;i0;i-) /循环 i*240 次 for(j=240;j0;j-); /*数码管刷新*/ void refresh () uint8 j; for (j=0;j4;j+) /四次循环刷新数码管 switch(j) case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break; case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break; case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break; case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break; /每次循环只选中一个数码管default:break; P0 = outj; / 位选,给数码管送值 delay (20); /延时消抖 /*定时器的中断服务函数*/ void Timer0_Overflow() interrupt 1 /定时器 0 溢出中断,这个语句 1ms 执行一 次 TH0 = 0xFC; TL0 = 0x18; /每 1ms 重新赋定时器初值 Time_counter+; /计数,看经过了几个 1ms4 /*流水灯子函数*/ void liushuideng() uint8 j = 0 ;/定义局部变量P0 = 0xff; / 小灯全关TR0 = 1; /定时器 1 开始计时EA = 1;/中断开放ET0 = 1; /定时器 0 中断开while(1)Ledk = 0 ; /打开 LED 开关P2 = P2|0x1E; /关掉数码管if(50 = Time_counter) /50 个毫秒P0=(1j+); /控制小灯 Time_counter = 0; /清零开始下一次循环定时 if (8=j) /移完 8 次再重新移 j=0;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号