电子时钟C语言程序和涡流传感器称重C语言程序Word文件下载.docx
- 文档编号:20484251
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:16
- 大小:18.05KB
电子时钟C语言程序和涡流传感器称重C语言程序Word文件下载.docx
《电子时钟C语言程序和涡流传感器称重C语言程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子时钟C语言程序和涡流传感器称重C语言程序Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
6;
i++)
{
disdat[i]=0;
//将显示缓存清零
}
initsiu();
//初始化单片机
set_state=0;
do
i=inkey();
//读取键盘值
if(i==0xe0)//如果读取i=0xe0,进入设置时钟
setsz();
//设置时钟
jssz();
//计算数值
display();
//显示
if((sec&
0x01))//指示灯闪烁
zsd=1;
else
zsd=0;
}
while
(1);
voiddisplay(void)//6位数码管显示程序,disdat[]是要显示的内容(是0~9的数字),xsd是在那一位显示小数点
uchari,disa,disb,disc;
disb=0x00;
//显示第n位
i++)//共显示6个数据
disa=disdat[i];
//显示数据
if(disa<
10)
{
P2=disb;
disc=tab[disa];
//显示段码
if(set_state==0)//显示时钟
{
if((i==1)||(i==3))
disc=disc|0x80;
//增加小数点显示
}
else//设置时显示
if(xsd==i)
P0=disc;
//送显示
delay();
//延时
P0=0x0;
disb++;
//下一个要显示的位置
}
P2=0xff;
voidsetsz(void)//设置时间
uchari,k;
set_state=1;
//改变显示状态
xsd=0;
//设置位置
TR0=0;
//停止时钟运行
//将现在的结果放到数组disdat[]
//读键
switch(i)
case0xd0:
k=0xff;
//退出设置,3号键,左
break;
case0xb0:
k=0;
//改变设置位置,每按下一次右移一个,2号键,次左
xsd++;
//数码管转换
if(xsd==6)
xsd=0;
break;
case0x70:
//加1,1号键,右
k=0;
tzszw(0);
default:
k=0;
while(k!
=0xff);
//恢复显示时钟
TR0=1;
//时钟运行
_nop_();
voidtzszw(ucharzj)
ucharj;
switch(xsd)
case0:
//时高位调整
if(zj==0)
disdat[0]++;
if(disdat[0]>
2)
disdat[0]=0;
hour=disdat[0]*10+disdat[1];
case1:
//时低位调整
if((disdat[0]==0)||(disdat[0]==1))
{disdat[1]++;
if(disdat[1]>
9)
disdat[1]=0;
if(disdat[0]==2)
disdat[1]++;
3)
case2:
//分高位调整
disdat[2]++;
if(disdat[2]>
5)
disdat[2]=0;
min=disdat[2]*10+disdat[3];
case3:
//分低位调整
disdat[3]++;
if(disdat[3]>
disdat[3]=0;
case4:
//秒高位调整
disdat[4]++;
if(disdat[4]>
disdat[4]=0;
sec=disdat[4]*10+disdat[5];
case5:
//秒低位调整
disdat[5]++;
if(disdat[5]>
disdat[5]=0;
voiddelay(void)//延时程序
201;
_nop_();
voidjssz(void)//将时钟分离送到显示缓存
disdat[0]=hour/10;
disdat[1]=hour%10;
disdat[2]=min/10;
disdat[3]=min%10;
disdat[4]=sec/10;
disdat[5]=sec%10;
voidsztz(void)//时钟运行计数,每秒运行一次
sec++;
if(sec==60)
sec=0;
min++;
if(min==60)
min=0;
hour++;
if(hour==24)
hour=0;
voidinitsiu(void)//初始化单片机
TMOD=0x11;
//定时器1:
gate=0->
TR1=1开始计数,C/T=0->
对内部计数,模式1->
16位计数
TH0=0X3C;
TL0=0XAF;
ET0=1;
//打开定时器0中断
ET1=0;
//关闭定时器1中断
//打开计数器0
TR1=0;
//关闭计数器1
EA=1;
//总中断允许
voidinttime0(void)interrupt1using1
//50ms中断一次,20次为一秒,调整时间一次
count++;
if(count==20)
count=0;
sztz();
}
/**********************************************************
键盘输入程序1:
0x702:
0xb03:
0xd0
4:
0xe0
**********************************************************/
ucharinkey(void)
ucharjjj,keydat;
P2=0xff;
//P2准备读入
keydat=P2;
//读入键值
keydat=keydat&
0xf0;
//找出四个键的值
if(keydat!
=0xf0)//有键输入
_nop_();
jjj=P2;
//再读,去抖动
jjj=jjj&
if(jjj!
=keydat)
keydat=0xf0;
do
jjj=P2;
jjj=jjj&
}//等待键松手
while(jjj!
=0xf0);
return(keydat);
涡流称重计实验源程序:
sbitADCS=P3^5;
//使能接口
sbitADCLK=P3^4;
//时钟接口
sbitADDO=P3^3;
//数据输出接口(复用)
sbitADDI=P3^3;
//数据输入接口
uchardisdat[3];
ucharcodetab[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,};
ucharcodetbb[]={0x01};
uintt,k;
bitc;
ucharbdatabit_status=0x43;
//定义一个可位寻址的存储器
sbitstatus_0=bit_status^0;
sbitstatus_7=bit_status^7;
voiddushuju(void)//选择通道子程序
{uchari;
ucharn=0;
ucharm=0;
ADDI=1;
//初始化通道选择
ADCS=0;
ADCLK=1;
ADCLK=0;
//第一个下降沿
//第二个下降沿
ADDI=0;
//第三个下降沿
for(i=8;
i>
0;
i--)//第一次逆向取数据
c=ADDO;
status_0=c;
bit_status<
<
=1;
//形成一个脉冲
status_0=ADDO;
n=bit_status;
//将接收到的数据存入n
bit_status=0;
for(i=7;
i--)//第二次正向取数据
{
status_7=c;
bit_status>
>
//形成一次脉冲
status_7=ADDO;
m=bit_status;
//将接收到的数据存入m
}while(n!
=m);
//如果两次选取的数据不相等则返回重新取数
ADCS=1;
ADDO=1;
t=n*1.953f;
k=t*46.5f;
}
voiddisplay(void)//3位数码管显示程序,disdat[]是要显示的内容(是0~9的数字),xsd是在那一位显示小数点
3;
i++)//共显示3个数据
//显示时钟
if(i==0)
//增加小数点显示
//送显示
//延时
//下一个要显示的位置
for(i=3;
if(k>
120)//如果超重则显示---
disa=disdat[i];
disc=tbb[0];
else
//送显示
//延时
//下一个要显示的位置
//P2=0xff;
{
IE=0x80;
//关闭所有中断
zsd=0;
disdat[0]=t/100;
//存电压值
t=t%100;
disdat[1]=t/10;
t=t%10;
disdat[2]=t;
disdat[3]=k/10000;
//存重量值
k=k%10000;
disdat[4]=k/1000;
k=k%1000;
k=k/100;
disdat[5]=k;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 语言 程序 涡流 传感器 称重