国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

輸出模擬

2019-11-08 03:07:02
字體:
來源:轉載
供稿:網友
/*----------------------------------------------- 名稱:IIC協議 PCF8591 AD/DA轉換 論壇:www.doflye.net 編寫:shifang 修改:無 內容:使用DA輸入,數碼管顯示輸出數字量,LED顯示模擬電壓大小------------------------------------------------*/ #include <reg52.h> #include "i2c.h"#include "delay.h"#include "display.h"#define AddWr 0x90 //寫數據地址 #define AddRd 0x91 //讀數據地址sbit RS = P2^6; //定義端口 sbit RW = P2^5;sbit EN = P2^7;sbit spk = P1^5;sbit P1_1 = P1^1;sbit P1_2 = P1^2;sbit P1_3 = P1^3;sbit P1_4 = P1^4;sbit P1_6 = P1^6;sbit P1_7 = P1^7;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0unsigned char second;unsigned char minute;unsigned char hour;unsigned char flag;unsigned char sflag;unsigned char mflag,j = 5;unsigned char num;extern bit ack;bit WriteDAC(unsigned char dat);/*------------------------------------------------ 主程序------------------------------------------------*//*------------------------------------------------ uS延時函數,含有輸入參數 unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時 長度如下 T=tx2+5 uS ------------------------------------------------*/void DelayUs2x(unsigned char t){ while(--t);}/*------------------------------------------------ mS延時函數,含有輸入參數 unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編------------------------------------------------*/void DelayMs(unsigned char t){ while(t--) { //大致延時1mS DelayUs2x(245); DelayUs2x(245); }}/*------------------------------------------------ 判忙函數------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); }/*------------------------------------------------ 寫入命令函數------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { // while(LCD_Check_Busy()); //忙則等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; }/*------------------------------------------------ 寫入數據函數------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { //while(LCD_Check_Busy()); //忙則等待 DelayMs(5); RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; }/*------------------------------------------------ 清屏函數------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); }/*------------------------------------------------ 寫入字符串函數------------------------------------------------*/ 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_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); }/*------------------------------------------------ 初始化函數------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*顯示模式設置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*顯示關閉*/ LCD_Write_Com(0x01); /*顯示清屏*/ LCD_Write_Com(0x06); /*顯示光標移動設置*/ DelayMs(5); LCD_Write_Com(0x0C); /*顯示開及光標設置*/ }void ISR_time() interrupt 1{ unsigned char i; EA = 0; TMOD = 0x01; TH0 = 0x3c; TL0 = 0xb0; i++; if(i == 20) { i = 0; second++; //flag++; } EA = 1;}void time_add(){ if(second == 60) { second = 0; minute++; sflag = 1; } if(minute == 60) { minute = 0; hour++; mflag = 1; } if(hour == 24) { hour = 0; } if(sflag == 1 && mflag == 1) { while(1) { while(j--) { spk = !spk; DelayMs(1); } flag = 1; if(flag == 1) { sflag = 0; mflag = 0; flag = 0; break; } WriteDAC(num); num++;//連續累加,值從0-255反復循環,并顯示在數碼管上, TempData[0]=dofly_DuanMa[num/100]; TempData[1]=dofly_DuanMa[(num%100)/10]; TempData[2]=dofly_DuanMa[(num%100)%10]; DelayMs(100); } }}void keyscanf(void){ if(!P1_1) { DelayMs(2); if(!P1_1) { while(!P1_1); second++; if(second == 60) { second = 0; } } } if(!P1_2) { DelayMs(2); if(!P1_2) { while(!P1_2); minute++; if(minute == 60) { minute = 0; } } } if(!P1_3) { DelayMs(2); if(!P1_3) { while(!P1_3); hour++; if(hour == 24) { hour = 0; } } } if(!P1_4) { DelayMs(2); if(!P1_4) { while(!P1_4); EA = 0; ET0 = 0; } } if(!P1_6) { DelayMs(2); if(!P1_6) { while(!P1_6); EA = 1; ET0 = 1; TR0 = 1; } } if(!P1_7) { DelayMs(2); if(!P1_7) { while(!P1_7); P0 = 0x00; second = 0; } }}main(){// unsigned char num=0; Init_Timer0(); TMOD = 0x01;TR0 = 1;EA = 1;TH0 = 0x3c;TL0 = 0xb0;ET0 = 1;LCD_Init(); LCD_Clear();//清屏DelayMs(5); while (1) //主循環 { time_add(); keyscanf(); LCD_Write_Char(7,0,0x30 + second%10); LCD_Write_Char(6,0,0x30 + second/10); LCD_Write_Char(5,0,0x3a); LCD_Write_Char(4,0,'0' + minute%10); LCD_Write_Char(3,0,'0' + minute/10); LCD_Write_Char(2,0,0x3a); LCD_Write_Char(1,0,'0' + hour%10); LCD_Write_Char(0,0,'0' + hour/10); //WriteDAC(num);// num++;//連續累加,值從0-255反復循環,并顯示在數碼管上,// TempData[0]=dofly_DuanMa[num/100]; //TempData[1]=dofly_DuanMa[(num%100)/10]; //TempData[2]=dofly_DuanMa[(num%100)%10];// DelayMs(100); }}/*------------------------------------------------ 寫入DA轉換數值輸入參數:dat 表示需要轉換的DA數值,范圍是0-255------------------------------------------------*/bit WriteDAC(unsigned char dat){ Start_I2c(); //啟動總線 SendByte(AddWr); //發送器件地址 if(ack==0)return(0); SendByte(0x40); //發送器件子地址 if(ack==0)return(0); SendByte(dat); //發送數據 if(ack==0)return(0); Stop_I2c(); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙游县| 陈巴尔虎旗| 连云港市| 尼玛县| 海丰县| 秦安县| 金沙县| 田林县| 长白| 田阳县| 芒康县| 贵南县| 高安市| 丹巴县| 陆河县| 阳高县| 福海县| 若尔盖县| 乐陵市| 佛学| 得荣县| 光泽县| 龙山县| 通化县| 巫溪县| 古交市| 广饶县| 柳州市| 龙门县| 周至县| 江城| 胶南市| 铁力市| 宣威市| 南漳县| 芷江| 琼中| 石台县| 通许县| 双柏县| 乐陵市|