|
刚刚接触NEC不久,希望和大家共同学习,共同提高,我的QQ:386132185,希望能和更多的网友认识,加我的朋友请标明是学习单片机的。谢谢
![](http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_525028.jpg)
(原文件名:000.jpg)
#include<io78f9234.h>
#include<intrinsics.h>
//#include<migration.h>
#pragma location = 0X0080
__root const unsigned char XUAN=0X98;//选项字节,设置实用外部高速时钟电路
#define _NOP __no_operation()
#define uchar unsigned char
#define uint unsigned int
#define clrwdt() WDTM=0x77//屏蔽看门狗
#define BIAS 0X52//LCD1/2偏压,4个COM端_在改程序中命令标志为3为:100,命令代码末尾任意
#define SYSDIS 0X00//关闭系统振荡器和LCD偏压发生器
#define SYSEN 0X02//打开系统振荡器
#define LCDOFF 0X04//关闭LCD偏压发生器
#define LCDON 0X06//开启LCD偏压发生器
#define XTAL 0X28//外部时钟源
#define RC256 0X30//片内RC振荡器
#define TONEON 0X12//打开声音输出
#define TONEOFF 0X10//关闭声音输出
#define WDTDIS 0X0a//看门狗溢出标志输出失效
#define WDTEN 0X0c//看门狗溢出标志有效
#define NORMAL 0Xc6//普通模式
#define dat P12_bit.no0//数据引脚
#define cs P13_bit.no0//片选引脚
#define wr P4_bit.no5//写信号引脚
__saddr uchar i;
__saddr uint adbuff[4];
__saddr unsigned long adsum,adaver;
__saddr uint shifen,ge,shi,a;
__saddr uchar disbuff[10]={0xFA,0x60,0xD6,0xF4,0x6C,0xBC,0xBE,0xE0,0xFE,0xFC};//显示缓存,数据,每个地址发两次,从高到低,每次发送4位,用于显示个位数字
//延时,毫秒级
void delayms(uint ms)//准确延时1ms,当ms=1时
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<460;j++);
}
//发送数据函数,高位在前发送,用于传送格式代码和地址
void wrhdata(uchar data,uchar cnt)
{
uchar i;
for(i=0;i<cnt;i++)
{
if((data&0x80)==0)
dat=0;
else dat=1;
__no_operation();
wr=0;
__no_operation();
__no_operation();
wr=1;
data<<=1;
}
}
//发送数据函数,低位在前发送,用于发送数据
void wrldata(uchar data,uchar cnt)
{
uchar i;
for(i=0;i<cnt;i++)
{
if((data&0x01)==0)
dat=0;
else dat=1;
wr=0;
__no_operation();
wr=1;
data>>=1;
}
}
//发送命令代码函数
void sendcmd(uchar cmd)
{
cs=0;
__no_operation();
wrhdata(0x80,4);
wrhdata(cmd,8);
__no_operation();
cs=1;
}
//发送普通命令代码函数
void sendcmdNORMAL(uchar cmd)
{
cs=0;
__no_operation();
wrhdata(0x90,4);
wrhdata(cmd,8);
__no_operation();
cs=1;
}
//写入数据函数
void senddata(uchar addr,uchar data)
{
cs=0;
__no_operation();
wrhdata(0xa0,3);
wrhdata(addr<<2,6);
wrldata(data,4);
cs=1;
__no_operation();
}
//按地址顺序写数据
void lightobo(uint ms,uchar data)
{
uchar i,addr;
addr=0;
for(i=0;i<32;i++)
{
senddata(addr,data);
delayms(ms);
__no_operation();
__no_operation();
__no_operation();
addr=addr+1;
}
}
/*#pragma vector=INTAD_vect
__interrupt void INTAD_Server(void)
{
ADIF=0;
adbuff=ADCR;
i++;
if(i<20)
{
adsum=adsum+adbuff;
}
else __no_operation(),i=0;
adaver=adsum/(i+1);
ADCS=0;
ADCE=0;
}*/
void main()
{
PCC=0X00;//以下两行为设置cpu时钟为8M
PPCC=0X00;
WDTM=0X77;//屏蔽看门狗
PM4=0X02;//设置P4口位输入、输出状态
//P4=0x00;//设置P4口初值
MK1=0X85;//屏蔽外部中断3
INTM1=0X01;//设定外部中断3上升沿有效
PMK3=0; //允许外部中断3
__enable_interrupt();//开中断
PM12_bit.no0=0;//设定数据位输出口状态
P4_bit.no0=1;//点亮背光板
P0=0X07;//设定p0口状态
PM0=0X07;//设定p00,p01,p02为输入端口
PU0=0X07;//p00,p01,p02使用内部上拉电阻
//P0_bit.no3=0;
sendcmd(RC256);//初始化1621
sendcmd(BIAS);
sendcmd(SYSEN);
sendcmd(LCDON);
sendcmdNORMAL(NORMAL);
P2=0X00;
PMC2=0X01;
PM2=0XF1;
PU2=0X00;
ADM=0X20;
while(1)
{
ADM_bit.no0=1;//ADCE=1;
ADS=0X00;
__no_operation();
__no_operation();
ADM_bit.no7=1;//ADCS=1;
for(i=0;i<4;i++)
{
ADIF=0;
while(!ADIF)
{
__no_operation();
}
adbuff=ADCR;
}
ADM_bit.no7=0;//ADCS=0;
ADM_bit.no0=0;//ADCE=0;
adsum=adbuff[0]+adbuff[1]+adbuff[2]+adbuff[3];
adaver=adsum/4;
a=(3783018-5000*adaver)/475;//除取整,包含十位,个位,十分位,百分位
shi=a/1000;
ge=a%1000/100;
shifen=a%100/10;
senddata(0x12,disbuff[shi]>>4);
senddata(0x13,disbuff[shi]);
senddata(0x10,disbuff[ge]>>4);
senddata(0x11,disbuff[ge]);
senddata(0x0e,disbuff[shifen]>>4);
senddata(0x0f,disbuff[shifen]+1);
delayms(500);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|