- /*
- 6灯迷你摇摇棒 闪字棒制作 采用片内Eeprom切换图像 每次上电会有不同图像产生。
- P3.0~P3.5分别连接6个LED 电阻 与VCC即可,片内存储有10组图像,采用片内Eeprom切换图像,每次上电会有不同图像产生。
- 电阻根据供电电压决定,可以不接,最好接上。
- */
- #include<reg52.h>
- #define uchar unsigned char
- #define EN_EPROM 0x83; //使能EEPROM
- #define S_MODE 0x00; //待机模式
- #define R_MODE 0x01; //读模式
- #define W_MODE 0x02; //写模式
- #define F_MODE 0x03; //擦除模式
- sfr IAP_DATA = 0xC2;
- sfr IAP_ADDRH = 0xC3;
- sfr IAP_ADDRL = 0xC4;
- sfr IAP_CMD = 0xC5;
- sfr IAP_TRIG = 0xC6;
- sfr IAP_CONTR = 0xC7;
- void init();
- uchar num=0,m=0;
- uchar read_dat(uchar addr_h,uchar addr_l);
- void erase_dat(uchar addr_h,uchar addr_l);
- void write_dat(uchar addr_h,uchar addr_l,uchar w_dat);
- unsigned char code tab[10][32]={
- {
- 0xe7,0xc3,0xc1,0xe0,0xc1,0xc3,0xe7,0xff,
- 0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
- 0xc3,0xe7,0xff,0xff,0xff,0xff,0xe7,0xc3,
- 0xc1,0xe0,0xc1,0xc3,0xe7,0xff,0xff,0xff //心
- },
- {
- 0xff,0xff,0xde,0xc0,0xde,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
- 0xc3,0xe7,0xff,0xff,0xff,0xff,0xff,0xc1,
- 0xfe,0xfe,0xfe,0xfe,0xc1,0xff,0xff,0xff //I LOVE U
- },
- {
- 0xde,0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,
- 0xff,0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,
- 0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xde,
- 0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,0xff //xxx
- },
- {
- 0xfb,0xfd,0xd6,0xe8,0xd6,0xfd,0xfb,0xff,
- 0xff,0xff,0xff,0xfb,0xfd,0xd6,0xe8,0xd6,
- 0xfd,0xfb,0xff,0xff,0xff,0xff,0xfb,0xfd,
- 0xd6,0xe8,0xd6,0xfd,0xfb,0xff,0xff,0xff //花
- },
- {
- 0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
- 0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
- 0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
- 0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5 //格子
- },
-
- {
- 0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
- 0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
- 0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
- 0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff //伪格子
- },
-
- {
- 0xf0,0xed,0xdd,0xed,0xf0,0xff,0xff,0xdf,
- 0xdf,0xc0,0xdf,0xdf,0xff,0xff,0xc1,0xfe,
- 0xfe,0xfe,0xc1,0xff,0xff,0xc1,0xfe,0xf1,
- 0xfe,0xc1,0xff,0xff,0xe1,0xde,0xde,0xe1 //ATUWO
- },
-
- {
- 0xc0,0xfb,0xfb,0xfb,0xc0,0xff,0xff,0xff,
- 0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,0xde,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xf7,
- 0xf8,0xf7,0xcf,0xff,0xff,0xff,0xff,0xff //HXY
- },
-
- {
- 0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
- 0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff,
- 0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
- 0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff
- },
-
- {
- 0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,
- 0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
- 0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,
- 0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff
- },
- };
- void delay(uchar xms)
- {
- char i,j;
- for(i=0;i<xms;i++)
- for(j=0;j<50;j++);
- }
- void main()
- {
- init();
- num=read_dat(0x00,0x01);
- ++num;
- if(num>=11)
- {
- num=1;
- };
- erase_dat(0x00,0x01);
- write_dat(0x00,0x01,num);
- while(1)
- {
- uchar i=0;
-
- for(i=0;i<32;i++)
- {
- P3=tab[num-1][i];
- delay(100);
- }
- }
- }
- void init()
- {
- IAP_CONTR = EN_EPROM; //把第7位置1允许EEPROM可以读写
- IAP_CMD = S_MODE; //待机模式无ISP操作
- IAP_ADDRH = 0x00;
- IAP_ADDRL = 0x00;
- }
- uchar read_dat(uchar addr_h,uchar addr_l)
- {
- uchar E_dat = 0x00;
- IAP_CMD = R_MODE; //模式选择为读EEPROM
- IAP_ADDRH = addr_h;
- IAP_ADDRL = addr_l;
- IAP_TRIG = 0x5A; //使命令有效
- IAP_TRIG = 0xA5; //使命令有效
- E_dat = IAP_DATA;
- return E_dat;
- }
- void write_dat(uchar addr_h,uchar addr_l,uchar w_dat)
- {
- IAP_CMD = W_MODE; //模式选择为写EEPROM
- IAP_ADDRH = addr_h;
- IAP_ADDRL = addr_l;
- IAP_DATA = w_dat;
- IAP_TRIG = 0x5A; //使命令有效
- IAP_TRIG = 0xA5; //使命令有效
- }
- void erase_dat(uchar addr_h,uchar addr_l)
- {
- IAP_CMD = F_MODE; //模式选择为擦除EEPROM
- IAP_ADDRH = addr_h;
- IAP_ADDRL = addr_l;
- IAP_TRIG = 0x5A; //使命令有效
- IAP_TRIG = 0xA5; //使命令有效
- }
复制代码
|