问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于LCD数字显示温度计的课程设计,急,重赏

发布网友 发布时间:2022-04-30 15:08

我来回答

2个回答

热心网友 时间:2022-06-25 23:27

/*电子时钟源代码*/
#include<graphics.h>
#include<stdio.h>
#include<math.h>
#include<dos.h>
#define PI 3.1415926 /*定义常量*/
#define UP 0x4800 /*上移↑键:修改时间*/
#define DOWN 0x5000 /*下移↓键:修改时间*/
#define ESC 0x11b /*ESC键 : 退出系统*/
#define TAB 0xf09 /*TAB键 : 移动光标*/
/*函数声明*/
int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/
int timeupchange(int); /*处理上移按键*/
int timedownchange(int); /*处理下移按键*/
int digithour(double); /*将double型的小时数转换成int型*/
int digitmin(double); /*将double型的分钟数转换成int型*/
int digitsec(double); /*将double型的秒钟数转换成int型*/
void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/
void drawcursor(int); /*绘制一个光标*/
void clearcursor(int);/*消除前一个光标*/
void clockhandle(); /*时钟处理*/

double h,m,s; /*全局变量:小时,分,秒*/
double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/
struct time t[1];/*定义一个time结构类型的数组*/
main()
{
int driver, mode=0,i,j;
driver=DETECT; /*自动检测显示设备*/
initgraph(&driver, &mode, "");/*初始化图形系统*/
setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置三点宽实线*/
setbkcolor(0);/*用调色板设置当前背景颜色*/
setcolor(9); /*设置当前画线颜色*/
line(82,430,558,430);
line(70,62,70,418);
line(82,50,558,50);
line(570,62,570,418);
line(70,62,570,62);
line(76,56,297,56);
line(340,56,564,56); /*画主体框架的边直线*/
/*arc(int x, int y, int stangle, int endangle, int radius)*/
arc(82,62,90,180,12);
arc(558,62,0,90,12);
setlinestyle(0,0,3);
arc(82,418,180,279,12);
setlinestyle(0,0,3);
arc(558,418,270,360,12); /*画主体框架的边角弧线*/
setcolor(15);
outtextxy(300,53,"CLOCK"); /*显示标题*/
setcolor(7);
rectangle(342,72,560,360); /*画一个矩形,作为时钟的框架*/

setwritemode(0); /*规定画线的方式。mode=0, 则表示画线时将所画位置的原来信息覆盖*/
setcolor(15);
outtextxy(433,75,"CLOCK");/*时钟的标题*/
setcolor(7);
line(392,310,510,310);
line(392,330,510,330);
arc(392,320,90,270,10);
arc(510,320,270,90,10); /*绘制电子动画时钟下的数字时钟的边框架*/
/*绘制数字时钟的时分秒的分隔符*/
setcolor(5);
for(i=431;i<=470;i+=39)
for(j=317;j<=324;j+=7){
setlinestyle(0,0,3);
circle(i,j,1); /*以(i, y)为圆心,1为半径画圆*/
}
setcolor(15);
line(424,315,424,325); /*在运行电子时钟前先画一个光标*/
/*绘制表示小时的圆点*/
for(i=0,m=0,h=0;i<=11;i++,h++){
x=100*sin((h*60+m)/360*PI)+451;
y=200-100*cos((h*60+m)/360*PI);
setlinestyle(0,0,3);
circle(x,y,1);
}
/*绘制表示分钟或秒钟的圆点*/
for(i=0,m=0;i<=59;m++,i++){
x=100*sin(m/30*PI)+451;
y=200-100*cos(m/30*PI);
setlinestyle(0,0,1);
circle(x,y,1);
}
/*在电子表的左边打印帮助提示信息*/
setcolor(4);
outtextxy(184,125,"HELP");
setcolor(15);
outtextxy(182,125,"HELP");
setcolor(5);
outtextxy(140,185,"TAB : Cursor move");
outtextxy(140,225,"UP : Time ++");
outtextxy(140,265,"DOWN: Time --");
outtextxy(140,305,"ESC : Quit system!");
outtextxy(140,345,"Version : 2.0");
setcolor(12);
outtextxy(150,400,"Nothing is more important than time!");
clockhandle();/*开始调用时钟处理程序*/
closegraph(); /*关闭图形系统*/
return 0; /*表示程序正常结束,向操作系统返回一个0值*/
}

