历史上的今天
今天是:2025年02月22日(星期六)
2020年02月22日 | 51单片机I2C 24c02 1-99秒循环定时器
2020-02-22 来源:51hei
51单片机,I2C 24c02 1-99秒循环定时器
仿真电路。
程序源码
HEX文件


单片机源程序如下:
#include "reg52.h"
#include "i2c.h"
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
#ifndef ulong
#define ulong unsigned long
#endif
uchar stoptime=0,runtime=0,stopcoun=00,runcoun=00;
uchar disp[8];
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar keynum=0;
bit noankey=1;
sbit stopled=P2^5;
sbit runled=P2^4;
void datapros();
void keyaffair();
/*******************************************************************************
* 函 数 名 : Timer1Init
* 函数功能 : 定时器1初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void TimerInit()
{
TMOD|=0X11;//选择为定时器0和1模式,工作方式1,仅用TR1打开启动。
TH0=0XF0;
TL0=0X60;
TH1=0XFC; //给定时器赋初值,定时1ms
TL1=0X18;
ET0=1;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR0=1;
TR1=1;//打开定时器
}
/*******************************************************************************
* 函数名 :datapros()
* 函数功能 :数据处理函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void datapros()
{
disp[0]=smgduan[stoptime/10]; //停止定时十位
disp[1]=smgduan[stoptime%10]; //停止定时个位
disp[2]=smgduan[runtime/10]; //运行定时十位
disp[3]=smgduan[runtime%10]; //运行定时个位
disp[4]=smgduan[stopcoun/10]; //停止计时十位
disp[5]=smgduan[stopcoun%10]; //停止计时个位
disp[6]=0; //运行计时十位
disp[7]=0; //运行计时个位
}
/*******************************************************************************
* 函数名 :void keyaffair()
* 函数功能 :按键事件函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void keyaffair(uchar num)
{
switch(num)
{
case 1: stoptime=(stoptime>=90)?stoptime-90 : stoptime+10; disp[0]=smgduan[stoptime/10]; At24c02Write(1,stoptime); break;
case 2: stoptime=(stoptime%10==9)? stoptime-9:stoptime+1; disp[1]=smgduan[stoptime%10]; At24c02Write(1,stoptime); break;
case 3: runtime=(runtime>=90)?runtime-90 : runtime+10; disp[2]=smgduan[runtime/10]; At24c02Write(2,runtime); break;
case 4: runtime=(runtime%10==9)?runtime-9 : runtime+1; disp[3]=smgduan[runtime%10]; At24c02Write(2,runtime); break;
case 5: stoptime=(stoptime>=10)?stoptime-10 : stoptime+90; disp[0]=smgduan[stoptime/10]; At24c02Write(1,stoptime); break;
case 6: stoptime=(stoptime%10>=1)? stoptime-1:stoptime+9; disp[1]=smgduan[stoptime%10]; At24c02Write(1,stoptime); break;
case 7: runtime=(runtime>=10)?runtime-10 : runtime+90; disp[2]=smgduan[runtime/10]; At24c02Write(2,runtime); break;
case 8: runtime=(runtime%10>=1)?runtime-1 : runtime+9; disp[3]=smgduan[runtime%10]; At24c02Write(2,runtime); break;
}
}
/*******************************************************************************
* 函 数 名 : void amin()
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
stopled = 0;
runled = 1;
stoptime = At24c02Read(1);
stoptime%=100;
runtime = At24c02Read(2);
runtime%=100;
datapros();
TimerInit();
while(1)
{
if(keynum!=0 && noankey==1)
{
EA=0;
keyaffair(keynum);
keynum=0;
EA=1;
}
}
}
/*******************************************************************************
* 函 数 名 : void Timer0() interrupt 1
* 函数功能 : 定时器0中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0() interrupt 1
{
static ulong timeset=0xffffffff;
TH0 = 0xF0;
TL0 = 0x60;
//add your code here!
//if(timeset==0xffffffff)
noankey=1;
timeset<<=8;
timeset|=P3;
switch(timeset)
{
case 0xfefefefe: keynum=1; noankey=0; break;
case 0xfdfdfdfd: keynum=2; noankey=0; break;
case 0xfbfbfbfb: keynum=3; noankey=0; break;
case 0xf7f7f7f7: keynum=4; noankey=0; break;
case 0xefefefef: keynum=5; noankey=0; break;
case 0xdfdfdfdf: keynum=6; noankey=0; break;
case 0xbfbfbfbf: keynum=7; noankey=0; break;
case 0x7f7f7f7f: keynum=8; noankey=0; break;
case 0xffffffff: if(keynum!=0)noankey=1;break;
}
}
/*******************************************************************************
* 函 数 名 : void Timer1() interrupt 3
* 函数功能 : 定时器1中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer1() interrupt 3
{
static uchar n=0;
static uint count=0;
上一篇:P10点阵屏C51单片机程序
下一篇:基于HX711+51单片机电子秤
史海拾趣
|
电容降压电路用的人还蛮多,但是很多人都不会计算输出电流,看他们都用阻抗的方法计算, 其实是错的,其一是有Vout输出时电路是非线性的,不能用线性公式计算,其二阻抗算出的电流是有效值,比输出端的整流平均直大了1.1倍。 依据基尔霍夫电压定律 ...… 查看全部问答> |
|
如题 我的目的是 删除一个正在运行的程序 在VC下建一个对话框 选择一个文件删除 听别人说要在ring0下删除 用到DDK 我就是不知道如何才能在 对话框中 加入DDK代码 而且不知道怎么删除 希望知道的各位老大多多指教 小弟先拜谢 ...… 查看全部问答> |
|
小弟初学编程,有段代码看不懂,烦请大家把下面这段代码添加个注释!谢谢了!定给分! 利用象素时钟LLC2和行同步信号HS实现行截取的VHDL程序: process(LLC2,HS) variable temp: std_logic_vector(10 downto 0); begin i ...… 查看全部问答> |
|
wavecom Q24Plus,wip版本v301,利用tcp功能发彩信大图片不成功 不是利用操作系统建立拨号网络形式的网络连接。用的是内嵌的tcp功能。 发送彩信小些gif图片可以,200字节左右,大的不成功。指令里返回shutdown。 该从哪下手解决阿?用同样实现方式有成功的吗?恳请高手。… 查看全部问答> |




