Proteus-仿真实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* 主程序 */
void main()
{
STB=1;
IE=0x85; //开外部中断:EA=1,EX1=1,EX0=1 即 IE=10000101B=85H
PX0=1;
//提升外部中断优先级
PX1=1;
IT0=1;
//外部中断设置为边沿触发
IT1=1;
output_led(LED_SEG[16]); //熄灭7段LED数码管(2位LED,所以 送两次)
}
/*******读出数据送显*********/
void int1() interrupt 2
{
uchar content,valueH,valueL; //声明内存变量
content=Read_One_Byte(0x04); //从AT24C02中04H单元读出数据
valueL=content%16;
参考C程序
#include<reg52.h> //包含头文件 #include<stdio.h> #include<absacc.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define DELAY_TIME 60 //定义常量 #define TRUE 1 #define FALSE 0 sbit SCL=P1^0; //用P1.0、P1.1 模拟I2C 总线
/*输入模块子程序*/ uchar pdat_in() {
uchar counter; uchar data_buf; counter=8; do { ACC=ACC<<1; SCLK=0; A0=SDAT; SCLK=1; } while(--counter!=0); SCLK=0; data_buf=ACC; return(data_buf); }
sbit SDA=P1^1; sbit SDAT=P1^2; //用P1.2、P1.3 模拟串口
sbit SCLK=P1^3; sbit PSB=P1^4; //P1.4用于控制4014的P/S端 sbit LED0=P1^5; //P1.5,P1.6用作LED数码管的线选信号
sbit LED1=P1^6; sbit STB=P1^7; //P1.7与4094 STB引脚相连 sbit LEDDAT=P3^0; //单片机的串口用于扩展静态LED显示
//取低4位
valueH=content/16;
//取高4位
output_led(LED_SEG[valueL]); //查字段表送LED显示
output_led(LED_SEG[valueH]);
单片机原理与应用
单片机原理与应用
Proteus 仿真实例
【例9-9】通过80C51单片机对AT24C02进行读写操作,当 写按钮按下时,将外部8位数字量写入AT24C02中;当读 按钮按下时,从AT24C02内将该数字量读取出来,并送 LED显示。其中外部8位数字量由8位拨码开关控制其各位 的数值。
图9-28 Proteus仿真电路—AT24C02读写
/********** I2C 标准子函数 ************/ /**函数内容参见教材或本课件[例9-6],此处省略**/ void DELAY(unsigned int t) {……} void I2C_Start(void) {……} void I2C_Stop(void) {……} void SEND_0(void) {……} void SEND_1(void) {……} bit Check_Acknowledge(void) {……} void WriteI2CByte(char b)reentrant {……} char ReadI2CByte(void)reentrant {……} void Write_One_Byte(char addr,char thedata) {……} char Read_One_Byte(char addr) {……}
output_led(LED_SEG[16]);
while(1);
//等待中断
}
}
/* 中断服务子程序 */
/*******8位数字信号写入*********/
void int0() interrupt 0
{
uchar temp;
temp=get_input();
Write_One_Byte(0x04,temp);
//PSB=1;
return(dat);
}
/*输出模块子程序*/ void output_led(uchar sdata) { LED0=0; LED1=0; STB=1; SCON=0x00; //置串行口为工作方式0,同时清零REN ES=0; SBUF=sdata; //送低位数据 while(TI==0); TI=0; STB=0; LED0=1; LED1=1; }
sbit CLK=P3^1; sbit A0=ACC^0; //定义A0为累加器的最低位
uchar LED_SEG[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,
0x83,0xc6,0xa1,0x86,0x8e,0xff} ;//字段码表:字符0~F,灭灯
uchar get_input()
{
uchar dat;
Байду номын сангаас
//声明位于RAM的内存变量
PSB=1;
//置4014于并行输入工作方式
SCLK=0;
//串行口未启动之前,P3.1上无同步移位脉冲
SCLK=1;
//并行置数,软件产生一个脉冲上升沿
PSB=0;
//置4014于串行移位工作方式
dat=pdat_in();
相关文档
最新文档