搜索
bottom↓
回复: 11

(原创)NTC热敏电阻结合1621液晶测温系统程序

[复制链接]

出0入0汤圆

发表于 2010-1-11 20:54:07 | 显示全部楼层 |阅读模式
刚刚接触NEC不久,希望和大家共同学习,共同提高,我的QQ:386132185,希望能和更多的网友认识,加我的朋友请标明是学习单片机的。谢谢



(原文件名: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);
  }
}

出0入0汤圆

发表于 2010-1-12 17:21:04 | 显示全部楼层
回复【楼主位】fhl2397
-----------------------------------------------------------------------

抢个沙发!

出0入0汤圆

发表于 2010-1-13 17:46:03 | 显示全部楼层
回复【楼主位】fhl2397
-----------------------------------------------------------------------
非常感谢楼主提供了很好的学习资料!

出0入0汤圆

发表于 2011-4-11 16:46:58 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-4-27 19:41:20 | 显示全部楼层
自己顶一下

出0入0汤圆

发表于 2011-4-28 16:48:50 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-6-3 12:35:42 | 显示全部楼层
xuexiyixiale

出0入0汤圆

发表于 2013-7-24 17:12:45 | 显示全部楼层
很好 谢谢楼主分享

出0入0汤圆

发表于 2014-1-2 11:25:00 | 显示全部楼层
学习学习!

出0入0汤圆

发表于 2014-2-23 15:55:29 | 显示全部楼层
楼主,这是什么一个原理,可以详解吗,

出0入0汤圆

发表于 2014-2-23 15:56:13 | 显示全部楼层
好想是一条公式就解决了,不是查表

出0入0汤圆

发表于 2015-12-9 15:11:50 | 显示全部楼层
直接采集AD转换进行计算的

a=(3783018-5000*adaver)/475;//除取整,包含十位,个位,十分位,百分位


楼主3783018、475是什么数值呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 05:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表