- // LCM DMA中断服务程序
- void DMA_LCM_ISR(void) interrupt DMA_LCM_VECTOR
- {
- if(DMA_LCM_STA & 0x01) //判断LCM DMA中断
- {
- DMA_LCM_STA &= 0xfe; //清除LCM DMA中断标志
-
- LED_EN=1; //关显示
-
- P7=(P7&0xF0)|LCM_ROW; //写行号
- _nop_();
-
- LED_STB=1; //锁存
- _nop_();
- LED_STB=0;
-
- LED_EN=0; //开显示
-
- LCM_ROW = ++LCM_ROW % SCAN_ROWS; //8分之1扫
-
- if(LCM_ROW>=SCAN_ROWS2){ //后4行内存定在hdata中,这样可以超64K限制
- DMA_LCM_TXAH = (U8)(((U32)(Led_Buf2+SCAN_SIZE*(LCM_ROW-SCAN_ROWS2)))>>8);
- DMA_LCM_TXAL = (U8)(Led_Buf2+SCAN_SIZE*(LCM_ROW-SCAN_ROWS2));
- DMA_ARB_CFG |= 0x20;//hdata内存区间
- }else{ //前4行的内存定在xdata中
- DMA_LCM_TXAH = (U8)(((U32)(Led_Buf+SCAN_SIZE*LCM_ROW))>>8);
- DMA_LCM_TXAL = (U8)(Led_Buf+SCAN_SIZE*LCM_ROW);
- DMA_ARB_CFG &= 0xdf;//xdata内存区间
- }
-
- DMA_LCM_CR |= 0x20;//启动DMA发送数据
- }
- }
复制代码
你说我的刷新率不达标,但我的代码已经极简了,刷新率不高我也没办法,现在是不停的发送,我用的是8位数据送出的,P25,P26,P44这3个端口是不用能的。。。 |