?? 8952_cpld.c
字號:
#include <AT89X51.H>
#include <math.h>
#include <intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar reg[100];
/************************************************************
LCD引腳與變量定義
*************************************************************/
#define RS P1_5
#define RW P1_6
#define E P1_7
#define flag P1_2
#define RD XBYTE[0xff5f] //讀操作
#define WR XBYTE[0xff7f] //寫操作
uchar com,dat; //全局變量寫控制字和數據
/************************************************************
LCD函數函數聲明
*************************************************************/
void delay50us(uchar time);
void initialization(void);
void chk_busy(void);
void writecom(uchar com);
void writedat(uchar dat);
void initi_chinese(void);
void Char_Set_XY(uchar x, uchar y, uchar *p);
void Delay(uint ms);
/************************************************************
主函數
*************************************************************/
void main(void)
{
uchar d1,d2;
uint d3;
unsigned long dat;
initi_chinese();
Delay(2000);
Char_Set_XY(0,0,"讀取數據為:");
writecom(0x01); //寫指令:清除顯示
while(flag==0);
d1=RD; //高八位數據
d2=RD; //低二位數據
d3=d1*4+d2; //十位數據
dat=(unsigned long)(d3*50000/1023);
writecom(0x9e); //數據顯示
writedat((dat/10000)+0x30);
writedat(0x2e);
writedat((dat/1000%10)+0x30);
writedat((dat/100%10)+0x30);
writedat((dat/10%10)+0x30);
writedat((dat%10)+0x30);
//while(1); //程序停在此處
}
/*=========================LCD程序區===========================
/************************************************************
延時函數1:延時50us
*************************************************************/
void delay50us(uchar time)
{
uchar i,j;
for(i=0;i<time;i++)
for(j=0;j<10;j++); //50us
}
/*************************************************
延時函數2:延時ms毫秒
*************************************************/
void Delay(uint ms)
{
uint j;
for(; ms>0; ms--)
for(j=100; j>0; j--)
{
_nop_();
_nop_();
}
}
/************************************************************
測忙函數
*************************************************************/
void chk_busy(void)
{
uchar sign;
RS=0;
RW=1;
E=1;
for(;;)
{ P0=0xff; //P1口置高,準備讀數
E=1;
sign=P0; //讀忙信號
E=0; //產生一個下降延
if(sign<0x80) //不忙則跳出循環
break;
}
E=0;
}
/************************************************************
寫控制字
*************************************************************/
void writecom(uchar com)
{
chk_busy();
RS=0;
RW=0; //寫數據
P0=com;
E=1;
E=0;
}
/************************************************************
寫數據與地址
*************************************************************/
void writedat(uchar dat)
{
chk_busy();
RS=1;
RW=0; //寫數據
P0=dat;
E=1;
E=0;
}
/************************************************************
初始化寫漢字程序
*************************************************************/
void initi_chinese(void)
{
writecom(0x30); //寫指令:功能設置 8位數據,基本指令
writecom(0x0c); //寫指令:顯示狀態 ON,游標OFF,反白OFF
writecom(0x01); //寫指令:清除顯示
writecom(0x02); //寫指令:地址歸位
writecom(0x80); //寫指令:設置DDRAM地址
delay50us(200); //10ms
}
/*************************************************
置x,y坐標函數___寫漢字
*************************************************/
void Char_Set_XY(uchar x, uchar y, uchar *p)
{
if(y == 0)
writecom((0x80+x));
if(y == 1)
writecom((0x90+x));
if(y == 2)
writecom((0x88+x));
if(y == 3)
writecom((0x98+x));
while(*p != 0)
writedat(*p++);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -