基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报
生活随笔
收集整理的這篇文章主要介紹了
基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
硬件設計
仿真圖1:
計時功能,數碼管顯示
仿真圖2
數碼管LCD結合顯示;具有多次記錄模式;
仿真圖3
數碼管顯示;具有時鐘和秒表功能;
仿真圖4
數碼管顯示;具有語音播報功能(這里采用示波器模擬,實物在此管腳外接喇叭接口播放);能夠多次記錄;也可設置復位值。
程序設計
#include <reg52.h> #include <stdio.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit 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-tec.cn/archives/7294
總結
以上是生活随笔為你收集整理的基于51单片机电子秒表倒计时器proteus仿真程序原理图PCB数码管显示语言播报的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020/11/17css精灵图片
- 下一篇: c语言实验报告七大气科学,计算机实验报告