本实验是利用数码管来显示一个不断累加的两位数,其效果如图4-5所示:
图4-5 数码管的显示实验
在这个实验中,数码管的读数是经过IIC总线,从型号为24C02C的EPROM中读取出来的,该数字每累加一次,也会把累加后的数值保存到24C02C中,当单片机复位或断电时,该数值就不会丢失,当复位后或再上电时,数码管就能显示刚才的读数并在此基础上继续累加下去。
为了证明单片机的复位电路正常,该实验中还设置了流水灯,这是一个8位LED灯轮流点亮的装置,当复位按键被按下后,流水灯就被复位,它会从第一盏灯亮起,但数码管的读数不受影响。流水灯的效果如图4-6所示:
图4-6 流水灯实验
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2^6;
sbit wela = P2^7;
uchar temp,aa,shi,ge,i,t = 0xfe;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
extern uchar read_add(uchar device,uchar address);
extern void write_add(uchar device,uchar address,uchar date);
void delay(uint i,uint j) //delay(1,82)为1.01779ms
{
uint x,y; //delay(x,0):15.19,39.07,62.94,86.9,110.68,134.55,158.42,182.29,206.17,230.04,253.91(x取0 ~ 10)us
for(x = i;x > 0;x --)
for(y = j;y > 0;y --); //执行此句约需24us,24x + 14 = delay(x,0)的延时时间