600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报

基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报

时间:2023-03-25 23:49:37

相关推荐

基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报

硬件设计

仿真图1:

计时功能,数码管显示

仿真图2

数码管LCD结合显示;具有多次记录模式;

仿真图3

数码管显示;具有时钟和秒表功能;

仿真图4

数码管显示;具有语音播报功能(这里采用示波器模拟,实物在此管脚外接喇叭接口播放);能够多次记录;也可设置复位值。

程序设计

#include <reg52.h>#include <stdio.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit start=P3^2;sbit stop =P3^3;sbit clear=P3^4;sbit swch =P3^5;sbit next =P3^7;//sbit e1=P2^0;sbit e2=P2^1;sbit e3=P2^2;sbit e4=P2^3;sbit e5=P2^4;sbit rs=P3^0;sbit rw=P3^1;sbit en=P3^6;sbit dp=P1^7;char displaytemp[16];uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar table2[5];//存储个位到万位uint k; //每10ms加一uchar ktime=1;//停止按键按下次数uint table3[5];//存储多次计时的时间uchar ch2=0x01;uchar ch1=0;uchar q;uint flag=3;float klcd;void delay(uchar z) //延时{uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void led_disp(uchar ch0) //led显示{P2=~ch2;P1=table[table2[ch0]];if(ch2==0x04)dp=1;elsedp=0;ch2=ch2<<1;if(ch2==0x20)ch2=0x01;}/*------------------------------------------------判忙函数------------------------------------------------*/bit lcd_busy(void) {P0= 0xFF; rs=0; rw=1; en=0;_nop_(); en=1;return (bit)(P0 & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/void LCD_Write_Com(unsigned char com) {//while(lcd_busy()); //忙则等待delay(2);rs=0; rw=0; en=1;P0= com; _nop_(); en=0;}/*------------------------------------------------写入数据函数------------------------------------------------*/void LCD_Write_Data(unsigned char Data) {//while(lcd_busy()); //忙则等待delay(2);rs=1; rw=0; en=1; P0= Data; _nop_();en=0;}void lcd_clear(void) //清屏{LCD_Write_Com(0x01); delay(3);}void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {if (y==0) {LCD_Write_Com(0x80 + x); //表示第一行}else {LCD_Write_Com(0xC0 + x); //表示第二行} while (*s) {LCD_Write_Data( *s);s++;}}void lcd_init(void) {LCD_Write_Com(0x38); /*显示模式设置*/ delay(2); LCD_Write_Com(0x38); delay(2); LCD_Write_Com(0x38); delay(2);LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ delay(2); LCD_Write_Com(0x0C); /*显示开及光标设置*/}void main(void){uchar m=0;k=0;lcd_init();TMOD=0x11; TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=(65536-8000)/256;TL1=(65536-8000)%256;EA=1;IT0=1;EX0=1;IT1=1;EX1=1;TR0=0;ET0=1;TR1=1;ET1=1;while(1){klcd=(float)k/100;sprintf(displaytemp,"% 3.2f",klcd);LCD_Write_String(1,0,displaytemp);if(table2[0]==table2[1]==table2[2]==table2[3]==table2[4]==9){EA=0;for(q=0;q++;q<5)table2[q]=0;EA=1;} }}void int0(void) interrupt 0{if(clear==0){TR0=0;k=0;delay(2);TR0=1;}else if(clear&next)TR0=1; else// if(table3[3]!=0){k=table3[flag];flag--;if(flag==0)flag=3;} }void int1(void) interrupt 2{if((swch==1))TR0=0;else{TR0=0;table3[ktime]=k;delay(1);TR0=1;ktime++;if(ktime==4){ktime=1;TR0=0;}}}

附:http://www.jh-/archives/7294

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。