历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2019年11月09日 | ATMEGA16L实现时间和温度的循环显示程序分享

2019-11-09 来源:51hei

//ICC-AVR application builder : 2/13 20:52:33

/*******************************************************************************

* 版权:     

*

* 单片机:   ATMAGE16L

* 晶振:     外部8MHz

* 编译器:   ICC 7.22

*

* 文件名:   main.c

* 作者:     木子工作室

* 版本:     1.0

* 完成日期: 

* 功能描述: 在12M晶振下,实现时间和温度的循环显示

*******************************************************************************/

//#include

#include

#include


#define LED0 PORTD

#define LED1 PORTB


#define BEEL_OFF PORTC |= BIT(0);

#define BEEL_ON PORTC &= ~BIT(0);


unsigned char i=0,f=0,n=0,xx=0,fangduan=0,ADC_LL=0,ADC_HH=0;

unsigned int x = 0,t=0,t1=0,s0=0,s1=0,m0=0,m1=0,h0=0,h1=0,s=0,h=8,m=15,mid=0,a=0,g=240,b=180,c,d,e,o=1,p,q,r,T,ADC_H=0;

unsigned char tab[16] = {0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71};//正常字模

unsigned char tab1[10] = {0Xbf,0X86,0Xdb,0Xcf,0Xe6,0Xed,0Xfd,0X87,0Xff,0Xef};//带下小数点字模

unsigned char tab2[2] = {0X61,0X40};//度C,"-"号



unsigned int CBM[130] = {19,33,38,44,56,59,61,63,65,67,69,71,73,76,78,81,83,86,89,92,94,98,101,104,108,111,115,119,123,127,131,135,140,145,149,154,160,165,171,176,182,188,194,200,207,214,220,228,235,243,250,258,267,275,284,293,302,311,321,331,341,351,361,372,382,393,405,416,428,439,451,463,475,487,500,512,525,537,550,562,576,588,601,613,626,638,645,651,657,663,675,688,699,711,723,734,746,757,768,779,789,799,809,818,828,837,846,855,863,871,878,886,893,900,907,913,919,925,931,936,941,946,951,952,959,963,967,970,980,990};

unsigned int CBT[130] = {1190,995,950,900,820,800,790,780,770,760,750,740,730,720,710,700,690,680,670,660,650,640,630,620,610,600,590,580,570,560,550,540,530,519,511,501,490,481,470,460,450,440,430,420,410,400,391,380,371,360,351,341,330,320,310,300,290,281,270,260,250,240,230,220,210,200,190,180,170,160,150,140,130,120,110,100,90,80,70,60,50,40,30,20,10,0,2005,2010,2015,2020,2030,2040,2050,2060,2070,2080,2090,2100,2110,2120,2130,2140,2150,2160,2170,2180,2190,2200,2210,2220,2230,2240,2250,2260,2270,2280,2290,2300,2310,2320,2330,2340,2350,2360,2370,2380,2390,2400,2450,2460};


/******************************************************************************* 

* 函数名称: WDCB()

* 入口参数: 

* 出口参数: 

* 功能描述:  温度查表

*******************************************************************************/

int WDCB() //用int 类型的函数是想让return命令生效!使一旦查到结果就跳出FOR,节省CPU资源。

