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

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

DA輸出模擬

2019-11-08 03:07:04
字體:
來源:轉載
供稿:網友
/*----------------------------------------------- 名稱: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(); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新源县| 崇阳县| 横峰县| 城步| 修武县| 岳池县| 江油市| 兴安盟| 名山县| 炉霍县| 新乐市| 印江| 黔南| 临清市| 巴塘县| 淮北市| 麦盖提县| 玉龙| 广昌县| 宜君县| 六枝特区| 临邑县| 炉霍县| 平凉市| 封开县| 石棉县| 金沙县| 兴文县| 澄迈县| 银川市| 乌拉特前旗| 正定县| 宣威市| 纳雍县| 石台县| 宜阳县| 彭水| 宿州市| 三明市| 新巴尔虎左旗| 彝良县|