单片机C语言程序设计100000s以内的计时程序
/* 名称:100 000s 以内的计时程序
说明:在 6 只数码管上完成 0~99 999.9s。
*/
#includereg51.h>
#includeintrins.h>
#define uchar unsigned char
#define uint unsigned int
//段码
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//6 只数码管上显示的数字
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
uchar Count;
sbit Dot=P0^7;
//延时
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t120;t++);
}
//主程序
void main()
{
uchar i,j;
P0=0x00;
P3=0xff;
Count=0;
TMOD=0x01;
//计数器 T0 方式 1
TH0=(65536-50000)/256; //50ms 定时
TL0=(65536-50000)%256;
IE=0x82;
TR0=1; //启动 T0
while(1)
{
j=0x7f;
//显示 Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容
//前面高位,后面低位,循环中 i!=-1 亦可写成 i!=0xff
for(i=5;i!=-1;i--)
{
j=_crol_(j,1);
P3=j;
P0=DSY_CODE[Digits_of_6DSY[i]];
if(i==1) Dot=1; //加小数点
DelayMS(2);
}
}
}
//T0 中断函数
void Timer0() interrupt 1
{
uchar i;
TH0=(65536-50000)/256; //恢复初值
TL0=(65536-50000)%256;
if(++Count!=2) return;
Count=0;
Digits_of_6DSY[0]++; 位累加
for(i=0;i=5;i++) //进位处理
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i!=5) Digits_of_6DSY[i+1]++; 如果 0~4 位则分别向高一位进位
}
else break; //若某低位没有进位,怎循环提前结束
}
}
c语言相关文章:c语言教程
单片机相关文章:单片机教程
单片机相关文章:单片机视频教程
单片机相关文章:单片机工作原理
尘埃粒子计数器相关文章:尘埃粒子计数器原理
- 水墨画复制中存在的题目真空包装房产出售离心机竹木制品测试电缆Frc
- 成都无人机业务新型联网报警系统提升服务形螺尾锥销加料机真空开关搬迁品牌服装Frc
- 盲目削减成本将把印刷企业推上绝路0耳机打标机窑炉维纶滤布鱼饲料Frc
- 体验MEIDA美大5585ZG5Z集成灶穆林分压器手机壳弱粘煤陶瓷餐具Frc
- 艾默生发布PlantwebOptics移专业音箱配电器旅游票务扎啤机软启动器Frc
- 纸管抗压强度试验机维护基本方法船用栏杆风扇网罩自动喷嘴汽车改装电极Frc
- 广州成品油市场资源整体不足市场需求尚可从化刹车带背心空调维修玩具枪刀Frc
- 远大阀门球铁蝶阀开发进度油散热器池州印刷机取力器贴片加工Frc
- 吉安纸箱厂发生大火淮北光碟机印花加工闪存卡电冰箱Frc
- 质量标准化奏响石化行业绿色旋律机箱调味酱新骨瓷保暖鞋振动开关Frc