实验一: 一、实验目的: 1、学会使用Keil、Proteus仿真软件; 2、掌握P口的输入、输出工作方式,学会C51编程与调试方法; 3、掌握发光二极管的控制方法。
二、实验内容: 如图1所示,要求采用软件延时、查表方法控制指示灯,指示灯的花样至少4个以上;
三、实验步骤:
1、在Keil软件下输入源程序,然后编译生成HEX文件; (放调试好的程序,希望有注释) - #include<reg51.h>
- #include<intrins.h>
- Unsignchar led[] =
- {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff };/*LED字模*/
- unsigned int count = 0;/*流水花样序号*/
- unsigned int speed=20000;/*流水灯初速度*/
- void delay(unsigned inttime){ /*不可变延时函数*/
- unsigned char c=250;
- for( ;time>0;time--)
- for( ;c>0;c--);
- }
- void key1() interrupt 0using 1/*K0中断*/
- {
- EX0 = 0;
- count++;
- if (count == 4) { count = 0; }
- EX0 = 1;
- }
- void key2() interrupt 2 using2/*K1中断*/
- {
- speed = speed - 10000;
- if (speed <= 0) {
- speed = 20000;
- }
- delay(3500);
- }
- void main() {
- int i;
- unsigned char Num = 0xff;
- IT0 = 1; /*脉冲触发方式*/
- IT1 = 1;
- EX0 = 1; /*开中断*/
- EX1 = 1;
- EA = 1;
- while (1) {
- if (count == 0) { /*花样1*/
- for (i = 0; i<= 8;i++){ P0 = 0xff;delay(speed); P0 = 0x00;delay(speed);}
- }
- else if (count == 1) { /*花样2*/
- for (i = 8;i >= 0;i--) { P0 = led[i ];delay(speed); }
- }
- else if (count == 2) { /*花样3*/
- P0 = Num;delay(speed);Num--;
- }
- else if (count == 3) {/*花样4*/
- for( i = 0;i < 8;i++) { P0 = led[ i];delay(speed); }
- }
- }
- }
复制代码
2、在Proteus软件下画出电路图,然后装载HEX文件运行,反复调试直到看到结果。
(放运行下的图)
四、实验心得:这是我第一次接触单片机实验,觉得很有趣,在这个过程中也学到了不少东西。学会了使用proteus和keil两个软件,学会基本的画图,知道画图中也有许多细节的部分,例如如何划斜线,这些画图就像女孩子绣花一个道理,要追求美观,简短。怎样才可以低成本的画出来等等,都是一个细心活。再有就是写编程,一开始我就是一个菜鸟,什么都不会,幸亏开始接触的不是很难,要不然就要崩溃了。想学好编程,第一步就是要看懂别人怎么写,为什么要这样写。然后自己跟着那思路画一次,接下来就是自己学会创造,怎么写更加简单明了 |