
//功能:感应外界温度并用数码管显示
//时间:2005年6月20日
//设计人扒慧:
#include<春袜答reg52.h>
#define uchar unsigned char
sbit ad0809_oe=P1^0 //定义各个位
sbit ad0809_start=P1^1
sbit ad0809_ale=P1^2
sbit ls595_rclk=P1^3
sbit ad0809_eoc=P1^5
sbit ls595_oe=P1^4
sbit ls595_ser=P3^0
sbit ls595_srclr=P3^1
uchar nn,mm
uchar code tab[]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84}
send(uchar) //声明函数
AD(uchar)
void display(uchar)
void init()
//********普通口输入数据*****************
send(uchar shu)//普通口串行输入
{
unsigned char i,k
k=0x01
for(i=0i<8i++)
{
if(k==(k&shu)) //判断每位上是否为1
ls595_ser=1
else
ls595_ser=0
k<<=1 //左移一位
ls595_srclr=0 //输入一个上升沿讲数送入595中
ls595_srclr=1
}
}
//*****************595显示子程序********************
void display(uchar du)
{
uchar ge,shi,flge //ge拆字后个位的存放处shi拆字后十位的存放处flge ℃的存放处
shi=tab[du/10] //拆字
send(shi) //给595送数
ge=tab[du%10]
send(ge)
flge=0xb1
send(flge)
ls595_rclk=0 //上升沿送出数据
ls595_rclk=1
}
//*******************初始化程序********************
void init() //初始化AD、定时器
{
ad0809_start=0 //Start管教上升沿将AD内部寄存器清零
ad0809_start=1
ad0809_ale=1 //ALE高电平选择通道
nn=0
mm=0
TMOD=0x01 //定时器初始化
//IE=0x82
EA=1
ET0=1
TCON=0x00
TL0=(65536-50000)%256//定时50ms
TH0=(65536-50000)/256
}
AD(uchar wen)
{
// unsigned char tt=0
// ad0809_ale=1 //选择通道
ad0809_start=1
ad0809_start=0 //start下降沿启动转换信号
while(ad0809_eoc==0)//判断转换是否结束
ad0809_oe=1 /好差/转换结束送出转换数据
wen=P2
return (wen)
}
//**************中断服务程序*********************
void tiam0() interrupt 1 using 1 //中断服务程序
{
TL0=(65536-50000)%256//定时50ms
TH0=(65536-50000)/256
nn++
if(nn==10)//0.5秒M加一
{
mm++
nn=0
}
}
//****************主程序***************************
void main()
{
unsigned char bb,aa,cc //bb=计算后得到温度,aa=AD输出数据
unsigned char wen //wen存放转换的得到的数据
init()
// wen=17
ls595_oe=0
cc=0
TR0=1
while(1)
{
aa=AD(wen)
// ad0809_oe=0
aa=~aa
bb=aa/4
if(mm==2)
{
mm=0
cc=bb
}
display(cc) //调用显示子程序
}
}
#include <stdio.h>#include <windows.h>
void 数宽歼main()
{
int _t=60
while (_t>薯冲0)
{
Sleep(1000)
_t--
}
/*
巧州 60秒后要执行的语句
*/
}
//一个示例程序。#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
#define N 100 //设置最大的定时器个数
int i=0,t=1 //i代表定时器的个数;t表示时间,逐秒递增
struct Timer //Timer结构体,用来保存一个定时器的信息
{
int total_time //每隔total_time秒
int left_time //还剩left_time秒
int func //该定时器超时,要执行的代码的标志
}myTimer[N] //定义Timer类型的数组,用来保存所有的定时器
void setTimer(int t,int f) //新建一个计时器
{
struct Timer a
a.total_time=t
a.left_time=t
a.func=f
myTimer[i++]=a
}
void timeout() //判断定时器是否悉改超时,以及超时时所要执行的动作
{
printf("Time: %d\n",t++)
int j
for(j=0j<ij++)
{
if(myTimer[j].left_time!=0)
myTimer[j].left_time--
else
{
switch(myTimer[j].func)
{ //通过匹配myTimer[j].func,判断下一步选择哪种 *** 作
case 1:
printf("------Timer 1: --Hello Aillo!\n")break
case 2:
printf("------Timer 2: --Hello 睁耐判Jackie!\n")break
case 3:
亩禅 printf("------Timer 3: --Hello PiPi!\n")break
}
myTimer[j].left_time=myTimer[j].total_time //循环计时
}
}
}
int main() //测试函数,定义三个定时器
{
setTimer(3,1)
setTimer(4,2)
setTimer(5,3)
signal(SIGALRM,timeout) //接到SIGALRM信号,则执行timeout函数
while(1)
{
sleep(1) //每隔一秒发送一个SIGALRM
kill(getpid(),SIGALRM)
}
exit(0)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)