51单片机自动打铃c语言程序:
#include “reg51.h”
#include “intrins.h” #define uchar unsigned char #define uint unsigned int
uchar code dsy_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段//
uchar dsy_buffer[]={0,0,0xbf,0,0,0xff,0,0};//时间显示时-分 模式
uchar dsy_buffer1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式显示段//
uchar scan_bit;//位选择//
uchar dsy_idx;//段选择//
uchar key_state; //按键控制//
uchar s,s100,h1 ;
char h,m;
sbit dd=p1^7; //喇叭和led输出端口//
sbit cc=p1^6;
sbit ss=p1^5; //时间和秒转换显示键//
void delayms(uchar x)
{
uchar i;
while(x--) for(i = 0;i《120;i++);
}
void increase_hour()
{
if (++h》23) h=0;
dsy_buffer[0] =dsy_code[h/10];
dsy_buffer[1] =dsy_code[h];
}
void decrease_hour()
{ h--;
if (h《0) h=23;
dsy_buffer[0] =dsy_code[h/10];
dsy_buffer[1] =dsy_code[h];
}
void increase_minute()
{
if(++m》59)
{
m=0;increase_hour();
}
dsy_buffer[3] =dsy_code[m/10];
dsy_buffer[4] =dsy_code[m];
}
void decrease_minute()
{ m--;
if(m《0) m=59;
dsy_buffer[3] =dsy_code[m/10];
dsy_buffer[4] =dsy_code[m];
}
void increase_hour1()
{
if (++h1》7) h1=1;
dsy_buffer[6] =dsy_code[h1/10];
dsy_buffer[7] =dsy_code[h1];
}
void increase_second()
{
if(++s》59)
{
s=0;increase_minute();
}
dsy_buffer1[0] =dsy_code[s/10];
dsy_buffer1[1] =dsy_code[s];
}
void t0_int() interrupt 1 //显示屏显示//
{
th0=(65536-1000)/256;
tl0=(65536-1000)%6;
if(ss==1) //p1.5键没按下,显示时间//
{
p3=scan_bit;
p2=~dsy_buffer[dsy_idx];
}
else { //p1.5键按下,闪//
p3=scan_bit;
p2=~dsy_buffer[dsy_idx];
}
scan_bit=_crol_(scan_bit,1);//位显示移动//
dsy_idx=(dsy_idx+1)%8; //段选择每次变化//
if(h1==3)
{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
if(h==6&m==15)cc=dd=0; else cc=dd=1;
if(h==7&m==0)cc=dd=0; else cc=dd=1;
if(h==12&m==30)cc=dd=0; else cc=dd=1;
if(h==14&m==0)cc=dd=0; else cc=dd=1;
if(h==16&m==30)cc=dd=0; else cc=dd=1;
if(h==18&m==0)cc=dd=0; else cc=dd=1;
if(h==18&m==45)cc=dd=0; else cc=dd=1;
if(h==19&m==30)cc=dd=0; else cc=dd=1;
if(h==21&m==30)cc=dd=0; else cc=dd=1;
if(h==22&m==0)cc=dd=0;else cc=dd=1; }
else cc=dd=1;
if(h1==1|h1==4|h1==2|h1==5)
{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
if(h==7&m==0)cc=dd=0; else cc=dd=1;
if(h==12&m==30)cc=dd=0; else cc=dd=1;
if(h==14&m==0)cc=dd=0; else cc=dd=1;
if(h==16&m==30)cc=dd=0; else cc=dd=1;
if(h==18&m==0)cc=dd=0; else cc=dd=1;
if(h==18&m==45)cc=dd=0; else cc=dd=1;
if(h==19&m==30)cc=dd=0; else cc=dd=1;
if(h==21&m==30)cc=dd=0; else cc=dd=1;
if(h==22&m==0)cc=dd=0;else cc=dd=1; }
else cc=dd=1;
if(h1==6)
{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
if(h==7&m==0)cc=dd=0; else cc=dd=1;
if(h==12&m==30)cc=dd=0; else cc=dd=1;
if(h==14&m==30)cc=dd=0; else cc=dd=1;
if(h==18&m==0)cc=dd=0; else cc=dd=1;
if(h==21&m==0)cc=dd=0; else cc=dd=1;
if(h==21&m==30)cc=dd=0; else cc=dd=1;
if(h==22&m==30)cc=dd=0;else cc=dd=1; }
else cc=dd=1;
if(h1==7)
{ if(h==6&m==30)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
if(h==7&m==0)cc=dd=0; else cc=dd=1;
if(h==11&m==30)cc=dd=0; else cc=dd=1;
if(h==12&m==30)cc=dd=0; else cc=dd=1;
if(h==15&m==30)cc=dd=0; else cc=dd=1;
if(h==16&m==30)cc=dd=0; else cc=dd=1;
if(h==18&m==0)cc=dd=0; else cc=dd=1;
if(h==18&m==40)cc=dd=0; else cc=dd=1;
if(h==20&m==0)cc=dd=0; else cc=dd=1;
if(h==20&m==30)cc=dd=0; else cc=dd=1;
if(h==21&m==30)cc=dd=0; else cc=dd=1;
if(h==22&m==0)cc=dd=0;else cc=dd=1; }
else cc=dd=1;
}
void t1_int() interrupt 3//时间秒自动加一,走时//
{
th1=(65536-50000)/256;
tl1=(65536-50000)%6;//延时50毫秒//
if (s100==20)
{
s100=0;
increase_second();
}
else s100++;
}
void main ()
{
p2=p3=0xff;
tmod=0x11;
th0=(65536-1000)/256;
tl0=(65536-1000)%6;
th1=0xdc;
tl1=0;
tcon=0x01;
ea=1;
et0=1;
et1=1;
h=05,m=55,s=s100,h1=1; //时间和闹钟初值//
dsy_buffer[0]=dsy_code[h/10]; //时间初值赋给时间段码显示组//
dsy_buffer[1]=dsy_code[h];
dsy_buffer[3]=dsy_code[m/10];
dsy_buffer[4]=dsy_code[m];
dsy_buffer[6]=dsy_code[h1/10];
dsy_buffer[7]=dsy_code[h1];
dsy_buffer1[0]=dsy_code[h1/10]; //闹钟初值赋给闹钟段码显示组//
dsy_buffer1[1]=dsy_code[h1];
scan_bit=0xfe; //给位选择赋初值为二进制数 11111110,即只有最后一位为低电平,之后每次左移一位,依次为11111101,11111011.。..。.01111111,11111110循环移动//
dsy_idx=0; //段码显示组的选择变量//
tr0=tr1=1;
key_state=0xff;
while(1)
{
if (p1^key_state) //判断按键是否有按下//
{
delayms(10);
if (p1^key_state)
{
key_state=p1; ea=0;
if((key_state&0x01)==0) increase_hour(); //小时加一//
else if ((key_state&0x02)==0) decrease_hour(); //小时减一//
else if ((key_state&0x04)==0) increase_minute(); //分钟加一//
else if ((key_state&0x08)==0) decrease_minute(); //分钟减一//
else if ((key_state&0x10)==0) //复位按键//
{h=05,m=55,s=0,h1=1;
dsy_buffer[0]=dsy_code[h/10];
dsy_buffer[1]=dsy_code[h];
dsy_buffer[3]=dsy_code[m/10];
dsy_buffer[4]=dsy_code[m];
dsy_buffer[6]=dsy_code[h1/10];
dsy_buffer[7]=dsy_code[h1];
}
else if ((key_state&0x20)==0)increase_hour1(); //模式加一//
ea=1;
}
}
}
}
Docker常见的问题和坑
5G+云+内容将会成为推动5G数字内容产业发展的新动能
高通5G芯片降价,价格战正式打响
拉曼散射截面是个什么玩意儿?
基于FPGA的ARINC429总线接口卡设计
如何利用51单片机实现自动打铃
外网蒸汽收费管理是如何实现“先缴费,后用汽”的
关于AI投资策略的介绍与其AI公司的发展方向
如何从加速电荷推导出电磁波呢
集成电路封装与器件测试设备
光电二极管工作原理详细讲解
oracle更新clob字段脚本写法
ZYNQ数据交互通路PS和PL的连接技术
宝马带来HoloActive触控技术虚拟界面取代物理接触
一文浅析燃料电池的分类及其特点
智能穿戴设备的“最强心脏”
为什么在航空航天应用中使用单片微波集成电路(MMIC)
Cloud VR如何提升视觉体验和发展
对于单片机中断的详细解析
携手 IBM LinuxONE,共创企业级 AI 的绿色技术底座