基于stc89c52单片机的简易计算器内容摘要:

oid wr_byte(uint8 dat) { uint8 i。 for (i=0。 i8。 i++) { SDA = dat amp。 0x01。 SCK = 1。 dat = 1。 SCK = 0。 } } /** * 读一个字节 */ uint8 rd_byte(void) { uint8 i, dat=0。 for (i=0。 i8。 i++) { dat = 1。 if (SDA) dat |= 0x80。 SCK = 1。 SCK = 0。 } return dat。 } void reset_ds1302(void) { RST = 0。 SCK = 0。 RST = 1。 } /** * 清除写 保护 */ void clear_ds1302_WP(void) { reset_ds1302()。 RST = 1。 wr_byte(0x8E)。 wr_byte(0)。 SDA = 0。 RST = 0。 } /** * 设置写保护 */ voidset_ds1302_WP(void) { reset_ds1302()。 RST = 1。 wr_byte(0x8E)。 wr_byte(0x80)。 SDA = 0。 RST = 0。 } /** * 设定时钟数据 */ void set_time(uint8 *timedata) { uint8 i, tmp。 for (i=0。 i7。 i++) // 转化为 BCD 格式 { tmp = timedata[i] / 10。 timedata[i] = timedata[i] % 10。 timedata[i] = timedata[i] + tmp*16。 } clear_ds1302_WP()。 reset_ds1302()。 RST = 1。 wr_byte(DS1302_W_ADDR)。 for (i=0。 i7。 i++) { wr_byte(timedata[i])。 delay(10)。 } wr_byte(0)。 SDA = 0。 RST = 0。 set_ds1302_WP()。 } /** * 读时钟数据( BCD 格式) */ void rd_time(uint8 *timedata) { uint8 i。 reset_ds1302()。 RST = 1。 wr_byte(DS1302_R_ADDR)。 for (i=0。 i7。 i++) { timedata[i] = rd_byte()。 delay(10)。 } SDA = 0。 RST = 0。 } void ds_init() { set_time(time)。 } 液晶显示屏显示模块 如上所述,当数字输入键盘有键按下的时候,经过程序识别,则会有相应结果被送入显示屏得到显示。 如果是数字键则直接放入液晶显示缓冲区,如果再次有数字键按下,则应将缓冲区的数字向高位移动一位,以构成两位数,之前输入的置之高位,并记录按键次数,每输入一个键值都 调用显示程序出来;如果是运算符,则执行相应的运算,送入单片机芯片C51 内进行计算后将结果调用显示程序显示结果。 该设计中选取的是 RT1602C型号液晶显示屏,如下图 图 ⑤ 显示电路 显示子程序 include //检验忙函数 void check_busy() { do { RS=0。 RW=1。 P0=0xff。 E=0。 E=1。 }while(busy)。 } //写命令函数 void wr_mand(uint8 ) { check_busy()。 RS=0。 RW=0。 P0=。 E=1。 delay(5)。 E=0。 } //写数据函数 void wr_data(uint8 dat) { check_busy()。 RS=1。 RW=0。 P0=dat。 E=1。 delay(5)。 E=0。 } //1602 显示函数 void display_1602(uint8 addr,uint8 *p) { wr_mand(addr)。 delay(10)。 while(*p!=39。 \039。 ) { wr_data(*p++)。 delay(10)。 } } //1602 初始化函数 void init_1602() { uint8 i。 for(i=0。 i3。 i++) { wr_mand(0x30)。 } wr_mand(0x38)。 delay(10)。 wr_mand(0x01)。 delay(10)。 wr_mand(0x06)。 delay(10)。 wr_mand(0x0c)。 } 硬件元件清单 系统元器件清单 见表 器件 单价 数量 总价 AT89C52 元 1 元 DS1302 元 1 元 RT1602C( LCD) 元 1 元 有源 蜂鸣器 元 1 元 电阻 排阻 元 1 元 10K 元 2 元 晶振 12MHZ 元 1 元 元 1 元 万能板 12*18 元 1 元 9*15 元 1 元 底座 AT89C52 元 1 元 DS1602 元 1 元 按键(大号) 元 18 元 杜邦线 元 10 元 电解电容 30PF 元 2 元 10UF 元 1 元 排针 元 1 元 排插 元。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。