📄 led.c
字号:
//该程序实现2407的led显示
// RS BIT PA.0 ;控制线定义
// RW BIT PA.1
// E BIT PA.2
// CS1 BIT PA.3
// CS2 BIT PA.4
// BUSY BIT PA.5
// INT BIT PA.6
// RST BIT PA.7
// 数据线PB
#include "lf2407regs.h"
//禁止总中断子程序
void inline disable()
{
asm(" setc INTM");
asm(" setc SXM");
asm(" CLRC OVM");
asm(" CLRC CNF");
}
//使能总中断子程序
void inline enable()
{
asm(" clrc INTM");
}
void sys_initial()
{
*IFR=0xFFFF; // 清除中断标志
*SCSR1=0x87FE; //CLKIN=15M,CLKOUT=15M
*WDCR=0xE8; //不使能看门狗
*IMR=0X00;
*MCRA=*MCRA&0X0; //PA,PB配置为基本IO方式
*MCRB=*MCRB&0X0; //pc配置为基本IO方式
*PADATDIR=(*PADATDIR&0X0060)|0X9F9B;//BUSY,INT,输入RS,RW,E输出高电平
//延时程序
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
// asm(" NOP");
//*PADATDIR=(*PADATDIR|0X0080);//RST置为高电平
*PBDATDIR=(*PBDATDIR|0X0FF00);
// *PCDATDIR=(*PCDATDIR&0X0FEFF);
}
void testbusy()
{
int i=0;
while(1)
{
i=(*PADATDIR)&0X0020;
if(i==0x0) break;
}
}
void wractrl(int res,int data)
{
testbusy();
*PBDATDIR=(*PBDATDIR&0X0FF00)|res;
*PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rs
//NOP
//NOP
asm(" NOP");
*PADATDIR=*PADATDIR|0X4;//set e
//NOP
//NOP
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
*PADATDIR=*PADATDIR&0X0FFFB;//clr e
//NOP
asm(" NOP");
*PADATDIR=*PADATDIR|0X2; //set rw
//lcall delay
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
testbusy();
*PBDATDIR=(*PBDATDIR&0X0FF00)|data;
*PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rs
//nop
asm(" NOP");
// asm(" NOP");
*PADATDIR=*PADATDIR|0X4;//set e
//nop
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
*PADATDIR=*PADATDIR&0X0FFFB;//clr e
//nop
asm(" NOP");
*PADATDIR=*PADATDIR|0X2; //set rw
asm(" NOP");
}
void wradata(int radata)
{
testbusy();
*PADATDIR=(*PADATDIR&0X0FFFB);
*PBDATDIR=(*PBDATDIR&0X0FF00)|radata;
*PADATDIR=(*PADATDIR&0X0FFF0);
//NOP
asm(" NOP");
*PADATDIR=*PADATDIR|0X4;//set e
//NOP
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
*PADATDIR=*PADATDIR&0X0FFFB;//clr e
asm(" NOP");
}
void clrram()
{
int i;
int j;
wractrl(0x00,0x0cd);
wractrl(0x18,0x0f0);
wractrl(0x20,0x27);
wractrl(0x30,0x0ef);
wractrl(0x40,0x00);
wractrl(0x50,0x00);
wractrl(0x60,0x00);
wractrl(0x70,0x00);
for(i=1;i<=15;i++)
for(j=1;j<=20;j++)
{
wradata(0x0a0);
wradata(0x0a1);
}
}
hanzixianshi()
{
// wractrl(0x00,0x0cd);
// wractrl(0x60,0x10);
// wractrl(0x70,0x40);
// wractrl(0x18,0x0f2);
wractrl(0x60,0x00);
wractrl(0x70,0x00);
wradata(0X0C7);
wradata(0X0E0);
wradata(0X0D4);
wradata(0X0C6);
}
void led_initial()
{
wractrl(0x00,0x0cd);
wractrl(0x08,0x073);
wractrl(0x10,0x2f);
wractrl(0x18,0x20);
wractrl(0x20,0x27);
wractrl(0x30,0x0ef);
wractrl(0x40,0x00);
wractrl(0x50,0x00);
wractrl(0x28,0x27);
wractrl(0x38,0x0ef);
wractrl(0x48,0x00);
wractrl(0x58,0x00);
wractrl(0x60,0x00);
wractrl(0x70,0x00);
wractrl(0x90,0x0A);///???????????????????????????????????????????/
wractrl(0x0b0,0x27);
wractrl(0x0b8,0x0ef);
wractrl(0x0a0,0x08);
wractrl(0x0c0,0x0f0);
wractrl(0x0d0,0x30);
wractrl(0x0e0,0x00);
wractrl(0x0f0,0x0a0);
clrram();
hanzixianshi();
//清屏
//汉字显示
//延时
//延时
//清屏
// 返回
}
int rdacirl(int resNO) //读寄存器
{
int savedata;
savedata=0;
testbusy();
*PBDATDIR=(*PBDATDIR&0X0FFFB);
*PBDATDIR=(*PBDATDIR&0X0FF00)|resNO;
*PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rt
//NOP
//NOP
asm(" NOP");
*PADATDIR=*PADATDIR|0X4;//set e
//NOP
//NOP
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
*PADATDIR=*PADATDIR&0X0FFFB;//clr e
//NOP
asm(" NOP");
*PADATDIR=*PADATDIR|0X2; //set rw
//lcall delay
testbusy();
*PBDATDIR=(*PBDATDIR&0X00FF);//PB口配置为输入
*PADATDIR=(*PADATDIR&0X0FFF3)|0X03;//clr e,set rw,set rs
//nop
asm(" NOP");
*PADATDIR=*PADATDIR|0X4;//set e
//nop
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
savedata=*PBDATDIR;
// *PCDATDIR=(*PCDATDIR|0XFF00)&0XFF00;
// *PCDATDIR=*PCDATDIR|savedata;
*PADATDIR=*PADATDIR&0X0FFFB;//clr e
//nop
asm(" NOP");
*PADATDIR=*PADATDIR|0X2;
*PBDATDIR=*PBDATDIR|0X0FF00; //set rw,PB输出口
asm(" NOP");
return savedata;
}
main( )
{
int data[100];
disable();
sys_initial();
// led_initial();
wractrl(0x00,0x0cd);//0
wractrl(0x08,0x073);//1
wractrl(0x10,0x02f);//2 81
wractrl(0x18,0x20);//3 83
wractrl(0x20,0x27);//4 88
wractrl(0x30,0x0ef);//5 A7
wractrl(0x40,0x00);//6 F0
wractrl(0x50,0x00);//7 B0
wractrl(0x28,0x27);//8 A7
wractrl(0x38,0x0ef);//9 EF
wractrl(0x48,0x00);//10 80
wractrl(0x58,0x00);//11 80
wractrl(0x60,0x00);//12 80
wractrl(0x70,0x00);//13 A0
wractrl(0x90,0x0a);//14 81
wractrl(0x0b0,0x27);//15 A7
wractrl(0x0b8,0x0ef);//16 EF
wractrl(0x0a0,0x08);//17 88
wractrl(0x0c0,0x0f0);//18 F0
wractrl(0x0d0,0x30);//19 B0
wractrl(0x0e0,0x00);//20 80
wractrl(0x0f0,0x0a0);//21 A0
// led_initial();
//rdacirl(0x00);
data[0]=rdacirl(0x00);
data[1]=rdacirl(0x08);
data[2]=rdacirl(0x10);
data[3]=rdacirl(0x18);
data[4]=rdacirl(0x20);
data[5]=rdacirl(0x30);
data[6]=rdacirl(0x40);
data[7]=rdacirl(0x50);
data[8]=rdacirl(0x28);
data[9]=rdacirl(0x38);
data[10]=rdacirl(0x48);
data[11]=rdacirl(0x58);
data[12]=rdacirl(0x60);
data[13]=rdacirl(0x70);
data[14]=rdacirl(0x90);
data[15]=rdacirl(0x0b0);
data[16]=rdacirl(0x0b8);
data[17]=rdacirl(0x0a0);
data[18]=rdacirl(0x0c0);
data[19]=rdacirl(0x0d0);
data[20]=rdacirl(0x0e0);
data[21]=rdacirl(0x0f0);
clrram();
hanzixianshi();
asm(" nop");
//while(1)
//{
// rdacirl(0x00);
//}
}
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -