实验原理相对简单,主要是通过编程控制P1口输出8位二进制数中0的数量和移动(高电平灯熄灭,低电平灯亮),每次数据主要从P1口输出后需要保持一段时间,即软件延迟,否则无法看到发光二极管的移动效果,延迟时间超过人眼视觉暂留效应,一般延迟数百毫秒。
#include <reg51.h> //包含头文件reg51.h,定义单片机特殊功能寄存器和特殊标志位置 #include <intrins.h> //包含头文件intrins.h,定义各种循环移位函数等 #define uchar unsigned char ///宏定义无符号字符型 #define uint unsigned int ///宏定义无符号整形 uchar code tab[]={0xe7,0xdb,0xbd,0x7e,0x7e,0xbd,0xdb,0xe7}; //定义数组并存储在程序存储区 void delay(void) ///延迟子函数约500ms { int i,j; for(i=0;i<500;i ) for(j=0;j<62;j ); } void main (void) { uchar shuju,count; while (1) //无限循环 { shuju = 0xfe; for(count=0;count<8;count ) //1发光二极管从左到右循环点亮 { P1 = shuju; delay(); shuju = _crol_(shuju,1); //8位数据循环左移1位 } shuju = 0x7f