日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ADC0809仿真-LCD602及数码管显示

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADC0809仿真-LCD602及数码管显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????proteus是一個仿真軟件,可以用來仿真電子線路的工作狀況,具有多種EDA工具軟件(的功能。這些功能是:1.原理布圖;2.PCB自動或人工布線;3.SPICE電路仿真;

????????它可以仿真51系列、AVR、PIC、ARM、STM32等常用主流單片機。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運行后輸入輸出的效果。配合系統配置的虛擬邏輯分析儀、示波器等,Proteus建立了完備的電子設計開發環境。

以下內容分別對ADC0809在51單片機下,在LCD602及數碼管上的仿真例程

1.ADC0809+LCD1602仿真

(1)仿真圖(采用的是protues7.8版本)

(2)程序

程序采用模塊化編程,以LCD1602及ADC0809作為兩個模塊,每個模塊具有.h和.c文件,分別為1602.c和1602.h,以及0809.c和0809.h,然后通過main.c文件對這兩個驅動程序進行調用;

/********main.c***********/ #include "0809.h" #include "1602.h" ? uchar table1[]="LCD1602 TEST OK"; uchar table2[]="U=0.000V"; uint num; void DelayMS(uint ms) {uchar i;while(ms--){for(i=0;i<120;i++);} } ? void LCD_Display() {uint d ;uchar i;Red_0809 ( ) ;d =num * 5000.000 / 256;table2[2]=d/1000+'0';table2[4]=d/100%10+'0';table2[5]=d/10%10+'0';table2[6]=d%10+'0';write_com(0x80);i=0;while(table1[i]!='\0'){write_dat(table1[i++]); ? ?}write_com(0x80+0x44);i=0;while(table2[i]!='\0'){write_dat(table2[i++]);} } ? void main() {TMOD = 0x02;TH0 ?= 0x14;TL0 ?= 0x00;IE ? = 0x82;TR0 ?= 1;P1 ? = 0x3f;init();while(1){LCD_Display();??} } ? void Timer0_INT() interrupt 1 {CLK = !CLK; }/********1602.h***********/ #ifndef __1602_H__ #define __1602_H__ ? #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char ? sbit rs=P0^0; sbit rw=P0^1; sbit e=P0^2; ?void delay_50us(uchar i);void write_com(uchar com);void write_dat(uchar dat);void?init?(void); #endif ? /********1602.c***********/ #include "1602.h" #include "0809.h" ? void delay_50us(uchar i) {uchar ?a;for (;i>0;i--)for (a=0;a<20;a++); }void write_com(uchar com) ? ?? {rs=0;rw=0;e=0;P2=com;delay_50us(10);e=1;delay_50us(20);e=0; } void write_dat(uchar dat) ? {rs=1;rw=0;e=0;P2=dat;delay_50us(10);e=1;delay_50us(20);e=0; ? }void init (void) ? {delay_50us(300);write_com(0x38);delay_50us(300);write_com(0x38);delay_50us(100);write_com(0x38);write_com(0x38);write_com(0x01);write_com(0x06);write_com(0x0c); } ? /********0809.h***********/ #ifndef __0809_H__ #define __0809_H__ #include <reg52.h> #define uint unsigned int #define uchar unsigned char extern?uint?num; sbit OE ?= P1^0; sbit EOC = P1^1; sbit ST ?= P1^2; sbit?CLK?=?P1^3; void?Red_0809?(); #endif ? /********0809.c***********/ #include?"0809.h" void Red_0809 () {???ST = 0;ST = 1;ST = 0;while(EOC == 0);OE = 1;num = P3;OE?=?0; }

2.ADC0809+數碼管仿真

(1)仿真圖(采用的是protues7.8版本)

(2)程序

#include <reg52.h> #define uint unsigned int #define uchar unsigned char ?uchar code LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; sbit OE = P1^0; sbit EOC = P1^1; sbit ST = P1^2; sbit CLK = P1^3; ?void DelayMS(uint ms) {uchar i;while(ms--){for(i=0;i<120;i++);} } ? void Display_Result(uint d) {P2 = 0xf7;P0 = LEDData[d%10];DelayMS(5);P2 = 0xfb;P0 = LEDData[d%100/10];DelayMS(5);P2 = 0xfd;P0 = LEDData[d%1000/100];DelayMS(5);P2 = 0xfe;P0 = LEDData[d/1000] +128;DelayMS(5); } ? void main() {uint num,num1;TMOD = 0x02;TH0 = 0x14;TL0 = 0x00;IE = 0x82;TR0 = 1;P1 = 0x3f;while(1){ST = 0;ST = 1;ST = 0;while(EOC == 0);OE = 1;num1 = P3;OE = 0;num =num1 *5000.000 / 256;Display_Result(num);} } ? void Timer0_INT() interrupt 1 {CLK = !CLK; }

關注公眾號-單片機實例設計,發送關鍵詞:ADC0809,獲取。

仿真及程序下載鏈接

總結

以上是生活随笔為你收集整理的ADC0809仿真-LCD602及数码管显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。