求一个STC89C52程序

汇编语言或者C
实现如下功能:
计时计数器
具体 触发时计数器+1,计时器计时;
断开后再次触发,计时器+1(累加,此时变成2),计时器在上次基础上继续计时(如上次到5,这次从5开始计时)
如此循环进行
计时器达到500s时,蜂鸣器

给你一个lcd1602和键盘的程序,你稍加修改就可以用了#include "AT89X51.h"
#include "lcd_1602.c"
#include "key.c"
main()
{
unsigned char key;
LCD_Initial();
GotoXY(0,0);
Print("wait you press!");
while(1)
{
key=keyscan1();
if(key!=255)
{
GotoXY(0,1);
LCD_Write(1,key/100+0x30);
LCD_Write(1,key%100/10+0x30);
LCD_Write(1,key%10+0x30);
}
}
}
//端口定义
#define DBPort P0 //LCD数据端口
sbit LcdRs = P2^0;
sbit LcdRw = P2^1;
sbit LcdEn = P2^2;
sbit Lcdbf = P0^7; //LCD忙标志 Busy Flagvoid delay(unsigned int t) //延时
{
while(t--);
}void LCD_Wait(void) //读忙状态
{
LcdRs=0;
LcdRw=1;
LcdEn=1;delay(1);LcdEn=0; //下降沿
while(Lcdbf)
{
LcdEn=0;delay(1);LcdEn=1; //仿真才需要此语句,实际硬件中不需要
}
} void LCD_Write(bit style, unsigned char input) //写数据1/命令0
{
LcdRs=style;
LcdRw=0;
DBPort=input;
LcdEn=1;delay(1);LcdEn=0;
LCD_Wait();
}void LCD_Initial(void) //初始化LCD
{
LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵
delay(300);
LCD_Write(0,0x0c); //显示模式
LCD_Write(0,0x01); //清屏
LCD_Write(0,0x06); //输入模式
delay(300);
}void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置
{
if(y==0) LCD_Write(0,0x80|x);
if(y==1) LCD_Write(0,0xc0|x);
}void Print(unsigned char *str) //指定坐标输出字符串
{
while(*str) LCD_Write(1,*str++);
}
//P1接4*4键盘
unsigned char keyscan1() //行列法1
{
unsigned char row,rol;
P1=0x0f;
if(P1!=0x0f)
{
delay(10); //延时消抖
if (P1_0==0) row=0;
else if(P1_1==0) row=1;
else if(P1_2==0) row=2;
else if(P1_3==0) row=3;
else return(255); P1=0xf0;
if (P1_4==0) rol=0;
else if(P1_5==0) rol=1;
else if(P1_6==0) rol=2;
else if(P1_7==0) rol=3;
else return(255); while(P1!=0xf0); //等待释放
return(row*4+rol);
}
else return(255);
}
温馨提示:内容为网友见解,仅供参考
无其他回答

怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序?
\\r\\nsbitBeep=P1^5;\\r\\n\\r\\nunsignedcharn=0;\/\/n为节拍常数变量\\r\\nunsignedcharcodemusic_tab[]={\\r\\n0x18,0x30,0x1C,0x10,\/\/格式为:频率常数,节拍常数,频率常数,节拍常数,\\r\\n0x20,0x40,0x1C,0x10,\\r\\n0x18,0x10,0x20,0x10,\\r\\n0x1C,0x10,0x18,0x40,\\r\\n0x1C,0x...

求STC 89C52单片机程序
Delay_1ms(10); \/\/延时去抖动 if(Key1 == 0) \/\/确定按键按下 { Flag = 1; \/\/标志直位 } while(Key1 == 0); \/\/等待按键松手 } } \/ 主函数 \/ int main(void){ while(1){ Key_Scong();if(Flag == 1) \/\/判断标志直位后 { LED1 = 1; \/\/P1.0 = 1...

求STC89c52单片机控制继电器程序:关、开时间间隔为120s。 有悬赏_百...
RELAY = 1; \/\/上电使继电器处于关闭状态.图中的8550三极管,低电平时为继电器打开,高电平关闭.Time0_Init(); \/\/定时器初始化 while(1){ if(SecCount == 120) \/\/当SecCount等于120秒时 { RELAY = ~RELAY; \/\/继电器状态取反,原本关闭的打开,} } } ...

stc89c52如何烧录程序
1、首先打开在Keil软件写好的程序,点击工具栏上的target options...。2、在Target选项栏中,输入与自己使用开板单片机所用晶振相同的频率,如11.059 2MHz、12MHz。3、在output选项栏中,勾选上Create HEX file,并点击确定。4、分别点击工具栏中的Transtate,build,rebuild。5、提示生成了HEX文件,...

【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1....
void INT0_ROUTING() interrupt 0\/\/外部中断0子程序 { P0=0xfe;\/\/LED0点亮 while((P3|0xfb)==0xff);\/\/等待外部中断0口(P3^2松开)delay(10);\/\/延时去抖动 P0=0xff;\/\/LED0熄灭 } void INT0_ROUTING() interrupt 2 { P0=0xfd;\/\/LED1点亮 while((P3|0xf7)==0xff);\/\/等待外部...

单片机STC89C52显示0-99的C语言程序
void delay(uint a){ while(a--);} void main(){ uint n;uchar i,k;k=0;while(1){ for(i=0;i<10;i++){ for(k=0;k<10;k++){ for(n=0;n<400;n++){ P0=table1[k];sm2=0;delay(100);sm2=1;P0=table2[i];sm1=0;delay(100);sm1=1;delay(100);} } } } } ...

跪求!!!STC89C52单片机,用八个按键控制分别控制八个LED灯的代码(C语言...
case 0xef:P0=table[5];LED4=0;break;case 0xdf:P0=table[6];LED5=0;break;case 0xbf:P0=table[7];LED6=0;break;case 0x7f:P0=table[8];LED7=0;break;default:break; \/\/如果都没按下,直接跳出}\/\/主循环中添加其他需要一直工作的程序}}\/\/如果帮到你的话,点一个赞吧!硬件电路...

求STC89c52单片机用倒计时控制继电器开、合的C语言程序,晶振12.000_百...
jidianqi=1;\/\/1就表示继电器开启 } } } \/*显示子程序*\/ void display(){ wei=1;P0=0x01;wei=0;P0=0xff;\/\/清屏 duan=1;P0=table[miao%10];\/\/显示秒钟的个位 duan=0;delay(1);wei=1;P0=0x02;wei=0;P0=0xff;duan=1;P0=table[miao\/10];\/\/显示秒钟的十位 duan=0;delay(1);...

我需要stc89c52单片机ds18b20温度控制的c语言程序,要求可显示当前温度...
void delay(unsigned char i) \/\/ds18b20的延时程序 { while(i--);} unsigned char resetds() \/\/DS18B20初始化 { unsigned char i=0;unsigned char flag=0;DQ=0; \/\/拉低总线 delay(81); \/\/精确延时 497us DQ=1; \/\/释放总线 delay(20);flag=DQ;delay(60); \/\/ return ...

需要一个STC89C52芯片的矩阵按键扫描程序,要求:每一个按键(共16个)对...
P2=h;return(cord);\/\/键盘最后组合码值 } }return(0xff); \/\/返回该值 } 如果有按键,就会返回按键值, 如果没按键则返回 0XFF, 通过读取返回值可以判断是否有按键, 在程序开头可以加上全局变量的断码表, 这就看你用的是共阴的还是共阳的数码管了~~祝您的问题早日得到解决. 谢谢 ...

相似回答