void clockhandle()
{
int k=0,count;
setcolor(15);
gettime(t);/*取得系统时间,保存在time结构类型的数组变量中*/
h=t[0].ti_hour;
m=t[0].ti_min;
x=50*sin((h*60+m)/360*PI)+451; /*时针的x坐标值*/
y=200-50*cos((h*60+m)/360*PI); /*时针的y坐标值*/
line(451,200,x,y);/*在电子表中绘制时针*/

x1=80*sin(m/30*PI)+451; /*分针的x坐标值*/
y1=200-80*cos(m/30*PI); /*分针的y坐标值*/
line(451,200,x1,y1); /*在电子表中绘制分针*/

digitclock(408,318,digithour(h)); /*在数字时钟中,显示当前的小时值*/
digitclock(446,318,digitmin(m)); /*在数字时钟中,显示当前的分钟值*/
setwritemode(1);
/*规定画线的方式,如果mode=1,则表示画线时用现在特性的线
与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定
的线进行异或后的结果。因此, 当线的特性不变, 进行两次画线操作相当于没有
画线,即在当前位置处清除了原来的画线*/
for(count=2;k!=ESC;){ /*开始循环,直至用户按下ESC键结束循环*/
setcolor(12);/*淡红色*/
sound(500);/*以指定频率打开PC扬声器,这里频率为500Hz*/
delay(700);/*发一个频率为500Hz的音调,维持700毫秒*/
sound(200);/*以指定频率打开PC扬声器,这里频率为200Hz*/
delay(300);
/*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/
nosound(); /*关闭PC扬声器*/
s=t[0].ti_sec;
m=t[0].ti_min;
h=t[0].ti_hour;

x2=98*sin(s/30*PI)+451; /*秒针的x坐标值*/
y2=200-98*cos(s/30*PI); /*秒针的y坐标值*/
line(451,200,x2,y2);
/*绘制秒针*/

/*利用此循环,延时一秒*/
while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h)
{ gettime(t);/*取得系统时间*/
if(bioskey(1)!=0){
k=bioskey(0);
count=keyhandle(k,count);
if(count==5) count=1;
}
}
setcolor(15);
digitclock(485,318,digitsec(s)+1);/*数字时钟增加1秒*/

setcolor(12); /*淡红色*/
x2=98*sin(s/30*PI)+451;
y2=200-98*cos(s/30*PI);
line(451,200,x2,y2);
/*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的目的*/

/*分钟处理*/
if(t[0].ti_min!=m){ /*若分钟有变化*/
/*消除当前分针*/
setcolor(15); /*白色*/
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
/*绘制新的分针*/
m=t[0].ti_min;
digitclock(446,318,digitmin(m)); /*在数字时钟中显示新的分钟值*/
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
}

/*小时处理*/
if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)){ /*若小时数有变化*/
/*消除当前时针*/
setcolor(15); /*白色*/
x=50*sin((h*60+m)/360*PI)+451;/*50:时钟的长度(单位:像素),451:圆心的x坐标值*/
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
/*绘制新的时针*/
h=t[0].ti_hour;
digitclock(408,318,digithour(h));
x=50*sin((h*60+m)/360*PI)+451;
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
}
}
}

int keyhandle(int key,int count) /*键盘控制 */
{ switch(key)
{case UP: timeupchange(count-1); /*因为count的初始值为2,所以此处减1*/<br> break;<br> case DOWN:timedownchange(count-1); /*因为count的初始值为2,所以此处减1*/<br> break;<br> case TAB:setcolor(15);<br> clearcursor(count); /*清除原来的光标*/<br> drawcursor(count); /*显示一个新的光标*/<br> count++;<br> break;<br> }
return count;
}

int timeupchange(int count) /*处理光标上移的按键*/
{
if(count==1){
t[0].ti_hour++;
if(t[0].ti_hour==24) t[0].ti_hour=0;
settime(t); /*设置新的系统时间*/
}

if(count==2){
t[0].ti_min++;
if(t[0].ti_min==60) t[0].ti_min=0;
settime(t); /*设置新的系统时间*/
}

if(count==3){
t[0].ti_sec++;
if(t[0].ti_sec==60) t[0].ti_sec=0;
settime(t); /*设置新的系统时间*/
}
}

