ADC0809仿真-LCD602及数码管显示
生活随笔
收集整理的這篇文章主要介紹了
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及数码管显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java概述——01吹牛皮之Java的引
- 下一篇: 接收机动态范围,阻塞干扰,IQ平衡和镜像