{

  for(c=0;c<129;c++)

     {

          if(CBM[c]==ADC_H)

            {

                 d=c;

                 T=CBT[d];

                 if(T>2000)

                   {

                    f=1;

                    T=(T-2000)/10;

                         }

                 return ;//使一旦查到结果就跳出FOR,节省CPU资源。

                 }

          if(c<=84 & ADC_H>CBM[c] & ADC_H            {

                 T=CBT[c]-((ADC_H-CBM[c])*((CBT[c]-CBT[c+1])*10/(CBM[c+1]-CBM[c])))/10; //按照CBM[]和CBT[]的区间比例关系折算实际温度,可大幅降低数组容量又不失精确。

                 f=0;  //判断正负温度

                 return ;//用int 类型的函数是想让return命令生效!使一旦查到结果就跳出FOR,节省CPU资源。

                 }

          if(c>=85 & ADC_H>CBM[c] & ADC_H            {

                 T=((CBT[c]+((ADC_H-CBM[c])*((CBT[c+1]-CBT[c])*10/(CBM[c+1]-CBM[c])))/10)-2000)/10; //按照CBM[]和CBT[]的区间比例关系折算实际温度,可大幅降低数组容量又不失精确。

                 f=1;  //判断正负温度

                 return ;//使一旦查到结果就跳出FOR,节省CPU资源。return后面加不加T,好像对返回T值没啥影响。

                 }         

          }


}



/******************************************************************************* 

* 函数名称: Disp_Time()

* 入口参数: 

* 出口参数: 

* 功能描述:  显示时间

*******************************************************************************/

void Disp_Time(void)

        {        

        //BEEL_ON;   

           for(i=0;i<4;i++)

             {


                   PORTD = 0X1F;

                   if(xx==1)

                     {q=a%30;} //设置闪烁周期

                   if(xx==2)

                     {r=a%30;}//设置闪烁周期

                   if(i==0)

             {

                     LED1 = tab[m0];

                         if(q<15 | o==0)//q设置亮屏时长,o是按键之后一小段时间内,并上o的条件是让校时操作别闪炼太快。

                       {PORTD&= ~BIT(3);}

                         else

                           {PORTD|= BIT(3);}  //黑屏

                          }

                   if(i==1)

             {

                     LED1 = tab[m1];

                         PORTD|= BIT(4);//B端口4位置1, ":"号

                         if(q<15 | o==0)//q设置亮屏时长,o是按键之后一小段时间内,并上o的条件是让校时操作别闪炼太快。

                       {PORTD&= ~BIT(2);}

                         else

                           {PORTD|= BIT(2);}

                          }

                   if(i==2)

             {

                     LED1 = tab[h0];

                         if(r<15 | o==0)//q设置亮屏时长,o是按键之后一小段时间内,并上o的条件是让校时操作别闪炼太快。

                       {PORTD&= ~BIT(1);}

                         else

                           {PORTD|= BIT(1);}

                          }

                   if(i==3)

             {

                     LED1 = tab[h1];

                         if(r<15 | o==0)//q设置亮屏时长,o是按键之后一小段时间内,并上o的条件是让校时操作别闪炼太快。

                       {PORTD&= ~BIT(0);}

                         else

                           {PORTD|= BIT(0);}

                         }

                   delay_ms(60);

                   PORTB = 0X00;

                  }//FOR尾

        }


        

        

/******************************************************************************* 

* 函数名称: Disp_Wd()

* 入口参数: 

* 出口参数: 

* 功能描述:  显示温度

*******************************************************************************/

void Disp_Wd(void)

        {

        

        //BEEL_OFF;

          if(f==0)        //显示正温度

          {

           for(i=0;i<4;i++)

             {

                   

                   //PORTB = 0X00;

                   if(i==0)

             {

                     LED1 = tab2[0];

                     PORTD&= ~BIT(3);

                          }

推荐阅读

史海拾趣

东通电子公司的发展小趣事

为满足日益增长的市场需求,东通电子在2003年新建了厂房,并于2004年整体搬迁至新址进行生产和经营。随着生产规模的扩大,公司的产能得到了大幅提升,月生产有感箔式电容器3000万只,无感金属化、无感箔式电容器4500万只。此外,东通电子还积极开拓国际市场,产品出口到多个国家和地区,实现了国际化的发展。

Alpha Wire公司的发展小趣事

随着全球对环保和可持续发展的重视,东通电子也积极响应号召,推行环保生产。公司在2005年开始推行环保电容生产,并在2007年通过了ISO14001:2004环境管理体系认证。这一举措不仅提升了公司的环保水平,也为客户提供了更加环保、可靠的产品。

E. Dold & Söhne KG公司的发展小趣事

在E. Dold & Söhne KG公司的发展历程中,品质始终是公司最重视的方面之一。公司严格把控原材料采购、生产过程和产品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求使得E. Dold & Söhne KG公司的产品在市场上赢得了广泛的认可和信任。

BOWEI公司的发展小趣事

在追求经济效益的同时,E. Dold & Söhne KG公司也高度重视环保和可持续发展。公司积极引进环保技术和设备,降低生产过程中的能耗和废弃物排放。此外,公司还倡导绿色采购和绿色供应链管理,推动整个产业链向环保和可持续方向发展。这种对环保和可持续发展的关注使得E. Dold & Söhne KG公司在行业内树立了良好的社会形象。

FSP [FSP TECHNOLOGY INC.]公司的发展小趣事

在追求经济效益的同时,E. Dold & Söhne KG公司也高度重视环保和可持续发展。公司积极引进环保技术和设备,降低生产过程中的能耗和废弃物排放。此外,公司还倡导绿色采购和绿色供应链管理,推动整个产业链向环保和可持续方向发展。这种对环保和可持续发展的关注使得E. Dold & Söhne KG公司在行业内树立了良好的社会形象。

Fluke公司的发展小趣事

在追求经济效益的同时,E. Dold & Söhne KG公司也高度重视环保和可持续发展。公司积极引进环保技术和设备,降低生产过程中的能耗和废弃物排放。此外,公司还倡导绿色采购和绿色供应链管理,推动整个产业链向环保和可持续方向发展。这种对环保和可持续发展的关注使得E. Dold & Söhne KG公司在行业内树立了良好的社会形象。

问答坊 | AI 解惑

RF技术能否紧跟摩尔定律发展?

Recent RF technology roadmapping activities and conclusions are reviewed. Mainstream opportunities and technological constraints are reviewed or proposed. The frequency below which Si technologies displace III-V technologies for m ...…

查看全部问答>

听说89S51能替代89C51,不知道具体哪个型号能替代AT89C51ED2-IM PLCC44

AT89C51ED2 也停产了哈,市场的库存货价格也不低. 求高手帮忙!…

查看全部问答>

视频采集的数据问题

我正在调试一个视频采集系统,可是在显示部分显示出来的图像左边总是有一条不算很宽的黑条,其他都正常,这是为什么呢?是不是行场的尺寸不对,我的是720*576,谁能告诉我更准确的数据呀?谢谢了!…

查看全部问答>

wince6.0 如何屏蔽鼠标左键长按弹出菜单功能?

问题如题目所示! Wince6.0 在那里定义鼠标\"长按\"下左键后会弹出与按下鼠标右键一样的功能? 具体函数应该是那些,怎么屏蔽掉? 请给些建议或指点,谢谢!…

查看全部问答>

A\D转换器问题!

计数式和逐次逼近式的本质区别是什么?为什么逐次逼近式不是从低位开始比较呢?…

查看全部问答>

rtx51-tiny中os_wait函数的用法 高手进来帮忙啊!急在线等!

在RTXTINY系统中,os_wait函数的应该怎么用啊,我看了好多教材都写千篇一律,没有一个能把这个问题说清楚的。。 书上说怎么说的: char os_wait(              uchar event_sel,     &n ...…

查看全部问答>

请教关于CPLD内部REG到REG的延时问题

刚刚使用CPLD,有很多问题不明白,希望各位达人多多指点。我做了一个30位的计数器,clk约束设定位200MHz。编译报告说,计数器cnt[0]到cnt[1]、cnt[2]、cnt[3]……的延时不满足最高频率要求。不知道应如何解决。是因为计数器位数太多,导致每一位的 ...…

查看全部问答>

74系列中文资料集锦

74中文资料集锦,快把我传疯了哈哈哈 [ 本帖最后由 鑫海宝贝 于 2011-3-5 17:32 编辑 ]…

查看全部问答>

stm32的那些管脚是5伏容忍的?

在特性表里有分5V容忍和非5V容忍两种管脚但是那些管脚是5伏容忍的,我一下子还没找到…

查看全部问答>