int timedownchange(int count) /*处理光标下移的按键*/
{
if(count==1) {
t[0].ti_hour--;
if(t[0].ti_hour==0) t[0].ti_hour=23;
settime(t);/*设置新的系统时间*/
}
if(count==2) {
t[0].ti_min--;
if(t[0].ti_min==0) t[0].ti_min=59;
settime(t);/*设置新的系统时间*/
}

if(count==3) {
t[0].ti_sec--;
if(t[0].ti_sec==0) t[0].ti_sec=59;
settime(t);/*设置新的系统时间*/
}
}

int digithour(double h)/*将double型的小时数转换成int型*/
{int i;<br>for(i=0;i<=23;i++)<br> {if(h==i) return i;}
}

int digitmin(double m)/*将double型的分钟数转换成int型*/
{int i;<br>for(i=0;i<=59;i++)<br> {if(m==i) return i;}
}

int digitsec(double s) /*将double型的秒钟数转换成int型*/
{int i;<br>for(i=0;i<=59;i++)<br> {if(s==i) return i;}
}

void digitclock(int x,int y,int clock)/*在指定位置显示数字时钟:时\分\秒*/
{char buffer1[10];<br>setfillstyle(0,2);<br>bar(x,y,x+15,328);<br>if(clock==60) clock=0;<br>sprintf(buffer1,"%d",clock);<br>outtextxy(x,y,buffer1);<br>}

void drawcursor(int count) /*根据count的值,画一个光标*/
{switch(count)<br>{<br> case 1:line(424,315,424,325);break;<br> case 2:line(465,315,465,325);break;<br> case 3:line(505,315,505,325);break;<br> }
}

void clearcursor(int count) /*根据count的值,清除前一个光标*/
{switch(count)<br>{<br> case 2:line(424,315,424,325);break;<br> case 3:line(465,315,465,325);break;<br> case 1:line(505,315,505,325);break;<br> }
}

热心网友 时间:2022-06-25 23:28

呵呵 电子专业的吧~网上有的是 自己搜吧 稍微修改一下就成 以前做过,但是资料没了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 都说是药三分毒,其实99%的人都理解错了,到底该如何正确看待吃药呢... 人们常说“是药三分毒”,这句话有什么科学依据吗? 是药三分毒下一句是什么? 为什么说是药三分毒? 怎样看待是药三分毒? 是药三分毒后一句是什么 是药三分毒,为什么会有这样的说法? 是药三分毒,怎么理解 为什么说“是药三分毒” ,怎么理解这句话? 是药三分毒,这话有道理吗? 是药三分毒,哪些药经常服用会对身体不好? 真三国无双7猛将传pc版关银屏第二秘武——爱马搜索战 是药三分毒。药三分毒是什么? 真三国无双7关银屏军装DLC服装包下载 虽然说是药三分毒,但可以理解为如果确实有病吃药也比不吃药强一千倍? 为什么是药三分毒? 真三国无双7未打MOD前原始关银屏dds文件 938的 跪求真三国无双7关银屏原始mod 真三国无双7关银屏暴力招式修改mod怎么安装 馋掉牙炸土豆加盟项目,有人做吗?馋掉牙的品牌效应如何? 是药三分毒意思是只要是药就有三分毒吗? 求各位大神帮下忙!!用proteus连接keil仿真 LCD温度计 lcd1602只亮不显示示数 单片机数字温度计51控制的ds18b20,lcd显示的程序运行不起 毕业论文这三个课题哪个简单:LCD数字显示体温计、单片机的温度采集系统设计、单片机的声控小车的设计 电子体温计液晶面显示OF怎样才变成0C? 51单片机ds18b20配合lcd1602做温度计,显示数值不变,显示为093.13 电子温度表CR—C803怎么调 HT数字温度计的原理是怎样的? 基于AT89C51单片机和DS18B20温度传感器,LCD1602液晶显示的高精度数字温度计程序,用C语言编程 爬宠箱温度计液晶屏显示不全. 液晶有什么用途? 基于51单片机的液晶显示温度计原理图和程序(采用18b20,高分答谢!! 一个图标上面是个T经常在国外的软件上看到还有那个F都是什么意思? 电池级金属锂片的销售 金属锂片对电池的容量测试有无明显影响? 锂离子电极材料配料的稀稠和涂料的薄厚对电池性能有什么影响 金属锂带保存在液体石蜡中,行么? 苹果手机出现这个代码mbuf_watchdog? 锂离子电池电极材料的电压(vsLi)是指什么? T-ara用什么聊天工具